Automatische Codegenerierung: Mythos und Realität
Automatische Codegenerierung: Mythos und Realität
Automatische Codegenerierung: Mythos und Realität
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Die <strong>Codegenerierung</strong>s-Technologie von<br />
The MathWorks bietet dem Anwender<br />
vielerlei Möglichkeiten, Einfluss auf den<br />
automatisch generierten Code zu nehmen.<br />
So ist es beispielsweise möglich,<br />
bereits vorhandene Bibliotheken anstelle<br />
des automatisch generierten Standard-<br />
Codes einzubinden <strong>und</strong>/oder eigene<br />
Hilfsprogramme per „Hook-In“ in den<br />
Prozess der <strong>Codegenerierung</strong> einzubringen.<br />
Auch die angeführte mangelnde<br />
Einflussnahmemöglichkeit auf das Packaging<br />
<strong>und</strong> das Layout des Codes ist nicht<br />
richtig. Simulink <strong>und</strong> der Real-Time<br />
Workshop Embedded Coder bieten umfangreiche<br />
Möglichkeiten, beides zu beeinflussen.<br />
So kann beispielsweise der Code für den in<br />
Abbildung 1 gezeigten PD-Regler ganz einfach<br />
mithilfe des in Abbildung 2 dargestellten Dialogs<br />
als Funktion generiert werden. Außerdem<br />
kann auch die Anforderung hinsichtlich eines<br />
bestimmten Dateilayouts durch die Verwendung<br />
frei gestaltbarer Vorlagen (Templates) für<br />
den Code <strong>und</strong> die Daten erfüllt werden (vgl.<br />
Abbildung 3).<br />
degenerierung um r<strong>und</strong> 30 Prozent über der<br />
Produktivität bei einer Programmierung von<br />
Hand liegt. Diese Tatsache wiegt die Kosten für<br />
den Codegenerator mehr als auf <strong>und</strong> spricht<br />
vom Standpunkt des Return-on-Investment aus<br />
gesehen für die automatische <strong>Codegenerierung</strong>.<br />
<strong>Mythos</strong>: Leistung<br />
Abb. 2:<br />
Code-Platzierungs-Dialog<br />
Die automatische <strong>Codegenerierung</strong> für das<br />
Rapid Prototyping kann dem Target-Prozessor<br />
insbesondere im Hinblick auf die Speichernutzung<br />
mehr Ressourcen abverlangen, als zur<br />
Implementierung des nackten (Regelungs-)<br />
Algorithmus nötig wäre. Dies trifft jedoch immer<br />
zu, egal, ob der Code per Hand oder automatisch<br />
geschrieben wurde. Das liegt vor allem<br />
an dem beim funktionalen Rapid Prototyping<br />
hohen Entwicklungskomfort wie Parameter-<br />
Tuning <strong>und</strong> Signal-Monitoring „on-the-fly“<br />
<strong>und</strong> der ausschließlichen Verwendung von<br />
Gleitkomma-Datentypen. Geht man jedoch<br />
vom funktionalen Rapid Prototyping zur<br />
Produktion über, ist die freie Einstellbarkeit<br />
jedes einzelnen Parameters nicht gewünscht.<br />
Außerdem müssen die Algorithmen (zumindest<br />
für Massengüter) in Festkomma-Arithmetik<br />
implementiert werden. In Verbindung mit den<br />
mächtigen, vom Codegenerator angebotenen<br />
Optimierungs-Techniken ist der automatisch erzeugte<br />
Code der manuellen Programmierung in<br />
Bezug auf Laufzeitleistung <strong>und</strong> Speicherbedarf<br />
durchaus ebenbürtig. Aktuelle<br />
Arbeiten unabhängiger Anwender<br />
belegen dies [3], [4].<br />
<strong>Mythos</strong>: mangelnde<br />
Einflussnahme-möglichkeit<br />
<strong>Mythos</strong>: mangelnde Integrationsmöglichkeit<br />
Wenn nur ein Teil des Programmcodes eines Projektes<br />
automatisch erzeugt werden soll, ist eine<br />
anwenderfre<strong>und</strong>liche Schnittstelle zwischen<br />
den automatisch <strong>und</strong> den manuell erzeugten<br />
Teilen des Codes von allergrößter Wichtigkeit.<br />
Diese Forderung wird von den so genannten<br />
Entry Points <strong>und</strong> der Datenschnittstelle erfüllt.<br />
Der Real-Time Workshop Embedded Coder erzeugt<br />
drei Entry-Points: Eine Initialisierungs-<br />
Funktion („Initialize“), eine Schritt-Funktion<br />
<strong>und</strong> eine Beendigungs-Funktion („Terminate“).<br />
Die Datenschnittstelle kann praktisch jede<br />
mögliche Anforderung des Anwenders erfüllen.<br />
Er hat die volle Kontrolle über die Benennung<br />
sämtlicher Variablen auf der Eingangs- <strong>und</strong><br />
Ausgangsseite einer automatisch erzeugten<br />
Anwendung. Außerdem können vordefinierte<br />
oder vom Anwender selbst erzeugte Custom<br />
Storage Classes verwendet werden, um auf<br />
nicht standardgemäße Art <strong>und</strong> Weise auf Daten<br />
zuzugreifen.<br />
<strong>Mythos</strong>: Ressourcen-Hunger<br />
In der Anfangszeit der automatischen <strong>Codegenerierung</strong><br />
traf es durchaus zu, dass dieses<br />
Verfahren überwiegend für große Prozessoren<br />
mit hoher Leistung <strong>und</strong> großem Speicher geeignet<br />
war. Mittlerweile hat die automatische <strong>Codegenerierung</strong><br />
aber ein Reifestadium erreicht, in<br />
dem sie sogar für 8-Bit Mikroprozessoren anwendbar<br />
ist.<br />
<strong>Mythos</strong>: begrenzte<br />
Einsatzmöglichkeit<br />
Dass die automatische <strong>Codegenerierung</strong> nur<br />
auf sehr wenige Mikrocontroller anwendbar<br />
ist, ist schlicht <strong>und</strong> einfach falsch! Auch wenn<br />
bestimmte Mikrocontroller durch Erweiterungspakete<br />
zum Codegenerator („Embedded<br />
Targets“) explizit unterstützt werden, so gilt<br />
jedoch generell: <strong>Automatische</strong> <strong>Codegenerierung</strong><br />
ist für jeden Mikrocontroller möglich, für den<br />
auch manuell Code in C geschrieben werden<br />
kann. Auch die Annahme, dass die modellbasierte<br />
Entwicklung sich nur für zeitkontinuierli-