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.
<strong>Automatische</strong> <strong>Codegenerierung</strong>:<br />
<strong>Mythos</strong> <strong>und</strong> Realität<br />
Die modellbasierte Software-Entwicklung für Embedded Systems<br />
wird noch mit Skepsis betrachtet. Zu Unrecht!<br />
uf<br />
et<br />
Die Technologie für Blockdiagramm-basierende<br />
automatische<br />
<strong>Codegenerierung</strong><br />
von Embedded Systems ist<br />
im Laufe der letzten Jahre zu<br />
einer ausgereiften <strong>und</strong> praxiserprobten<br />
Lösung herangewachsen.<br />
Viele Entwickler<br />
sind jedoch trotzdem immer<br />
noch der Meinung, dass dieses<br />
Verfahren zu viele Nachteile<br />
birgt. Dieser Beitrag<br />
greift verbreitete Argumente<br />
gegen die automatische <strong>Codegenerierung</strong><br />
auf <strong>und</strong> zeigt<br />
auf Basis der MATLAB/Simulink-Werkzeugkette,<br />
wie ausgereift<br />
das Verfahren tatsächlich<br />
ist. CORD ELIAS<br />
CORD ELIAS ist Applikations-Ingenieur<br />
bei The MathWorks<br />
KONTAKT<br />
T +49/241/47075-0<br />
cord.elias@mathworks.de<br />
Ü<br />
ber das Thema der modellbasierten<br />
Entwicklung mit automatischer<br />
<strong>Codegenerierung</strong> wird<br />
hitzig zwischen Befürwortern<br />
<strong>und</strong> Gegnern diskutiert. Um alle Argumente<br />
sorgfältig einordnen <strong>und</strong> prüfen zu können, ist<br />
ein gr<strong>und</strong>sätzliches Verständnis dieser Technologie<br />
nötig. Auf der Gr<strong>und</strong>lage eines Simulink-<br />
Blockdiagramms soll die Technik daher kurz<br />
vorgestellt werden. Eine umfassendere Einführung<br />
zu diesem Thema kann in Fachartikeln<br />
[1] <strong>und</strong> Lehrbüchern [2] nachgeschlagen werden.<br />
Abbildung 1 zeigt ein Simulink-Blockdiagramm,<br />
das einen PD-Regelungsalgorithmus<br />
implementiert. Die Elemente dieses<br />
Diagramms sind die funktionellen Blöcke<br />
Gain, Addierer, Unit Delay <strong>und</strong> Sättigung sowie<br />
die Verbindungen zwischen diesen Blöcken, so<br />
genannte Signale. Das fertige Blockdiagramm<br />
wird dann zu Simulationszwecken ausgeführt,<br />
um festzustellen, ob die geforderten Vorgaben<br />
erfüllt werden. Dazu wird neben dem Anwendungs-Modell<br />
auch ein Modell des zu regelnden<br />
Prozesses verwendet. Das Blockdiagramm<br />
der Anwendung kann somit als ausführbare<br />
Spezifikation angesehen werden. Mit Fortschreiten<br />
des Entwicklungsprozesses wird das<br />
Diagramm mit weiteren Details der abschließenden<br />
Implementierung versehen, so dass am<br />
Ende des Prozesses das Modell der Anwendung<br />
als Quellcode dient. Dies wird durch die automatische<br />
<strong>Codegenerierung</strong> auf der Basis von<br />
Blockdiagrammen ermöglicht. Der gesamte auf<br />
Blockdiagrammen basierende Entwicklungsprozess<br />
wird modellbasierte Entwicklung genannt.
Die Integration eigenen Programmcodes<br />
(Legacy Code) ist unmöglich oder zumindest<br />
äußerst aufwändig<br />
Die automatische <strong>Codegenerierung</strong> eignet<br />
sich nur für große Prozessoren mit hoher<br />
Leistung <strong>und</strong> großem Speicher<br />
Die automatische <strong>Codegenerierung</strong> ist nur<br />
auf sehr wenige Mikrocontroller anwendbar<br />
Die modellbasierte Entwicklung eignet sich<br />
nur für zeitkontinuierliche Systeme<br />
Die modellbasierte Entwicklung mit automatischer<br />
<strong>Codegenerierung</strong> ist nur etwas<br />
für große Unternehmen<br />
Abb. 1: Simulink-Blockdiagramm,Teil einer Regelungsanwendung<br />
<strong>Automatische</strong> <strong>Codegenerierung</strong> –<br />
Fragen <strong>und</strong> Antworten<br />
Trotz allen Fortschritts auf diesem Gebiet gibt<br />
es immer noch eine Reihe von Einwänden gegen<br />
die automatische <strong>Codegenerierung</strong>.<br />
Die folgende Liste ist sicher nicht vollständig,<br />
enthält aber einige der am meisten verbreiteten<br />
Auffassungen gegen das genannte Verfahren:<br />
<strong>Automatische</strong> <strong>Codegenerierung</strong> ist zu<br />
teuer<br />
Die Leistung automatisch erzeugten<br />
Programmcodes bleibt weit hinter<br />
der vonhandgeschriebenem Code<br />
zurück<br />
Die automatische Codegerierung ist gut für<br />
Rapid Prototyping, aber nicht ausreichend<br />
für die Produktion<br />
Der Codegenerator ist eine Black Box ohne<br />
Einflussnahmemöglichkeit auf den automatisch<br />
erzeugten Code<br />
Es besteht keine Möglichkeit der<br />
Einflussnahme auf das Packaging <strong>und</strong> das<br />
Layout des Codes<br />
Die Realität sieht im Bezug auf die genannten<br />
Einwände jedoch anders aus <strong>und</strong> wird im folgenden<br />
genauer erläutert!<br />
<strong>Mythos</strong>: Preis<br />
Werkzeuge für die automatische <strong>Codegenerierung</strong><br />
sind für simple Anwendungen nicht<br />
ökonomisch. Steigende Design-Komplexität erfordert<br />
jedoch auch zunehmend höher entwikkelte<br />
Analyse- <strong>und</strong> Entwicklungsmethoden. Die<br />
modellbasierte Entwicklung fasst dabei alle<br />
Bestandteile einer integrierten Entwicklungsumgebung<br />
zusammen. Die Erfahrung zeigt,<br />
dass die Produktivität mit automatischer Co-<br />
▲
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-
Abb. 3:Verwendung von Vorlagen für Programmcode <strong>und</strong> Daten<br />
che Systeme eignet, für zeitdiskrete <strong>und</strong> ereignisgesteuerte<br />
Systeme aber bessere Ansätze vorahnden<br />
sind, ist nicht richtig. Hierfür müssen<br />
jedoch zunächst einige Begriffe definiert werden:<br />
Ein Zeitkontinuierliches System ist ein System,<br />
das durch eine Differentialgleichung (DGL)<br />
oder ein System von DGLs beschrieben werden<br />
kann. Ein Zeitdiskretes System ist ein System,<br />
das durch eine Differenzengleichung oder ein<br />
System solcher Gleichungen beschrieben wird.<br />
Ein ereignisgesteuertes System ist ein System,<br />
das im Gegensatz zu einem datenflussgesteuerten<br />
System auf (asynchrone) externe Ereignisse<br />
reagiert. Ein ereignisgesteuertes System wird<br />
üblicherweise mit Hilfe von Zustandsautomaten<br />
beschrieben <strong>und</strong> implementiert.<br />
Simulink deckt sämtliche der oben genannten<br />
Systemtypen sowie alle daraus möglichen<br />
Kombinationen (Hybrid-Systeme) ab.<br />
<strong>Mythos</strong>: Enterprise-Modell<br />
Bei der Einführung der modellbasierten Entwicklung<br />
mit automatischer <strong>Codegenerierung</strong><br />
werden zwar Investitionen für die Anpassung<br />
der Entwicklungsprozesse <strong>und</strong> ein gewisser<br />
Schulungsaufwand für die Mitarbeiter nötig,<br />
die Erfahrung zeigt aber, dass diese Investitionen<br />
nicht nur für große Unternehmen mit<br />
mehreren h<strong>und</strong>ert Software-Entwicklern sinnvoll<br />
sind. Es gibt zahlreiche Beispiele kleinerer<br />
Ingenieurbüros mit weniger als 30 Mitarbeitern,<br />
die die modellbasierte Entwicklung mit<br />
automatischer <strong>Codegenerierung</strong> sowohl technologisch<br />
als auch wirtschaftlich äußerst erfolgreich<br />
einsetzen.<br />
bar. Die automatische <strong>Codegenerierung</strong> ist eine<br />
praxiserprobte Technologie, die sich in den letzten<br />
Jahren deutlich weiterentwickelt hat <strong>und</strong><br />
sich auch in Zukunft weiterentwickeln wird. Im<br />
Kontext der modellbasierten Entwicklung betrachtet,<br />
stellt sie den Schlusspunkt einer geschlossenen<br />
<strong>und</strong> vollständigen Werkzeugkette<br />
dar, die in hervorragender Weise die Bedürfnisse<br />
der Entwickler von Embedded Systems erfüllt.<br />
■<br />
Literatur<br />
[1] “Model-Based Design and Beyond: Solutions<br />
for Today’s Embedded Systems<br />
Requirements”, Krasner, Jerry, Embedded<br />
Market Forecasters, 2004<br />
http://www.mathworks.com/applications/<br />
controldesign/technicalliterature.html<br />
[2] “Simulation Engineering”, Ledin, J., CMP<br />
Books, 2001<br />
[3] “Model based development of Cruise<br />
Control for Mercedes Benz Trucks”,<br />
Wuensche, Mario et al., International<br />
Automotive Conference 2004,<br />
http://www.mathworks.com/industries/<br />
auto/technicalliterature.html<br />
[4] “Multi-target Modelling for Embedded<br />
Software Development for Automotive<br />
Applications”, Hodge, Ye, Stuart, Visteon<br />
Corporation, March 2003, SAE Technical<br />
Paper Series 2004-01-0269<br />
http://www.visteon.com/whitepapers/<br />
2004_01_0269.pdf<br />
Fazit<br />
Die gängigen Einwände gegen die automatische<br />
<strong>Codegenerierung</strong> sind heute nicht mehr halt-<br />
Weiterführende Infos auf www.duv24.net<br />
more @ click<br />
DV124350 >