ПредишенСледващото

За да се справят събития, които се случват асинхронно с изпълнението на програмата, е най-подходящ механизъм капан. Прекъсване може да се разглежда като специално събитие в системата, която изисква незабавна реакция. Например, една добре изградена система на висока надеждност се използва за прекъсване на аварията в електрическата мрежа за извършване на процедури за записване на съдържанието на регистри и памет на магнитен носител, така че след операцията по оползотворяване на енергия може да продължи от същото място.

Изглежда очевидно, че може да има различни прекъсвания за най-различни причини. Ето защо, за прекъсване не се разглежда просто като такава: тя е свързана с редица, наречена тип номер прекъсване или просто да прекъсне номер. Всяко прекъсване брой свързва конкретно събитие. Системата е в състояние да разпознава кой прекъсне, то хрумна някаква брой и стартира съответната процедура за този номер.

Програмите могат да се предизвикат прекъсване на предварително определен брой. За да направите това, те използват INT команда. Този така наречен софтуер прекъсва. Софтуер прекъсва не са асинхронни, както се призовава в програмата (и тя знае нещо, тя причинява прекъсване!).

Използване на прекъсване при работа с по-бавни външни устройства позволяват да се съчетаят на входа / изхода на обработка на данни в централния процесор и по този начин подобрява общата производителност на системата.

Някои прекъсване (първите пет на брой ред) са запазени за използване от процесора в случай на каквито и да било специални събития, като се опитва да се делят на нула, препълване и др

Понякога е желателно да се направи системата нечувствителен към всички или определени прекъсвания. За тази цел, така наречената маскиране прекъсвания, които ние ще обсъдим по-подробно. Но някои не могат да се прикрие прекъсването е НИМ.

Ние също така имайте предвид, че манипулаторите прекъсне могат сами да предизвикат софтуерни прекъсвания, например, за да получат достъп до услугата BIOS, или DOS (BIOS услуга се предлага и при прекъсване софтуерен механизъм).

Изготвяне на собствените си програма за прекъсване и подмяна на стандартната DOS и BIOS манипулатор е отговорна и предизвикателна работа. Необходимо е да се вземат под внимание всички детайли на оборудването и оперативната съвместимост на софтуера и хардуера. Когато отстраняване на грешки възможно унищожаване с непредвидими последици от операционната система, така че трябва да погледнем много внимателно в това, което прави вашата програма.

Инициализиране на масата е отчасти BIOSposle оборудване, тестване и преди стартирането на операционната система, отчасти зареди DOS. DOS да включите някои BIOS прекъсва.

Нека сега разгледаме съдържанието на масата за прекъсване вектор. Ето значенията на някои от най-важните направления:

Прекъсване на такта. Се генерира след изпълнението на всяка команда машина, ако една дума знамена бит поетапно TF следа. Използва се за отстраняване на грешки програми. Това прекъсване се генерира след изпълнение на инструкцията MOV в регистрите на сегмента или след зареждане на сегмента регистрира отбор POP.

Хардуер НИМ. Това прекъсване може да се използва по различни начини в различните машини. Обикновено, когато се генерира грешка паритет в паметта и заявка за прекъсване от копроцесор.

Прекъсване проследяване. Това прекъсване се генерира, когато машина инструкция еднобайтовата с CCh код и обикновено дебъгерите се използва за задаване на точка на прекъсване.

Overflow. Изпускани машина команда в това, ако знамето на. Ако сигналът не е зададен, инструкция В се изпълнява като NOP. Това прекъсване се използва за обработка на грешки при извършване на аритметични операции.

Отпечатване на копие на екрана. Се генерира при натискане на бутона на клавиатурата PrtScr. Обикновено се използва за отпечатване на изображението на екрана. За 80286 се генерира, когато машината ОБВЪРЗАНИ команда, ако стойността на тест е отишло отвъд посочения диапазон.

Неопределен Кодът или дължина команда е по-голяма от 10 байта (за 80 286).

IRQ0 - IRQ15 - това хардуерно прекъсване, те ще бъдат обяснени по-късно.

Често по време на критичните части на програмата, за да се гарантира спазването на определена последователност от команди като цяло, трябва да забраните прекъсва. Можете да направите това CLI команда. Той трябва да бъде поставен в началото на критичната последователност от команди, но в крайна позиция на екипа STI, позволява на процесора да вземе прекъсване. CLI команда деактивира само маскирани прекъсват без маска винаги се обработват от процесора.

