background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     1 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

1  Przerwania 

1.1  Obsługa zdarzeń, odpytywanie i przerwania 
Obs

ługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym 

systemie czasu rzeczywistego. 
 
Istniej

ą dwie metody pozyskania informacji o zdarzeniach: 

1.  Cykliczne odpytywanie urz

ądzenia czy zdarzenie zaszło (ang. 

polling). 

2.  Wykorzystanie przerwa

ń generowanych przez zdarzenia (ang. 

interrupts). 

 

Istniej

ą dwie metody informowania o zdarzeniach: metoda 

odpytywania rejestru zdarze

ń oraz wyzwalane zdarzeniami przerwania. 

 
 
Metoda odpytywania – w

łasności: 

1.  D

ługi czas reakcji na zdarzenie  

2.  Trudno

ści w uszeregowaniu obsługi zdarzeń według priorytetów. 

3.  Utrata czasu procesora na wykonanie ja

łowych czynności 

4.  Prostota implementacji – nie jest wymagany specjalny sprz

ęt. 

5.  Przewidywalno

ść – nic nie dzieje się niespodziewanie a tylko wtedy 

gdy nadejdzie na to zaplanowany czas. 

 
 

Obs

ługa zdarzenia poprzez przerwanie  

Obs

ługa  zdarzenia  poprzez  przerwanie  polega  na  zawieszeniu  aktualnie 

wykonywanego  w

ątku  i  wykonaniu  przypisanej  zdarzeniu  sekwencji 

instrukcji  nazywanej  procedur

ą  obsługi  przerwania.  Po  zakończeniu 

procedury nast

ępuje powrót do przerwanego wątku. 

 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     2 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

w

ątek  procedura obsługi

przerwania

przerwanie

powrót z procedury

obs

ługi przerwania

ISR

 

Rys. 1-1 Obs

ługa zdarzenia  poprzez procedurę obsługi przerwania 

 
Przyk

ładem urządzenia zgłaszającego przerwania może być układ 

transmisji szeregowej typu 8250. 
 

Bufor odbiorczy

Bufor nadawczy

RX

TX

CTS

RTS

R0

R7

dane wysy

łane

dane odbierane

linie
sterowanie
modemem

kontroler

przerwa

ń

uk

ład 8250

IRQ3

INT

R1

 

Rys. 1-2 Uk

ład transmisji szeregowej 8250 

 
Funkcje kontrolera przerwa

ń: 

• 

Maskowanie przerwa

ń. 

• 

Tworzenie powi

ązania pomiędzy  linią zgłoszenia przerwania a 

procedur

ą obsługi przerwania (za pośrednictwem wektora przerwań). 

• 

Arbitra

ż przerwań. 

 
Arbitra

ż przerwań.  

Kontroler przerwa

ń posiada 8 linii zgłaszania przerwań. Arbitraż polega 

na rozstrzyganiu czy i kiedy, wykonywana w

łaśnie procedura obsługi 

przerwania, ma by

ć przerwana przez pojawiające się zgłoszenie innego 

przerwania.  
 
Mo

żliwe są dwie podstawowe strategie obsługi przerwań.  

• 

strategia jednopoziomowa  

• 

wielopoziomowa.  

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     3 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

 
Strategia jednopoziomowa - polega wstrzymaniu si

ę z obsługą nowego 

przerwania do  czasu zako

ńczenia obsługi przerwania. 

  
Strategia wielopoziomowa - gdy w czasie obs

ługi przerwania o niższym 

priorytecie pojawi si

ę zgłoszenie przerwania o priorytecie wyższym, to 

system przyjmie przerwanie o wy

ższym priorytecie. 

 

w

ątek

 procedura obs

ługi

przerwania 1

przerwanie 2

przyj

ęcie przerwania 2

przerwanie 1

ISR 1

ISR 2

 procedura obs

ługi

przerwania 2

EOI

EOI

czas

 

Rys. 1-3 Dwa przerwania obs

ługiwane w systemie jednopoziomowym

 

        

w

ątek

 procedura obs

ługi

przerwania 1

przerwanie 2

przyj

