ADA wyjatki przerw6

background image

Wyj

ątki, przerwania w języku Ada

1

ADA-wyjatki-przerw6

Wyjątki i przerwania w języku ADA



1. Wyjątki

Wykonuj

ąca się aplikacja może natrafić na przypadki w których nie

b

ędzie mogła kontynuować biężącej sekwencji instrukcji. Jest to

spowodowane:

B

łędami w aplikacji

Zdarzeniami zewnetrznymi (w komputerze, systemie operacyjnym)


Jako

że aplikacja nie może się zakończyć zdarzenia te są sygnalizowane

jako tak zwane wyj

ątki na które trzeba w zaplanowany sposób

zareagowa

ć. Wyjątki mają nastepujące cechy:

Nieznany moment wystapienia

Konieczno

ść obsługi

1.1 Wyjątki pierwotnie zdefiniowane
Wyj

ątki predefiniowane zadeklarowane są w pakietach. Podstawowe

wyj

ątki zdefiniowane są w pakiecie Standard.

1. Constaint_Error

Warto

ść indeksu tablicy jest poza zakresem danego typu

Warto

ść skalarna przekroczyła zakres.

Drugi argument operacji /, mod, rem jest równy zeru.

Parametr aktualny typu

in

lub

in out

jest wska

źnikiem i

ma warto

ść NULL

2. Program_Error

W programie nast

ępuje odwołanie do niedostępnego bytu

Wywo

łanie podprogramu lub wejścia do obiektu chronionego

którego deklaracja nie zosta

ła jeszcze opracowana.

Wykonanie funkcji nie zako

ńczone instrukcją

return

.

3. Storage_Error

Brak pami

ęci do opracowania deklaracji lub wykonania

instrukcji

4. Tasking_Error

Komunikacja z zadaniem niemo

żliwa.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

2

ADA-wyjatki-przerw6

1.2 Deklarowanie i zgłaszanie wyjątków
Deklarowanie i zg

łaszanie wyjątków odbywa się w następujący sposób:


Deklaracja_Wyjatku :=
Nazwa_Wyjatku {, Nazwa_Wyjatku} :

exception

;


Zg

łoszenie_Wyjątku :=

raise

[Nazwa_Wyjatku];




procedure dzielenie(x,y: in Float; wynik: out Float)
is
Blad_dziel:

exception

;

begin
if(y = 0.0) then

raise

Blad_dziel;

else
wynik := x/y;
end if;
...
end dzielenie;

Przyk

ład 1-1 Deklarowanie i zgłaszanie wyjątku

1.3 Obsługa wyjątków
Wyj

ątek który został zgłoszony musi zostać obsłużony.



Strefa_Obs

ługi_Wyjatków ::=

Segment_Obs

ługi_Wyjatków {, Segment_Obsługi_Wyjatków}


Segment_Obs

ługi_Wyjatków :=

when

Nazwa_Wyj

ątku { | Nazwa_Wyjątku} => Instrukcje

|

when others

=> Instrukcje




PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

3

ADA-wyjatki-przerw6

procedure Open_Or_Create(File : in out File_Type;
Mode : File_Mode; Name : String) is
begin

-- Spróbój otworzyć plik. Gdy plik nie istnieje
-- wygenerowany będzie wyjatek Name_Error
Open(File, Mode, Name);

exception
when Name_Error =>
Create(File, Mode, Name);

end Open_Or_Create;

Przyk

ład 1-2 Przykład obsługi wyjątku

1.4 Propagacja wyjątków
Powstanie wyj

ątku spowoduje przekazanie sterowania do strefy obsługi

wyj

ątku w bloku w którym wyjątek został wygenerowany. Gdy brak strefy

obs

ługi wyjątek zostaje ponownie zgłoszony w bloku otaczającym. To

ponowne zg

łoszenie nazywa się propagacją wyjątku.

Blok 3

Blok 2

Blok 1

Obsluga

Wyjatek

Rysunek 1-1 Propagacja wyj

ątku

Mo

żliwe jest zgłoszenie wyjątku w bloku otaczającym przez wykonanie

instrukcji

raise

. Je

żeli wyjątek nie zostanie obsłużony program kończy

si

ę komunikatem

Program_Error

.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

4

ADA-wyjatki-przerw6

2. Przerwania

J

ęzyk Ada umożliwia obsługę przerwań. Przyjęto następujący model

obs

ługi przerwań:

Przerwanie reprezentuje zdarzenie sprz

ętowe lub zdarzenie systemu

operacyjnego.

Na wyst

ąpienie przerwania składa się jego generacja i dostarczenie.

Generacja przerwania powodowana jest przez sprz

ęt lub system

operacyjny i czyni przerwanie dost

ępne dla oprogramowania.

Dostarczenie przerwania jest akcj

ą powodującą uruchomienie

fragmentu oprogramowania odpowiedzialnego za jego obs

ługę.

Wygenerowane przerwanie które nie zosta

ło dostarczone nazywa się

przerwaniem oczekuj

ącym (ang. pending).

Pewne lub wszystkie przerwania mog

ą być zablokowane.

Zablokowane przerwanie nie jest dostarczane.

Pewne przerwania s

ą zarezerwowane. Dla przerwań

zarezerwowanych u

żytkownik nie może zdefiniować własnych

procedur. Przerwania maj

ą sterowniki wbudowane w system

wykonawczy.

Ka

żde przerwanie które nie jest zarezerwowane posiada domyślną

procedur

ę jego obsługi.

Sprzęt

System operacyjny

Aplikacja w Adzie

obsluga

przerwania

Blokowanie

Wywolanie

Rysunek 2-1 Ilustracja obs

ługi przerwań

Przerwania obs

ługiwane są odmiennie w standardzie Ada83 i Ada95.

Ada83 – wej

ścia zadania

Ada95 – wywo

łanie bezparametrowej procedury obiektu chronionego.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

5

ADA-wyjatki-przerw6

2.1 Obsługa przerwań w języku Ada95
Obs

ługa przerwania w Ada95 polega na wywołanie bezparametrowej

procedury obiektu chronionego. Typy, pragmy i procedury zwi

ązane z

obs

ługą przerwań zawarte są w pakiecie Ada.Interrupt.


U

życie pragmy

Interrupt_Handler

informuje system

że procedura

handler_name ma by

ć użyta do obsługi przerwania.

pragma

Interrupt_Handler

(handler_name);


Procedura taka mo

że zostać powiązania z przerwaniem statycznie lub

dynamicznie.

Powiązanie statyczne

Aby dokona

ć statycznego powiązanie procedury z przerwaniem należy

u

żyć pragmy Attach_Handler.


pragma

Attach_Handler

(handler

_name, expression);

expression - wyra

żenie które identyfikuje przerwanie

handler_name - nazwa bezparametrowej procedury w obiekcie

chronionym.

with Ada.Interrupts; use Ada.Interrupts;
with Ada.Interrupts.names; use Ada.Interrupts.names;

protected Device_Interface is

procedure Handler;

pragma Attach_Handler(Handler, Int_ID);

end Device_Interface;

protected body Device_Interface is

procedure Handler is

end Handler;

end Device_Interface;

Przyk

ład 2-1 Statyczne powiązanie przerwania z procedurą

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

6

ADA-wyjatki-przerw6

Powiązanie dynamiczne

Aby u

żyć powiązania dynamicznego należy najpierw za pomocą pragmy

Interrupt_Handler wskaza

ć która procedura ma obsługiwać przerwania.

Nast

ępnie należy wywołać procedurę Attach_Handler która wiąże

procedur

ę obsługi z przerwaniem.

procedure Attach_Handler(New_Handler :in Parameterles
s_Handler;Interrupt : in Interrupt_ID);

