FANDOM


Przerwanie (ang. interrupt) – sygnał powodujący zmianę przepływu sterowania, niezależnie od aktualnie wykonywanego programu. Pojawienie się przerwania powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez procesor kodu procedury obsługi przerwania (ang. interrupt handler).

Rodzaje przerwańEdit

Przerwania dzielą się na trzy grupy:

  1. Zewnętrzne – sygnał przerwania pochodzi z zewnętrznego układu obsługującego przerwania sprzętowe; przerwania te służą do komunikacji z urządzeniami zewnętrznymi, np. z klawiaturą, napędami dysków itp.
  2. Wewnętrzne, nazywane wyjątkami (ang. exceptions) – zgłaszane przez procesor dla sygnalizowania sytuacji wyjątkowych (np. dzielenie przez zero); dzielą się na trzy grupy:
    1. faults (niepowodzenie) – sytuacje, w których aktualnie wykonywana instrukcja powoduje błąd; gdy procesor powraca do wykonywania przerwanego kodu wykonuje następną, po tej która wywołała wyjątek, instrukcję;
    2. traps (pułapki) – sytuacja, która nie jest błędem, jej wystąpienie ma na celu wykonanie określonego kodu; wykorzystywane przede wszystkim w debugerach; gdy procesor powraca do wykonywania przerwanego kodu tę samą instrukcję która wywołała wyjątek;
    3. aborts – błędy, których nie można naprawić.
  3. Programowe – z kodu programu wywoływana jest procedura obsługi przerwania; najczęściej wykorzystywane do komunikacji z systemem operacyjnym, który w procedurze obsługi przerwania (np. w DOS 21h, 2fh, Windows 2fh, Linux x86 przerwanie 80h) umieszcza kod wywołujący odpowiednie funkcje systemowe w zależności od zawartości rejestrów ustawionych przez program wywołujący, lub oprogramowaniem wbudowanym jak procedury BIOS lub oprogramowanie wbudowane w urządzenie (firmware).

Producenci procesorów część pozycji w tablicy wektorów przerwań rezerwują dla przerwań wewnętrznych. Pozostałe numery przerwań mogą być dowolnie wykorzystane przez producentów systemów komputerowych i oprogramowania. Obsługiwanie większości przerwań (wszystkich lub wybranych numerów) można wstrzymać lub zablokować, wyjątkiem są przerwania niemaskowalne.

Przerwanie niemaskowalne (ang. NMI – Non-Maskable Interrupt) – specjalny rodzaj przerwania występujący w większości architektur procesorów. Tym, co odróżnia je od zwykłego przerwania, jest brak możliwości zignorowania (zamaskowania) go, stąd termin "niemaskowalne".

Obecnie przerwań NMI używa się głównie do debugowania kodu programów, który może wyłączać zwykłe przerwania (np. kod systemu operacyjnego).

Przerwania na przykładzie mikrokontrolera Intel 8051Edit

Typowy układ i51 posiada 5 lub 6 źródeł przerwań, którym można nadać jeden z 2 priorytetów. 2 ze źródeł są źródłami zewnętrznymi (reagującymi na zmianę zbocza lub poziom sygnału pinów układu), pozostałe współpracują z 2 (czasem 3) układami czasomierzy (ang. timer) i UARTem. Przerwania te można maskować. Stan wskaźników przerwań jest próbkowany w każdym cyklu maszynowym mikrokontrolera, a interpretacja stanu wskźników jest dokonywana w następnym cyklu. Jeśli spełnione są następujące warunki:

  • nie jest aktualnie wykonywana procedura obsługi przerwania o prirytecie wyższym lub identycznym od priorytetu przerwania zgłaszanego
  • bieżący cykl maszynowy jest ostatnim cyklem wykonywanej instrukcji (np. rozkaz DIV AB wykonywany jest w 4 cyklach)
  • nie jest wykonywana instrukcja RETI lub inna modyfikująca rejestry przerwań bądź priorytetów przerwań

mikrokontroler wykonuje skok do adresu prodedury obsługi przerwania. Adres ten jest określony przez wektor adresowy i w każdym mikrokontrolerze rodziny '51 taki sam.

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.