ADA wyjatki przerw3

background image

Wyj

ątki, przerwania w języku Ada

1

ADA-wyjatki-przerw3

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-przerw3

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-przerw3

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-przerw3

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-przerw3

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);

Wyra

żenie expression identyfikuje przerwanie a handler_name jest

nazw

ą 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-przerw3

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-przerw3

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-przerw3

3. Ada w systemach wbudowanych

Using the GNAT Ada front end, and targeting the ERC32 spacecraft microprocessor,
ERC32 Ada offers top performance for mission-critical applications.

ERC32 Ada Features:

Fast user-mode multi tasking

Compact run-time system

Suitable for mission-critical applications

See the

Key Characteristics

report for details.

The standard target board is the Temic (Atmel) ERC32 Starter Kit. This includes the
Temic (Atmel) TSC695 running at 20MHz with 4 M Bytes of fast RAM. ERC32 Ada
also targets earlier chipsets such as the Temic CBA, CCA and CDA.

ERC32 Ada includes customized

GNAT

Ada front end and offers a

restricted Ada 95

programming language suitable for mission-critical applications.

Saab Ericsson DEM32

4. Ź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 przerw6
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