Dklab, articole, principiile de lucru cu vectori de întreruperi

Dacă rulați un program similar, vom auzi un sunet aleator de fiecare dată când apăsăm sau eliberăm cheile.

4. Instalarea "non-patch" pe handlers IRQ







Dacă ne-am înființat o nouă procedură de procesare la una din întrerupere generate de un dispozitiv extern (de exemplu, o astfel de întrerupere, care corespunde cererii IRQ, cum ar fi timer-ul, tastatura, etc.), iar această procedură nu este „patch“, trebuie să vă amintiți unul lucru. La finalul acestei proceduri, asigurați-vă că pentru a efectua valoarea 20h a comenzii de scriere în portul 20h, care permite următoarele întreruperea pentru acest canal IRQ.
Să dăm un exemplu de situație a lui Pascal. Aici am setat "non-patch" pentru a întrerupe tastatura (numărul 9), în timp ce funcțiile tastaturii sunt, desigur, temporar blocate.






Încercați să eliminați ieșirea valorii în port. După prima apăsare a tastei, tastatura nu va mai răspunde. Iar după ce am părăsit programul, acesta va fi blocat.
Pe C, portul de ieșire 20h utilizează funcția outportb (0x20,0x20).

5. Mijloace pentru asigurarea restaurării garantate a vechilor vectori de întrerupere

Deși este aproape nicăieri să fie descrisă, în Pascal, la fel ca în C, este posibil să se stabilească o procedură care va fi numit la sfârșitul programului (indiferent dacă la sfârșitul sau în timpul situației de urgență normale). Acest lucru este foarte util atunci când lucrați cu vectori de întrerupere, deoarece trebuie să fie restaurate în orice caz la sfârșitul programului. În această procedură, trebuie să puneți comenzile pentru restaurarea vechilor vectori și apoi să o înregistrați ca o procedură de completare. Să dăm câteva exemple:







Trimiteți-le prietenilor: