Przerwania Neutrino 4

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 2

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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.

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

ń.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 3

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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.

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

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 4

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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 5

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 6

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

handler

wspólne

dane

W

ątek W1

Przerwanie

Rys. 1-5 W

ątek W1 i procedura obsługi przerwania wykorzystują

wspólne dane

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 7

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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)

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

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 8

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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 9

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 10

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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.

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 11

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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 12

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 13

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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.

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

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 14

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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 15

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 16

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 17

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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.

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.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Jedrzej U

łasiewicz Komputerowe systemy sterowania 18

Instytut Cybernetyki Technicznej Politechniki Wroc

ławskiej

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 19

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 20

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

PDF created with pdfFactory trial version

www.pdffactory.com


Wyszukiwarka

Podobne podstrony:
Przerwania-Neutrino-5
Przerwania-Neutrino-4
Przerwania Neutrino 2 id 406175 Nieznany
13 programowalny kontroler przerwan 8259
CW 06 B przerw
ADA wyjatki przerw3
przerwania urz peryf
Twórczość Kazimierza Przerwy -Tetmajera, Szkoła, Język polski, Wypracowania
Jak przerwać wykonywanie pętli (for, PHP Skrypty
przerwa
przerwan

więcej podobnych podstron