19.06.2014 Aufrufe

Automatische Codegenerierung: Mythos und Realität

Automatische Codegenerierung: Mythos und Realität

Automatische Codegenerierung: Mythos und Realität

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 >

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!