next up previous contents index
Weiter: C.2 Identifikation und Hinauf: C Systemprogrammierung Zurück: C Systemprogrammierung

Unterstützung für Interrupts

 

Interrupts werden gewöhnlich von der Hardware oder von System-Software ausgelöst. Jener Teil der Software, der abläuft, wenn ein Interrupt auftritt, heißt Interrupt-Handler.  Wenn ein bestimmter Interrupt den Ablauf eines bestimmten Interrupt-Handlers aktiviert, so sagt man dieser Interrupt-Handler ist mit dem Interrupt verbunden (attached). Als Interrupt-Handler kommen nur parameterlose Prozeduren geschützter Objekte in Frage.

Um das alles zu bewerkstelligen, gibt es zwei reservierte Pragmas: Mit

pragma Interrupt_Handler(<Name>);

wird festgelegt, daß die geschützte Prozedur <Name> als Interrupt-Handler in Frage kommt. Die entsprechende Spezifikation des geschützten Objekts muß eine Bibliothekseinheit sein.

Mit

pragma Attach_Handler(<Name>,expression);

wird ein Interrupt zu einem Interrupt-Handler gebunden, dabei muß expression vom Typ Interrupts.Interrupt_ID sein.

Mit dem Paket Ada.Interrupts können Interrupt-Handler dynamisch verbunden oder entbunden werden. Genaueres findet sich in der folgenden Spezifikation.


with System;

package Ada.Interrupts is
type Interrupt_ID is implementation-defined;
type Parameterless_Handler is
access protected procedure;

function Is_Reserved (Interrupt : Interrupt_ID)
return Boolean;

function Is_Attached (Interrupt : Interrupt_ID)
return Boolean;

function Current_Handler (Interrupt : Interrupt_ID)
return Parameterless_Handler;

procedure Attach_Handler(
New_Handler : in Parameterless_Handler;
Interrupt : in Interrupt_ID);

procedure Exchange_Handler(
Old_Handler : out Parameterless_Handler;
New_Handler : in Parameterless_Handler;
Interrupt : in Interrupt_ID);

procedure Detach_Handler(Interrupt : in Interrupt_ID);

function Reference(Interrupt : Interrupt_ID)
return System.Address;


private
... -notspecifiedbythelanguage
end Ada.Interrupts;



Johann Blieberger
Wed Feb 11 09:58:52 MET 1998