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