ęcie przerwania 2

przerwanie 1

ISR 1

ISR 2

 procedura obs

ługi

przerwania 2

kontynuacja ISR1

czas

 

Rys. 1-4 Obs

ługa przerwań w trybie wielopoziomowym 

 

Nie nale

ży mylić priorytetów przerwań wynikających z działania 

kontrolera przerwa

ń z priorytetami wątków. 

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     4 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

1.2  Obsługa przerwań w systemie QNX6 Neutrino 
Funkcje konieczne do obs

ługiwania przerwań:  

• 

funkcje blokowania przerwa

ń (wszystkich lub pojedynczych) w 

systemie jedno i wieloprocesorowym.  

• 

funkcja 

InterruptAttach() instalujące handler obsługi przerwania  

i funkcja  

InterruptAttachEvent() transformacji przerwanie w 

zdarzenie.  

• 

funkcja blokuj

ącą wątek bieżący w oczekiwaniu na przerwanie. 

 

Opis funkcji 

Nazwa funkcji 

Blokowanie przerwa

ń 

InterruptDisable() 

Odblokowanie przerwa

ń 

InterruptEnable()

 

Za

łożenie blokady przerwań 

InterruptLock()

 

Zdj

ęcie blokady przerwań 

InterruptUnlock()

 

Zamaskowanie przerwania 

InterruptMask() 

Odmaskowanie przerwania 

InterruptUnmask() 

Instalacja procedury obs

ługi 

przerwania 

InterruptAttach() 

Transformacja przerwania w 
zdarzenie 

InterruptAttachEvent() 

Oczekiwanie na przerwanie 

InterruptWait() 

Tabela 1-1 Funkcje systemowe dotycz

ące obsługi przerwań 

1.3  Blokowanie i maskowanie przerwań 
Procedury  obs

ługi  przerwania  często  muszą    modyfikować  struktury 

danych  z  których  korzystaj

ą  także  inne  jeszcze  wątki  –  należy  zapewnić 

wzajemne wykluczanie. 
 

handler

wspólne

dane

W

ątek W1

Przerwanie

 

Rys. 1-5 W

ątek W1 i procedura obsługi przerwania wykorzystują 

wspólne dane 

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     5 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

Blokowanie przerwa