New_Handler – Nowy handler przerwania
Interrupt
- identyfikator przerwania

with Ada.Interrupts; use Ada.Interrupts;
with Ada.Interrupts.names; use Ada.Interrupts.names;

protected Device_Interface is

procedure Handler;
pragma Interrupt_Handler(Handler);
end Device_Interface;

Attach_Handler(Device_Interface.Handler, Int_ID);

Przyk

ład 2-2 Dynamiczne przerwania z procedurą

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

7

ADA-wyjatki-przerw6

2.2 Pakiet Ada.interrupts


package Ada.Interrupts is

type Interrupt_ID is implementation-defined;

type Parameterless_Handler is
access protected procedure;

-- Zwraca True gdy przerwanie jest zarezerwowane

function Is_Reserved (Interrupt : Interrupt_ID)

return Boolean;

-- Zwraca True gdy przerwanie jest przypisane do
-- handlera

function Is_Attached (Interrupt : Interrupt_ID)

return Boolean;

-- Zwraca wskaźnik na bieżacy hadler przerwania

function Current_Handler (Interrupt : Interrupt_ID)

return Parameterless_Handler;

-- Przyporządkowuje handler do przerwania

procedure Attach_Handler

(New_Handler : in Parameterless_Handler;

Interrupt : in Interrupt_ID);

--

Przyporządkowuje

New_Handler

do przerwania

-- i zwraca poprzedni

Old_Handler

procedure Exchange_Handler

(Old_Handler : out Parameterless_Handler;

New_Handler : in Parameterless_Handler;

Interrupt : in Interrupt_ID);


-- Przywraca domyslny handler do przerwania

procedure Detach_Handler

(Interrupt : in Interrupt_ID);

-- Zwraca adres przypisany do przerwania

function Reference(Interrupt : Interrupt_ID)

return System.Address;

private

... -- not specified by the language

end Ada.Interrupts;

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

8

ADA-wyjatki-przerw6

3.

Szeregowanie zadań i priorytety

w j

ęzyku Ada



Zadania j

ęzyka Ada wykonywane są współbieżnie. Dodatkowe

specyfikacje dotycz

ące metod realizacji tej współbieżności zawarte są w

aneksie D – Systemy Czasu Rzeczywistego. Aneks ten opisuje:

Priorytety zada

ń i ich zmiany

Strategie szeregowania zada

ń i obsługę wejść

Dodatkowe mechanizmy synchronicznego i asynchronicznego

sterowania zadaniami


3.1 Priorytety
Priorytet zadania jest odzwierciedleniem pilno

ści zadania względem

innych zada

ń.


Priorytety dotycz

ą:

Przydzia

łu procesora zadaniu

Kolejno

ści wyboru gałęzi instrukcji

select

.

Kolejno

ści wykonania wejść, funkcji i procedur w obiektach

chronionych


Wyró

żnia się dwa rodzaje priorytetów

Priorytety statyczne – przypisywane zadaniom w trakcie tworzenia

Priorytety dynamiczne – zmieniane w trakcie wykonywania zadania


Dozwolony zakres priorytetów zale

żny jest od implementacji.

subtype Any_Priority is Integer range implementation-defined;
subtype Priority is Any_Priority

range Any_Priority'First .. implementation-defined;
subtype Interrupt_Priority is Any_Priority
range Priority'Last+1 .. Any_Priority'Last;