Ако използвате прекъсва забранено използване на текстови команди, които, да внимава да не се прекъсне затвори за продължителен период от време, тъй като това може да доведе до нежелани последици. Така например, ще бди.

Ако не сте забраните всички прекъсвания, но само някои от тях, например, от клавиатурата, за тази цел е необходимо да се използват услугите на контролера на прекъсване. Подробностите са малко по-ниски, точно сега, ние се отбележи, че издаването на този контрол контролер информация може да се маскира като прекъсват отделните устройства.

Вашата програма може да се наложи да организира обработката на определени прекъсвания. За да направите това, програмата трябва да прехвърлите вектор да си манипулатор. Това може да стане чрез промяна на съдържанието на съответния елемент на вектор на прекъсване маса.

Не е важно да се забравя, преди да излезе, за да възстановите съдържанието на променените вектори в таблицата с прекъсване, защото след приключване на програмата памет, която е предвиден за него, той се счита за свободен и може да се използва, за да изтеглите друга програма. Ако сте пропуснали да се възстанови вектор прекъсване, и то е, системата може да се срине - вектор вече сочи към област, която може да съдържа нищо.

Функционални 25З 21ч прекъсват векторни комплекти с броя на AL се намирате, прекъсващият оператор DS: DX.

Разбира се, можете да се обърнете пряко към вектор на прекъсване маса, но след това е необходимо по време на запис, за да се прикрие команда CLI прекъсне, не забравяйте да ги решим след записа отбор STI.

Ако имате нужда да добавите някой от собствените си действия, освен че изпълнява стандартен прекъсване манипулатор, е възможно да се организира верига от прекъсвания.

Библиотеката Quick C има функция за прекъсване организацията на веригата - _chain_intr ().

Помислете за по-подробно IDE библиотечни възможности за бързо C, предназначен за работа с прекъсвания.

Модификатор прекъсване (_Interrupt за бързо С 2.5 и С 6.0) описва функцията на които е прекъсване манипулатор. Такава функция е завършена връщане от прекъсване обработка IRET команда, и то ще се запази автоматично генерираните командните регистри към момента на влизане и възстановяването им, когато излезете от прекъсващ оператор. Пример на модификатора за описване прекъсване функция обработка:

Ключова дума прекъсване също така се използва за описване на променливите за съхранение прекъсват вектори:

Модификатори _Interrupt и _far за бързо С 2.5 и С 6.0 са синоними съответно прекъсва и досега.

Какви са изискванията, за да прекъснете програма?

Ако прекъсва се срещат често, обработването им може значително да забави прилагането. Ето защо, прекъсващият трябва да бъде кратък, бърз програма, която извършва само най-необходимите действия. Например, вземете следващия знак от пристанището на принтера и го поставете в буфера, увеличаване на стойността на глобален брояч прекъсване и т.н.

За да инсталирате своя прекъсване функция манипулатор, използвайте _dos_setvec. Тази функция може да отнеме два параметъра - номер на прекъсване и указател към новата функция за обработка на прекъсване. Например:

В този пример, клавиатура с номерирани 16 часа прекъсване манипулатор my_key_intr установява нова прекъсване.

Този пример илюстрира използването на трите функции за работа с прекъсвания. Тази програма се основава собствена таймер прекъсване манипулатор, който ще се нарича около 18,2 пъти в секунда. За вграждане прекъсне треньор смята, таймер работи, а ако брояч стойност не е кратно на 20, за да чува компютър говорител е издаден. В края на новата програма таймер обработка прекъсване кара стар манипулатор с _chain_intr функция.

След инсталирането на нов процесор прекъсне таймер основните програмни чака натискане на произволен клавиш от клавиатурата, а след това възстановява старите съдържанието на вектора на прекъсване.

Хардуерните прекъсвания се генерират компютърни устройства, когато е необходимо за тяхното обслужване там. Например, таймер прекъсване манипулатор, съответстваща на прекъсване съдържанието увеличава клетките на паметта, използвани за съхранение. За разлика от софтуер прекъсва, причинени от самата планирано приложен софтуер, хардуер прекъсва винаги се случи асинхронно спрямо текущата програма. В допълнение, може да се окаже в същото време, няколко прекъсвания!