ń (ang. interrupt disabling

Blokowanie  przerwa

ń  jest  to  niedopuszczenie  do  zgłoszenia  wszystkich 

przerwa

ń i realizowane jest w procesorze. 

 
 

Maskowanie  przerwa

ń (ang. interrupt mask

Maskowanie 

przerwa

ń  jest  to  niedopuszczenie  do  zgłoszenia 

okre

ślonego przerwania i  realizowane jest w kontrolerze przerwań. 

 
 

InterruptDisable – blokowanie przerwań 
int InterruptDisable(void) 
 
Wykonanie  funkcji spowoduje zablokowanie wszystkich przerwa

ń 

zewn

ętrznych.  

 

 

Czas zablokowania przerwa

ń należy ograniczyć do niezbędnego 

minimum. 
 
 
Po zablokowaniu przerwa

ń komputer staje „głuchy” i przestaje reagować 

na jakiekolwiek zewn

ętrzne zdarzenia z wyjątkiem zdarzeń 

obs

ługiwanych w trybie odpytywania. 

 

Funkcj

ę blokowania przerwań mogą wykonywać tylko procesy będące 

w

łasnością administratora.  

W

ątek zamierzający zablokować przerwania powinien wcześniej 

za

żądać przywileju wykonania sprzętowej operacji wejścia wyjścia 

poprzez wykonanie  funkcji 

ThreadCtl(_NTO_TCTL_IO,0) 

 

InterruptEnable – odblokowanie przerwań 
int InterruptEnable(void) 
 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     6 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

W  systemach  wieloprocesorowych  do  zapewnienia  ochrony  sekcji 

krytycznej  w  procedurach  obs

ługi  przerwań  blokowanie  przerwań  jest 

niewystarczaj

ące. Należy użyć mechanizmu wirującej blokady. 

 
 
 

InterruptLock – założenie blokady  
int InterruptLock(intrspin_t *spinlock) 
spinlock 
Zmienna blokady - wspólna dla handlera i wątku 
 
Funkcja 

InterruptLock() sprawdza zawartość zmiennej 

spinlock().  
 
Dzia

łanie: 

Gdy warto

ść  zmiennej spinlock wskazuje że nie jest ona zajęta, to ją 

zajmuje wpisuj

ąc do niej odpowiednią wartość i blokuje przerwania.  

Sprawdzenie  i  ustawienie  zmiennej  odbywa  si

ę  jako  nieprzerywalna 

operacja  atomowa.  Gdy  zmienna 

spinlock  jest  zajęta,  wykonywane 

jest  ponowne  sprawdzenie  warto

ści  tej  zmiennej.  Sprawdzanie  odbywa 

si

ę tak długo aż zmienna  spinlock nie zostanie  zwolniona.  

 

InterruptUnlock – zdjęcie blokady 
int InterruptUnlock(intrspin_t *spinlock) 
spinlock 
Zmienna blokady - wspólna dla handlera i wątku 
 
Funkcja 

InterruptUnlock() powoduje zdjęcie blokady i 

odblokowanie przerwa

ń. 

 
intrspin_t zm_blok; 
....
 
InterruptLock(&zm_blok); 
/* Sekcja krytyczna   */ 
... 
InterruptUnlock(&zm_blok); 
 
 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     7 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

Indywidualne  przerwania  mo

żna  blokować  używając  rejestru  maski  w 

kontrolerze  przerwa

ń.  Jedno  określone  przerwanie  zablokowane  może 

by

ć przy użyciu funkcji: 

InterruptMask – zamaskowanie przerwania 
int InterruptMask(int  intr, int id) 
intr  
Numer przerwania które ma być zamaskowane 
id 

Identyfikator handlera zwracany przez funkcje 
InterruptAttach(), InterruptAttachEvent()  lub –1 
gdy przerwanie ma by

ć zamaskowane dla wszystkich 

handlerów. 

 
Wykonanie funkcji powoduje zamaskowanie przerwania sprz

ętowego 

podanego jako pierwszy parametr, dla handlera o identyfikatorze 
podanym jako drugi parametr. 
 

Zamaskowane  przerwanie  mo

żna  dozwolić  (odmaskować)  używając 

funkcji: 

InterruptUnmask – dozwolenie przerwania 
int InterruptUnmask(int intr, int id) 
intr  
Numer przerwania które ma być dozwolone 
id 

Identyfikator handlera zwracany przez funkcje 
InterruptAttach, InterruptAttachEvent  lub –1 gdy 
przerwanie ma by

ć dozwolone dla wszystkich handlerów. 

 
 

1.4  Instalacja procedur obsługi przerwań. 
Zadania realizowane poprzez procedur

ę obsługi przerwania: 

1.  Stwierdzenie które z urz

ądzeń wymaga obsługi (gdy więcej urządzeń 

dzieli jedno przerwanie). 

2.  Obs

ługa urządzenia – zwykle sprowadza się ona do odczytu i zapisu 

pewnych rejestrów urz

ądzenia. 

3.  Aktualizacja wspólnych struktur danych (dost

ępnych także dla wątków 

aplikacji). 

4.  Zasygnalizowanie aplikacji wyst

ąpienia zdarzenia. 

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     8 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

Instalacji handlera obs

ługi przerwania następuje poprzez wykonanie 

funkcji: 
 
 

InterruptAttach – instalacja obsługi przerwania  

int InterruptAttach(int itnr,  
const struct sigevent *(* handler)(void*, int), 
const void *area, int size, unsigned flags)
 
intr 

Numer przerwania 

handler Wskaźnik na procedurę obsługi przerwania (handler) 
area 

Adres obszaru komunikacji handlera z programem 

size 

Wielko

ść obszaru komunikacji handlera z programem 

flags  Flagi 
 
Wykonanie funkcji spowoduje zainstalowanie funkcji 

handler()

 

okre

ślonej jako drugi parametr, do obsługi przerwania o numerze 

intr

podanej jako pierwszy parametr funkcji.   
 
Parametr trzeci i czwarty dotycz

ą obszaru komunikacyjnego pomiędzy 

w

ątkiem a handlerem. 

 
Przed wykonaniem funkcji nale

ży zażądać  prawa wykonania operacji 

wej

ścia wyjścia poprzez wykonanie funkcji: 

 
 

ThreadCtl(_NTO_TCTL_IO,0) 

 
Dzia

łanie procedury obsługi przerwań jest modyfikowane przez flagi. 

 
_NTO_INTR_FLAGS_END - nowy handler dopisany będzie na końcu 
łańcucha i wykona się jako ostatni. 
 
_NTO_INTR_FLAGS_PROCESS  system  kojarzy  handler  z  procesem  a 
nie  z  w

ątkiem.  Handler  będzie  deinstalowany  gdy  kończy  się  proces  a 

nie w

ątek.  

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     9 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

Procedura obs

ługi przerwania 

Handler jest funkcj

ą o następującym prototypie: 

 

const struct sigevent* handler(void* area, int id) 

Handler mo

że zwracać albo stałą NULL albo wskaźnik do prawidłowo 

zadeklarowanej i zainicjowanej struktury typu 

sigvent

 
1.  Gdy procedura obs

ługi przerwania zwraca NULL to nie powoduje to 

dalszych dzia

łań. 

2.  Gdy procedura obs

ługi przerwania zwraca wskaźnik do struktury typu 

sigvent to generowane jest zdarzenie wyspecyfikowane w 
strukturze 

sigevent

 

Gdy  handler  przerwania  generuje  zdarzenie,  to  zdarzenie  to  powinno 
prowadzi

ć    do  odblokowania  pewnego  wątku.  Żądany  typ  zdarzenia 

zale

ży od zainicjowania struktury  

sigevent

 .  

 

1.  Gdy przerwanie ma odblokowa

ć wątek zawieszony na funkcji 

InterruptWait()  to  zdarzenie powinno być typu SIGEV_INTR

2.  Gdy przerwanie ma odblokowa

ć wątek zablokowany na funkcji 

MsgReceive()  to  zdarzenie powinno być typu SIGEV_PULSE. W 
tym przypadku w

ątek może odbierać także komunikaty. 

3.  Mo

żliwe jest także zainicjowanie struktury sigevent na zdarzenia 

typu SIGEV_SIGNAL, SIGEV_SIGNAL_CODE, 
SIGEV_SIGNAL_THREAD, SIGEV_THREAD. Ze wzgl

ędu na 

mniejsz

ą efektywność nie jest to zalecane.  

 
 

Przy tworzeniu procedur obs

ługi przerwań należy przestrzegać zasad: 

1.  Rozmiar  stosu  którym  dysponuje  procedura  obs

ługi  przerwania  jest 

ograniczony.  St

ąd nie powinna ona zawierać dużych tablic czy innych 

struktur  danych  .  Bezpiecznie  jest  przyj

ąć że dostępny rozmiar  stosu 

wynosi oko

ło 200 bajtów. 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     10 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

2.  Procedura  obs

ługi  przerwań    wykonywana  jest  asynchronicznie  z 

w

ątkami  należącymi  do  pewnego  procesu  i  używa  wspólnych  z  nimi 

danych. Wszystkie zmienne modyfikowane przez handler powinny by

ć 

poprzedzone  s

łowem  kluczowym  volatile,  a  ich  modyfikacja 

wewn

ątrz wątków zabezpieczona przez zablokowanie przerwań 

3.  Procedura  obs

ługi  przerwania  wykonywana  jest  poza  normalnym 

szeregowaniem  wi

ęc  powinna  być  tak  krótka  jak  to  tyko  możliwe. 

Je

żeli  wymagane  jest  wykonanie  czasochłonnych  czynności  to 

powinny  by

ć  one  wykonane  w  wątku  który  zostanie  prze  handler 

odblokowany. 

4.  Procedura  obs

ługi  przerwania  nie  może  wywoływać  żadnych  funkcji 

systemowych z wyj

ątkiem niektórych funkcji. 

 
 
Oczekiwanie na przerwanie 

Ko

ńczący  się  handler    może  wygenerować  zdarzenie    SIGEV_INTR

Zdarzenie  to  mo

że  odblokować  oczekujący  na  przerwanie  wątek. 

Funkcj

ą  która  blokuje  wątek  w  oczekiwaniu  na  przerwanie  jest  funkcja 

InterruptWait().  

 

InterruptWait – oczekiwanie na przerwanie 
int InterruptWait(int flags, iunt_64 *timeout) 
flags  
Flagi – należy przyjąć 0  
timeout Maksymalny okres oczekiwania – obecnie należy przyjąć 

NULL  

 

Funkcja  powoduje  zablokowanie  w

ątku  bieżącego  w  oczekiwaniu  na 

przerwanie. Funkcja zwraca –1 gdy b

łąd.  

 

InterruptDetach – deinstalacja  handlera przerwania 
int InterruptDetach(int id) 
id 

Identyfikator zwracany przez funkcj

ę  InterruptAttach() i 

InterruptAttachEvent() 

 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     11 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

// Obsluga przerwania zegarowego  

#include <sys/neutrino.h> 

#define TIME_INT 0 

struct sigevent event; 

int icnt = 0; 

int intid = 0; 

int sec = 0; 

 

const struct sigevent * handler(void * arg, int 

id) {  

  icnt++; 

  if(icnt == 1000) { 

    icnt = 0; 

    intid = id; 

    sec++; 

    return(&event);  

  } else return(NULL); 

 

main() { 

   int res,i,sec = 0; 

   i = 0; 

   printf("Program startuje \n"); 

   event.sigev_notify = SIGEV_INTR;  

   ThreadCtl( _NTO_TCTL_IO, 0 ); 

   res = InterruptAttach(TIME_INT,    

         &handler,NULL,0,0); 

   printf("Handler zaininstalowany: %d \n",res);  

   do { 

     InterruptWait(0,NULL); 

     printf("Przerwanie: %d %d %d\n",sec,i,intid); 

     i++; 

   } while(sec<60); 

   InterruptDetach(res); 

Przyk

ład 1-1 Obsługa przerwania zegarowego   

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     12 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

1.5  Transformacja przerwania w zdarzenie 
Czynno

ści wykonywane w  ramach ISR nie podlegają szeregowaniu. W 

kodzie handlera wykona

ć można tylko niezbędny zakres czynności a 

nast

ępnie powiadomić pewien wątek o zaistnieniu przerwania a wątek 

ten wykona reszt

ę pracy.  

 

W  kodzie  procedury  obs

ługi  przerwania  wykonać  należy  tylko 

niezb

ędne    czynności  a  następnie  powiadomić  pewien  wątek  o 

wyst

ąpieniu przerwania. Wątek ten wykona resztę pracy.  

 

 

Obs

ługa zdarzeń w QNX6 Neutrino: 

 
1.  Wszystkie  czynno

ści  wykonywane  są  przez  procedurę  obsługi 

przerwania. 

2.  Wewn

ątrz 

procedury 

obs

ługi 

przerwania 

wykonane 

b

ędą 

najwa

żniejsze  czynności  a  resztę  pracy  wykona  odblokowany 

specjalnie w

ątek.   

3.  Wewn

ątrz  procedurę  obsługi  przerwania  nie  są  wykonywane  żadne 

czynno

ści a jedyną jego funkcją jest odblokowanie pewnego wątku. 

 
 
W pierwszym przypadku programista pisze procedur

ę obsługi 

przerwania i kojarzy j

ą z przerwaniem wykorzystując funkcję 

InterruptAttach(). 
 
 W drugim   przypadku post

ępowanie jest analogiczne jak w przypadku 

pierwszym z ta ró

żnicą że na zakończenie handler zwraca zainicjowane 

odpowiednio zdarzenie w postaci struktury typu 

sigevent . Gdy handler 

zwróci takie zdarzenie to skojarzony z nim w

ątek będzie odblokowany. 

  
W trzecim przypadku nie ma potrzeby w ogóle potrzeby pisania 
handlera. W funkcji 

InterruptAttachEvent() specyfikuje się numer 

przerwania i rodzaj zdarzenia na które to przerwanie ma by

ć 

transformowane. 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     13 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

w

ątek

 procedura obs

ługi

przerwania

przerwanie

ISR

w

ątek obsługi

przerwania

odblokowanie

w

ątku

event

Czas

 

Rys. 1-6 Procedura obs

ługi przerwania wykonuje część pracy a 

nast

ępnie odblokowuje wątek 

 
 

w

ątek

przerwanie

w

ątek obsługi

przerwania

odblokowanie

w

ątku

event

Czas

 

Rys. 1-7 Przerwanie zamieniane w zdarzenie które 

event  odblokowuje 

w

ątek. 

 
 
 

InterruptAttachEvent – transformacja przerwania w zdarzenie 
int InterruptAttachEvent(int itnr,  
const struct sigevent *event,unsigned flags)
 
intr  Numer przerwania 
event  Wskaźnik na strukturę opisu zdarzenia które ma być 

wygenerowane gdy nadejdzie przerwanie 

Flags  Flagi 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     14 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

#include <sys/neutrino.h> 

#define TIME_INT 0 

struct sigevent event; 

 

main() { 

   int res, i = 0; 

   i = 0; 

   printf("Program startuje \n"); 

   ThreadCtl(_NTO_TCTL_IO,0); 

   SIGEV_INTR_INIT(&event); 

   res = InterruptAttachEvent(TIME_INT, &event,  

                             _NTO_INTR_FLAGS_END); 

   if(res < 0) { 

         perror("install"); exit(0); 

   }       

   printf("Handler zaininstalowany: %d \n",res);  

   InterruptUnmask (TIME_INT, res); 

   do { 

     printf("Czekam\n"); 

     InterruptWait(0,NULL); 

     printf("Przerwanie: %d \n",i); 

     InterruptUnmask (TIME_INT, res); 

     i++; 

  } while(i <10); 

  InterruptDetach(res); 

  printf("Koniec\n"); 

Przyk

ład 1-2 Obsługa przerwania zegarowego za pomocą zdarzenia  

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     15 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

 

1.6  Własności czasowe systemu przerwań 
Czas reakcji na zdarzenie jest jednym z kluczowych parametrów 
systemów czasu rzeczywistego. Je

żeli zdarzenia obsługiwane są przez 

przerwania, to czas reakcji na zdarzenie b

ędzie się wiązał z czasem 

obs

ługi przerwań.  

 

Parametry  ilo

ściowe  opisujące  własności  czasowe  systemu  czasu 

rzeczywistego: 

1.  Czas opó

źnienia przerwania  

2.  Maksymalny czas opó

źnienia przerwania 

3.  Czas reakcji na przerwanie 
4.  Opó

źnienia szeregowania 

 

 

 

Czas opó

źnienia przerwania (ang. interrupt latency

Czas opó

źnienia przerwania T

il

 definiujemy jako czas który up

ływa 

pomi

ędzy wystąpieniem zdarzenia a rozpoczęciem  jego obsługi. 

 
 

Czas opó

źnienia przerwania  zależy od następujących czynników: 

1.  Zablokowania przerwa

ń - przerwania w procesorze mogą być 

chwilowo zablokowane przez inny w

ątek lub handler w celu ochrony 

sekcji krytycznych. 

2.  Obs

ługi innych przerwań - kontroler przerwań może nie dopuścić do 

przyj

ęcia przerwania gdyż przerwanie o wyższym priorytecie jest w 

trakcie obs

ługi 

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     16 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

w

ątek

 procedura obs

ługi

przerwania

przerwanie

ostatnia instrukcja handlera

ISR

wznowienie przerwanego w

ątku

T

il

T

int

T

iret

T

r

 

Rys. 1-8 Opó

źnienie obsługi przerwania 

 
Czas opó

źnienia przerwania zależy od aktualnego stanu systemu. 

Przerwania w danym momencie czasu mog

ą być zablokowane lub też 

nie. W zwi

ązku z tym definiuje się maksymalny czas opóźnienia 

przerwania. 

 

 Maksymalny czas opó

źnienia przerwania (ang. worst case interrupt 

latency) 

Maksymalny czas opó

źnienia przerwania to czas opóźnienia przerwania 

otrzymany dla najmniej korzystnego przypadku. 
 
 
Czas ten jest sum

ą najdłuższego czasu w którym przerwania są 

zablokowane T

i czasu T

c

 potrzebnego na zachowanie kontekstu w

ątku 

bie

żącego i uruchomienie handlera czyli T

il

  = T

d

  + 

T

c

.  

 

• 

Czas T

zale

ży od sprzętu i jest zwykle niewielki (kilka cykli 

zegarowych) 

 

• 

Czas T

zale

ży od maksymalnego czasu zablokowania przerwań i jest 

cech

ą systemu operacyjnego. 

 

W  systemie  operacyjnym  czasu  rzeczywistego  najd

łuższy  czas  w 

którym  przerwania  pozostaj

ą  zablokowane  T

 

powinien  by

ć  jak 

najkrótszy.  
 
 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     17 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

Czas  reakcji na przerwanie (

ang. response time

Czas reakcji na przerwanie T

r

 definiujemy jako czas który up

ływa 

pomi

ędzy wystąpieniem przerwania a zakończeniem  jego obsługi. 

 
 
Czas T

jest sum

ą czasu opóźnienia przerwania T

il 

 

i czasu

 

obs

ługi 

przerwania

 

T

int  

 (T

= T

il 

 

+ T

int 

).  

 

• 

Czas opó

źnienia przerwania jest miernikiem jakości sprzętu i systemu 

operacyjnego.  

• 

Czas reakcji na przerwanie uwzgl

ędnia dodatkowo złożoność 

procedury obs

ługi urządzenia generującego przerwanie 

 

Zdarzenia  mog

ą  być  obsługiwane  albo  tylko  przez  handler  albo  przez 

handler  i  w

ątek.  W  drugim  przypadku  na  zakończenie  działania  swego 

dzia

łania,  handler  może  generować  zdarzenie  które  odblokowuje 

obs

ługujący te zdarzenie wątek.  

 

w

ątek  procedura obsługi

przerwania

przerwanie

generacja zdarzenia

ISR

odblokowanie  w

ątku

obs

ługi przerwania

T

il

T

int

T

sl

w

ątek obsługi

przerwania

T

s

 

Rys. 1-9 Opó

źnienie szeregowania 

 

Czas  T

s

  up

ływający  pomiędzy  wystąpieniem  przerwania  a  rozpoczęciem 

w

ątku  obsługującego  to  przerwanie  jest  sumą  trzech  czasów  T

s   

=  T

il 

 

T

int 

+ T

sl

 . Czas T

sl 

 nazywany jest opó

źnieniem szeregowania. 

 

PDF created with pdfFactory trial version 

www.pdffactory.com

background image

Jedrzej

 Ułasiewicz    Komputerowe systemy sterowania                                                                     18 

 
 

 

Instytut Cybernetyki Technicznej Politechniki Wrocławskiej 

 
 

 Opó

źnienie szeregowania (ang. scheduling latency

Opó

źnienie szeregowania jest czasem który upływa pomiędzy 

wykonaniem ostatniej instrukcji procedury obs

ługi przerwania a 

wykonaniem pierwszej instrukcji obs

ługującego przerwanie wątku. 

 
 
Na czas ten sk

łada się 

• 

czas wykonania procedury szereguj

ącej  

• 

czas prze

łączenia kontekstu z wątku bieżącego do wątku 

obs

ługującego przerwanie.  

 

Procesor 

Opó

źnienie 

przerwania 

[

µ

s] 

Opó

źnienie 

szeregowania 

[

µ

s] 

166 MHz Pentium 

4.3  

3.1 

100 MHz Pentium 

4.4  

3.9 

100 MHz 486DX4 

5.6  

33 MHz 386EX 

22.5  

26 

Tabela 1-2 Niektóre parametry czasowe systemu QNX6 Neutrino 

 

PDF created with pdfFactory trial version 

www.pdffactory.com