Default_Priority : constant Priority := (Priority'First + P
riority'Last)/2;

Any_Priority`First

Priority`Last

Priority

Interrupt_Priority

DefaultPriority

Any_Priority`Last

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

9

ADA-wyjatki-przerw6

Wymaga si

ę aby implementacja dostarczała przynajmniej 30

priorytetów standardowych i przynajmniej 1 priorytet przerwa

ń.

3.2 Priorytety statyczne

Zadaniu nadaje si

ę priorytet za pomocą pragm:


pragma Priority(wyrażenie);

pragma Interrupt_Priority[(wyrażenie)];


task bufor is

entry wstaw(x : in Integer);

entry wez(x : out Integer);

pragma Priority(10);
end bufor;

task type intro_task (TPriority : System.Priority) is

entry wstaw(x : in Integer);

entry wez(x : out Integer);

pragma Priority(TPriority);
end bufor;


Priorytet nadawany zadaniu przez pragm

ę priority jest nazywany

priorytetem bazowym. Zadanie mo

że chwilowo mieć priorytet bieżący

wy

ższy od bazowego.

Problem inwersji priorytetów

W przypadku, gdy wiele zada

ń o różnych priorytetach korzysta z obiektu

chronionego mo

że dojść do inwersji priorytetów. Negatywne zjawiska

zwi

ązane z inwersją priorytetu można ograniczyć poprzez zastosowanie

żnych protokołów zajmowania zasobów. W dodatku D określona jest

pragma

Locking_Policy która, umożliwia określenie metody

zajmowania zasobu.

pragma Locking_Policy(policy_identifier);

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

10

ADA-wyjatki-przerw6

Metody zajmowania zasobu zale

żą od implementacji. Wymaga się

jednak aby przynajmniej jedna metoda: protokó

ł pułapu priorytetu (ang.

Imediate Ceiling Priority Protocol) był zaimplementowany.


Protokó

ł pułapu priorytetu ICPP.

Obiektowi chronionemu P nadaje si

ę priorytet G nazywany priorytetem

granicznym. Jest on równy wielko

ści maksymalnej z priorytetów zadań

u

żywających danego obiektu chronionego. Gdy zadanie Z korzysta z

obiekty chronionego P to na czas korzystania otrzymuje ono priorytet G.



Je

żeli z obiektem chronionym P skomunikowało by się zadanie o

priorytecie wy

ższym niż G to system wygenerowałby wyjątek

Programm_Error

.

Dziedziczenie priorytetu

Zadanie wywo

łujące obiekt chroniony dziedziczy jego priorytet.

Dziedziczenie priorytetu dotyczy tak

że zadań:


W trakcie wykonywania instrukcji

accept serwer dziedziczy priorytet

zadania wywo

łującego gdy priorytet zadania wywołującego jest wyższy

od priorytetu zadania serwera. Gdy priorytet zadania wywo

łującego jest

ni

ższy priorytet serwera pozostaje bez zmiany.

Ustalanie strategii szeregowania

Regu

łę szeregowania można ustanowić za pomocą pragmy:


pragma Task_Dispatching_Policy(Policy_Identifier)

Aneks D wymaga aby zrealizowana by

ła przynajmniej jedna strategia

szeregowania – strategia karuzelowa (FIFO_within_prioryty).

Realizuje ona zasad

ę:

1. Zawsze wykonywane jest zadanie o najwy

ższym priorytecie

2. Gdy zada

ń o najwyższym priorytecie jest więcej to wykonują się one

wed

ług algorytmu karuzelowego.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

11

ADA-wyjatki-przerw6

Ustalanie strategii wywoływania wejść

Mo

że się zdarzyć że zadania inicjujące spotkania nie będą mogły być na

bie

żąco obsługiwane przez zadanie przyjmujące i będą ustawione w

kolejk

ę.

T1

TN

accept

T1

Tn

T3

Zadania wywolujące weścia

Zadanie serwera

Kolejka zadań

wywolujących

T2

FIFO lub

priorytetowa

Rysunek 3-1 Kolejka zada

ń wywołujących


Standardow

ą regułą wywoływania wejść zadania jest kolejka FIFO.

Mo

żliwy jest jednak wybór innej strategii kolejkowania zadań

wywo

łujących za pomocą pragmy Queuing_Policy.


pragma Queuing_Policy(Policy_Identifier)

W aneksie D wyspecyfikowane s

ą dwie reguły.

1. FIFO_Queuing
2. Priority_Queuing

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

12

ADA-wyjatki-przerw6

3.3 Priorytety dynamiczne
Priorytety dynamiczne pozwalaj

ą na zmianę priorytetu w trakcie

wykonywania zadania.

with System;
with Ada.Task_Identification;
package Ada.Dynamic_Priorities is


procedure Set_Priority(Priority: in Any_Priority;
T : in Task_ID := Current_Task);


function Get_Priority(T: ask_ID := Current_Task)

return System.Any_Priority;

end Ada.Dynamic_Priorities;


Procedura

Set_Priority pozwala na ustalenie priorytetu zadania

okre

ślonego drugim parametrem.


Funkcja Get

_Priority zwraca priorytet zadania określonego

pierwszym parametrem.

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

13

ADA-wyjatki-przerw6

4. Ada w systemach wbudowanych

Ada jest szeroko stosowana w systemach wbudowanych. Dost

ępne są

pakiety umo

żliwiające wykonywanie programów w Adzie:

1. W

środowisku systemu operacyjnego (LynxOS, VxWorks, Linux)

2. Bez systemu operacyjnego

Komputer macierzysty

Kompilator Ady
Narzędzia
konfiguracyjne

aplikacja

urządzenie

Komputer docelowy

System
macierzysty

System wykonawczy

RS232

TCP/IP

JTAG

System wbudowany

Łącze

komunikacyjne

Rys. 4-1 System skro

śnego rozwoju oprogramowania


Przyk

ład - ERC32 Ada firmy XGC na płytę DEM32

System przeznaczony dla aplikacji krytycznych (lotnictwo,
kosmonautyka.

System macierzysty – Red Hat Linux na komputerze PC, Solaris2.6

na maszynie Sun SPARC

Docelowy system operacyjny – nie jest wymagany

Sprz

ęt docelowy Saab Ericsson DEM32.

W jego sk

ład wchodzi

procesor TSC695 z zegarem 20MHz, 4 MB RAM i chipset (Atmel)
ERC32.

Kompilator GNAT - okrojona Ada 95

Saab Ericsson DEM32

PDF created with pdfFactory trial version

www.pdffactory.com

background image

Wyj

ątki, przerwania w języku Ada

14

ADA-wyjatki-przerw6

5. Źródła

[1] Z. Huzar, Z. Fry

źlewicz, I. Dubielewicz, ADA 95, wyd. Helion

1998.
[2] Gilles Motet, Tomasz Szmuc, Programowanie systemów
czasu rzeczywistego z zastosowaniem j

ęzyka ADA, AGH

uczelniane wydawnictwo naukowo dydaktyczne, Kraków 2002.
[3] Pyle I. C. Ada, Warszawa WNT 1986.
[4] Richard Riehle, Ada Distilled, An Introduction to Ada
Programming for Experienced Computer Programmers

http://www.adaic.org/docs/distilled/adadistilled.pdf

PDF created with pdfFactory trial version

www.pdffactory.com


Wyszukiwarka

Podobne podstrony:
ADA wyjatki przerw3
ADA wyjatki przerw3
regul praw stan wyjątk 05
13 programowalny kontroler przerwan 8259
CW 06 B przerw
przerwania urz peryf
Twórczość Kazimierza Przerwy -Tetmajera, Szkoła, Język polski, Wypracowania
do zdań ściąga wyjątki, Logika Prawnicza
Jak przerwać wykonywanie pętli (for, PHP Skrypty
Slavoj Žižek, Permanentny stan wyjątkowy
Amputacja kończyny jest dla każdego pacjenta wyjątkowym przeżyciem
Laborka (wyjatki)
przerwa
przerwan
Luksusowe opakowanie dla wyjatk Nieznany

więcej podobnych podstron