Sicherheitskritische Echtzeitanwendungen Einfacher Programmieren mit Ada

Als Programmiersprache eignet sich Ada auch für sicherheitskritische und kongruente Echtzeitanwendungen im zivilen Bereich. Einige Erweiterungen haben diese Sprache derart weitergebracht, dass sie beispielsweise gegenüber C viele Vorteile hat. Eine einfache Blinker-Anwendung soll dies verdeutlichen.

von Lutz Berger, Geschäftsführer von Berger IT-Cosmos.

Ada heißt eine Programmiersprache, die Jean Ichbiah ursprünglich im Auftrag des US-Verteidigungsministeriums in den Jahren 1977 bis 1983 entwickelte. Sie basiert auf der Programmiersprache »Pascal«, Namensgeberin ist Ada Lovelace (1815 bis 1852), die das erste Computerprogramm geschrieben hat. Hinter der Programmiersprache Ada steht die Philosophie, möglichst viele Fehler schon zur Zeit des Kompilierens zu erfassen sowie auszuschreiben, was gemeint ist – zum Beispiel »:=« für Zuweisung und »=« für »ist gleich«. Die Sprache ist mit Blick auf sicherheitskritische und kongruente Echtzeitanwendungen entwickelt worden.

Im Laufe der Zeit hat man die Sprache weiterentwickelt, um sie den jeweils aktuellen Bedürfnissen anzupassen. Mit Ada 95 kam im Jahr 1995 die Objektorientierung (OO) hinzu, mit Ada 2005 eine verbesserte Syntax für OO-Anwendungen, Container ähnlich der STL-Bibliothek in C++ sowie Interfaces ähnlich wie in Java, EDF-Scheduling (Earliest Deadline First; bis jetzt nur im Forschungsprojekt, wird aber implementiert, wenn von der Industrie nachgefragt), Timer und vieles mehr. Mit Ada 2012 kam die sogenannte »Contract«-basierte Programmierung. Dadurch lässt sich das Anwendungsdesign in die Sprache mit einbinden und unterstützt somit statische Analysen des Codes mit entsprechenden Tools wie »CodePeer« und »Spark« der Firma AdaCore. Seit Ada 2012 unterstützt die Sprache auch Multicore-Architekturen.

Im Folgenden wollen wir die Stärken von Ada mithilfe des Entwicklungsboards TMS570LS31 mit einem 32-Bit-Mikrocontroller aus der »Hercules«-Serie von Texas Instruments genauer beleuchten. Dazu untersuchen wir eine kleine Blinker-Anwendung, die mit zwei verschiedenen Ansätzen geschrieben wurde – einmal mit »Task« und ein andermal mit »Timer«. Des Weiteren werden wir kurz auf das sogenannte »Ravenscar«-Profil und Restriktionen eingehen, die den Zertifikationsprozess für sicherheitskritische Anwendungen beschleunigen.

Bild 1 stellt die Architektur des Mikrocontrollers dar. Er verfügt über zwei ARM-Rechenkerne vom Typ »Cortex-R4F« mit 3 MByte Flash- und 256 KByte RAM-Speicher. Der Dual-Core läuft im »Lockstep«-Modus, die Anwendung läuft also parallel auf beiden Cores und wird Zyklus für Zyklus auf Konsistenz überprüft. Der Baustein hat einen CAN-Bus, FlexRay, zwei Hetports, I²C, COM und andere Schnittstellen. In der Beispielanwendung benutzen wir einen Hetport.