За да може системата да "не се губи", да решат кой да прекъсне за обслужване на първо място, има специална схема приоритет. Всеки прекъсване получава уникален приоритет. Ако няколко прекъсвания появят в същото време, системата дава предпочитание на висок приоритет, забавяне във времето за обработка на оставащите прекъсва.

приоритет система се основава на два чипа Intel 8259 (за машини XT-висока класа - на един такъв чип). Всяко устройство обслужва осем приоритета. Чипове могат да се комбинират (каскадни), за да се увеличи броят на приоритетни нива в системата.

приоритетни нива съкращение IRQ0 - IRQ15 (XT клас машини, има само нива IRQ0 - IRQ7).

За машини XT приоритети линейно зависими от броя на ниво прекъсване. IRQ0 предоставени най-висок приоритет, следвани от ходене IRQ1, IRQ2, IRQ3, и така нататък. ниво IRQ2 от XT-висока класа машини са били резервирани за бъдещо разширение на системата и като се започне с най-висока класа машини, IRQ2 е бил използван за каскадни прекъсване контролер 8259. Добавено приоритетни нива IRQ8 - IRQ15 в тези машини да се даде приоритет между IRQ1 и IRQ3.

Ето една таблица на хардуерни прекъсвания, подредени по реда на приоритета:

IRQ7 - прекъсване на принтера. Изпускани принтер, когато той е готов да изпълни следващата операция. Много адаптери принтер не използват това прекъсване.

От таблицата се вижда, че най-висок приоритет се дава на интервал таймер прекъсване, последвано от прекратяване на клавиатурата.

За да контролирате приоритетни схеми трябва да знае вътрешния устройството прекъсване контролер 8259. Incoming прекъсне съхраняват в заявка за прекъсване регистър НВД. Всеки един от осем бита в този регистър съответства прекъсване. След проверка на обработката в момента друг прекъсне искане на информация от регистъра на ISR услуга. Преди издаването на искане за прекъсване на процесора проверява съдържанието на маската на осем-битова регистрират КДС прекъсва. Ако прекъсването не е маскиран на това ниво, ще бъдете подканени да се прекъсне.

Най-интересното от гледна точка на програмирането за прекъсване контролер на прекъсване са маска регистър КДС и прекъсване регистър за контрол.

Bits прекъсват маска регистър съответства на номера на IRQ. С цел да се прикрие хардуера прекъсне и да е ниво, е необходимо да се изпрати регистър байт маска, където малко съответстваща на това ниво е настроен на 1. Така например, за да се прикрие прекъсване от дискета порт 21h трябва да изпрати на двоичен номер 01000000.

Ето един пример програма, която се представя за прекъсване от дискета:

Тази програма е достъпно на дискета, която дойде с книгата. то (HDD) Бягай, и се опитват да работа, например, карам А. Вие не успеем!

(Включително от дискета), за да "съживи" дискета, стартирайте програмата, която razmaskiruet всички прекъсва:

Имайте предвид, че ние сме просто маскирани прекъсване го от дискета, всички други устройства продължават да работи нормално. Ако беше дал машина инструкция CLI, ще забраните всички хардуерни прекъсвания. Това ще доведе, например, до факта, че клавиатурата ще бъде блокиран.

Ако обработва прекъсване 1 Летописи, добавката в края на програмата, не е необходимо, тъй като това е разширение на прекъсването друго прекъсване (таймер прекъсване).

Преди да завърши проучването на прекъсванията, нека се запитаме - това е възможно да се прикрие НИМ? Оказва се, че можеш!

Разбира се, ако сигнал за прекъсване пристигна на входа процесор прекъсване НИМ, нищо не може да се направи - за прекъсване ще се случи неизбежно. Но в XT и AT компютри условие схеми, блокиране вход НИМ НИМ процесор прекъсват.

По същия начин, за маскиране AT NMI бит 7 контролира 70Н порт. Запис 0ADh байт 70Н забрана порт НИМ и байта 2Dh - позволи преминаването прекъсване.

Имайте предвид, че ние не дай Боже НИМ "отвътре" на процесора - това е невъзможно по дефиниция, ние "не позволявайте на" сигнал за прекъсване на входа на НИМ.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!