11. Anlage | ||||||
|
||||||
11.4.5 Monotones Zeitpaket
Echtzeitprogramme müssen die Fähigkeit besitzen, zeitabhängige Operationen mit einer hohen Genauigkeit durchzuführen. Das im Ada-Kern definierte Paket "Ada.Calendar" stellt dem Programmierer Möglichkeiten zur Verfügung, um die aktuelle Zeit zu ermitteln und arithmetische Operationen mit den Werten vom privaten Typ "Ada.Calendar", die Punkte auf der Zeitgeraden darstellen, und vom Festpunkttyp "duration", die Distanzen zwischen Punkten auf der Zeitgeraden darstellen, durchzuführen. Ada-Übersetzer, die die Anforderungen der Anlage "Echtzeitsysteme" erfüllen, stellen zusätzlich ein Paket "Ada.Real_Time" zur Verfügung, das die gleichen Möglichkeiten wie das Paket "Ada.Calendar" bietet, aber in der Lage ist, genauer mit kleineren Zeitintervallen zu arbeiten. Der Typ "Ada.Real_Time.Time" repräsentiert eine Echtzeit-Uhr mit einer größeren Genauigkeit als die Tageszeit-Uhr von "Ada.Calendar.Time". Der Wert von "Ada.Real_Time.Clock" ist im Gegensatz zu "Ada.Calendar.Clock", die vom Operator vor- oder zurückgesetzt werden kann, garantiert monoton nicht abnehmend. Es folgen zwei Programmbeispiele, die die Verwendung der Pakete "Ada.Calendar" und "Ada.Real_Time" Das folgende Beispiel zeigt einen parallelen Prozeß, der jede Nacht um Mitternacht "erwacht" und eine Logging-Funktion ausführt.
Da die "delay until"-Anweisung (delay_until_statement <BNF>) eine absolute Zeitangabe und kein Zeitintervall spezifiziert, gibt es keine Möglichkeit zur Unterbrechung innerhalb des Zeitintervalls. Daher wird der parallele Prozeß genau zur spezifizierten Zeit aktiv. Die Zeitangabe wird durch die Uhr von "Ada.Calendar.Clock" gesteuert, so daß eine Veränderung dieser Uhr eine Veränderung der "Aufwachzeit" des parallelen Prozesses zur Folge hätte. Ein weiteres Beispiel soll den Gebrauch des Pakets "Ada.Real_Time" verdeutlichen. Ein paralleler Prozeß fragt alle zehn Millisekunden ein Gerät ab. Die Periodenlänge wird sich nicht wie im vorherigen Beispiel verschieben. Es wird "Ada.Real_Time.Time" an Stelle von "Ada.Calendar.Time" verwendet, da das Beispiel unabhängig von Veränderungen der Uhr von "Ada.Calendar.Clock" sein soll.
|
||||||
|