Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Joseph Wolf Geändert vor über 6 Jahren
1
Automatische Code-Generierung aus Simulink-Modellen
HK Eingebette Systeme - Produktivität und Qualität Prof. Dr. Holger Schlingloff Referent: Martin Werner Hallo, mein Name ist Martin Ich werde heute einen Vortrag über Automatische Code Generierung aus Simulink Modellen halten
2
Agenda Motivation – Warum automatisch Code generieren?
Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra Als erstes werde ich ein paar Worte zur Motivation sagen: „wozu brauch man automatische Code Generierung überhaupt und was erhofft man sich davon“ Danach werde ich auf die Funktionsweise eingehen, sowie Voraussetzungen benennen und ein Beispiel vorstellen Dann möchte ich kurz auf manuelle und automatische Optimierungsmöglichkeiten eingehen Und zum Schluss werde ich etwas zur Performance und zu den Vor und Nachteilen dieser Methode sagen
3
Definition „automatische Code Generierung“
Was ist automatische Code Generierung? Umfasst das Generieren von Quellcode einer High-Level Programmier- sprache (C, C++ etc.) oder einer Hardware Beschreibungssprache (VHDL, Verilog etc.) aus Metainformationen Diese Metainformationen können unter anderem UML-Diagramme, Datenflussdiagramme etc. sein Grundprinzip basiert auf „Model Driven Architecture“ (MDA) Die dafür eingesetzten Werkzeuge heißen „Generatoren“ Simulink bietet hierfür den „Real-Time Workshop“, den „Real-Time Workshop Embedded Coder“, den „Stateflow Coder“ und den „Simulink HDL Coder“ an Der generierte Code kann dann mit Hilfe eines „normalen“ Compilers in Byte-Code der Zielarchitektur umgewandelt werden Im Falle des HDL Coders ist ein Synthese-Werkzeug (Synopsys, ISE etc.) nötig, um die entsprechende Hardware zu erzeugen Was genau versteht man nun unter „automatische Code Generierung“? Kurz gesagt umfasst es das Generieren von Quellcode einer High-Level Programmiersprache wie C oder C++ oder einer Hardwarebeschreibungssprache wie VHDL oder Verilog aus Metainformationen Diese Metainformationen können unter anderem UML-Diagramme oder eben Datenflussdiagramme, wie sie Simulink darstellt, sein Das Grundprinzip basiert auf der sog. Model Driven Architecture Die MDA umfasst im wesentlichem die Beschreibung eines Systems durch abstrakte Modelle, welche zumindest teilweise automatisch in Quellcode überführt werden können Die zur Code Generierung eingesetzten Werkzeuge heißen Code Generatoren Mathworks bietet für Simulink 4 verschiedene und teilweise voneinander abhängige Generatoren an: den Real-Time Workshop, den RTW Embedded Coder, den Statflow Coder und den HDL Coder Der mit Hilfe dieser Generatoren generierte Quellcode kann anschließend mit Hilfe eines normalen C Compilers in Bytecode für die jeweilige Zielarchitektur übersetzt werden Der HDL Coder erzeugt VHDL oder Verilog Dateien, welche hingegen mit einem Synthesetool wie das Xilinx ISE oder Synopsys in Hardware übersetzt werden können
4
Wofür braucht man die automatische Code Generierung?
Warum möchte man Code automatisch generieren lassen? Vorurteile Automatische Code Generierung ermöglicht den Entwurf von Software/Hardware auf der Spezifikationsebene Der höhere Abstraktionsgrad von Modellen bietet eine bessere Übersicht und schnellere Umsetzung der Spezifikationen Simulation des Modells ermöglicht Test des Designs noch vor der Implementierung Durch die autom. Code Generierung wird das Rapid-Prototyping beschleunigt Sofern das Modell korrekt ist und der Generator zuverlässig arbeitet, entspricht der generierte Code den Spezifikationen und Implementierungsfehler werden so reduziert Performance des generierten Codes ist schlecht Integration von Legacy Code ist schwierig Der generierte Code ist schlecht lesbar Der generierte Code ist schlecht portierbar Mächtigkeit der Modelle, aus denen sich Code generieren lässt, ist eingeschränkt Wozu möchte man nun die Code Generierung überhaupt automatisieren? Der große Vorteil dieser Methode ist, dass ich das System auf einer abstrakteren Ebene beschreiben kann und somit die Übersicht leichter behalte außerdem ist der Systementwurf näher an der Spezifikation und es entstehen weniger Fehler bei der Umsetzung der geforderten Inhalte Ein weiterer Vorteil ist, dass man das System bereits auf der Modellebene simulieren und somit testen kann, ohne dafür auch nur eine Zeile Code schreiben zu müssen Durch die einfache Art und Weise aus dem Modell Code generieren zu können, beschleunigt sich auch das Rapid-Prototyping erheblich Der dritte große Vorteil ist, dass sofern der Generator zuverlässig arbeitet, die Übersetzung in den Quellcode deutlich weniger Fehler beinhaltet als wenn man dies von Hand getan hätte Soweit die erwünschten Eigenschaften der automatischen Code Generierung Aber sicherlich ist nicht alles Gold was glänzt und so gibt es auch einige Vorurteile die mit der automatischen Code Generierung einher gehen Dazu zählt unter anderem, das Vorurteil, dass der generierte Code schlechter performt als handgeschriebener, das vorhandener legacy code schwer zu integrieren sei, das der generierte Code schlecht lesbar und portierbar ist und dass die Menge der Modelle aus denen man Code generieren kann nicht alle möglichen Modelle umfasst Diese Punkte werde ich im Verlauf des Vortrags versuchen zu klären Aber grundsätzlich gilt die Annahme dass die automatische Code Generierung sowohl die Produktionskosten als auch die Entwicklungszeit verkürzt und die Qualität des Codes der von handgeschriebenen Code entspricht Die automatische Code Generierung soll die Produktionskosten und die Entwicklungszeit verringern und gleichzeitig die Qualität des Codes im Vergleich zur manuellen Implementierung verbessern
5
Agenda Motivation – Warum automatisch Code generieren?
Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra Kommen wir nun also zu der Funktionsweise und den Besonderheiten der Code Generierung
6
Vorraussetzungen für die Code Generierung
Voraussetzungen Der Model Advisor gibt Aufschluss darüber, ob aus dem Modell Code generiert werden kann Folgende Dinge sollten beachtet werden: Der Solver muss auf „Fixed-Step“ eingestellt werden Man sollte Blocks nicht verwenden, die nicht in Code übersetzt werden können (z.B. MATLAB Fcn block) Es wird empfohlen die Zielplattform anzugeben, damit der Code möglichst optimal angepasst werden kann Je nach Zielplattform sollten die Datentypen ausgewählt werden (Optimierungspotential!) Vermeiden von teuren floating-point Datentypen, wenn möglich Bei der Verwendung von Zeitabhängigen Blocks sollte eine Lebensdauer des Programms angegeben werden, damit der Generator ausreichend große Zähler generiert (sonst Gefahr eines frühzeitigem Overflows!) Welche Vorraussetzungen muss ein Simulink Modell erfüllen, damit man daraus Code generieren lassen kann? Simulink bietet zum Testen des Modells auf dessen Kompatibilät mit der Code Generierung ein integriertes Tool an: den Model Advisor Rechts seht ihr ein Bild dieses Tools und unten rechts wie es aussieht wenn eine Eigenschaft des Modells nicht so ist wie sie für die Codegenerierung sein sollte Ich werde das Ganze nochmal live zeigen, damit vielleicht auch lesen kann was dort steht Grundsätzlich sollten man folgendes beachten wenn man aus einem Modell Code generieren möchte In den Simulationseinstellungen sollte der Solver-Typ auf Fixed-Step eingestellt werden Welche konkreten Solver man verwendet ist eigentlich egal, da er die Einstellung ignoriert und den discrete solver verwendet Es dürfen keine Blocks verwendet werden, die nicht in Code übersetzt werden können Dazu zählt unter anderem der Matlab Function Block; nicht zu verwechseln mit dem Matlab Embedded Funtion Block Es ist außerdem empfehlenswert die gewünschte Zielplattform möglichst genau anzugeben, da der Generator auf Grund dieser Informationen den Code besser optimieren kann Man sollte auch wenn möglich konkrete Datentypen festlegen, da im Zweifelsfall der Generator double als Standarddatentyp festlegt Verwendet man zeitabhängige Blocks sollte man in der Konfiguration eine geeignete Lebensdauer des Programms angeben, damit die generierten Counter entsprechend groß genug sind Sonst droht Gefahr des vorzeitigem Überlaufs
7
Mögliche Zielplattformen
Simulink Generatoren Real-Time Workshop RTW Embedded Coder Stateflow Coder HDL Coder C / C++ VHDL / Verilog Für welche Zielplattformen kann man nun den Code generieren und compilieren lassen? Sowohl der RTW, der RTW Embedded Coder und auch der Stateflow Coder erzeugen C bzw. C++ Code aus dem Simulink Modell Der Unterschied zwischen RTW und RTW Embedded Coder ist hierbei, dass der Embedded Coder auf eingebettete Prozessoren spezialisiert ist und effizienteren sowie kleineren Code erzeugt Der Stateflow Coder ist in der Lage Code aus Statecharts, die auch in Simulink Modelle eingebunden werden können, zu generieren Verwendet man noch normale Simulink Blöcke benötigt man sowohl den Stateflow Coder und den RTW Um aus dem generierten Code nun eine ausführbare Datei zu machen, benötigt man zudem einen handelsüblichen und kompatiblen Compiler Beispielsweise den Microsoft Visual Studio 2008 C++ Compiler Dieser ermöglicht nun die Erzeugung von Bytecode für eine fast beliebige Architektur Die unten stehenden Zielarchitekturen sind die Prozessoren, die Simulink direkt unterstützt und für die der RTW guten optimierten Code generiert Der RTW bietet außerdem an, Code für einen generischen Prozessor zu generieren Allerdings ist davon auszugehen, dass dieser Code nicht so gut ist, wie für die unten stehenden Architekturen Zusätzlich zur Generierung von C Code ist es möglich auch Code einer Hardwarebeschreibungssprache wie VHDL oder Verilog zu generieren Dazu benötigt man allerdings den HDL Coder und wenn man den Code dann in Hardware übersetzen will, benötigt außerdem noch ein Synthesetool (eine Art Compiler für Hardwarebeschreibungssprachen) Dabei gibt es 2 mögliche ziele: einmal einen programmierbaren FPGA oder man kann das ganze dann in hard-coded Hardware gießen C - Compiler Synthese Tool AMD K5 ARM AVR Intel x86 SPARC TI C6000 FPGA ASIC …
8
Workflow der Code Generierung
Vom Modell zum Prototypen Ausführbare Datei erzeugen Wie generiert man nun aus einem Modell den Code? Zuerst muss man natürlich das Modell erstellen und durch die Simulation verifizieren Dann müssen die Einstellungen angepasst werden und der Model Advisor gibt Aufschluss über die Korrektheit der Settings Wenn der Model Advisor keine Errors mehr anzeigt (Warnings können oftmals ignoriert werden) sind die Einstellungen richtig und das Modell kann mit Hilfe des RTW in Code übersetzt werden Dazu klickt man auf „Build“ und der Generator versucht das Modell zu übersetzen Dabei können natürlich auch Fehler auftreten, die korrigiert werden müssen Im Erfolgsfall wird der generierte Code an den eingebundenen externen Compiler übergeben und mit Hilfe des aus einem Template generierten Makefiles wird versucht den Code in eine ausführbare Datei zu kompilieren Wenn das erfolgreich war, muss man natürlich noch überprüfen ob das Programm sich noch genauso verhält wie man es möchte Zu dem generierten Code ist zu sagen, dass eine handvoll Source und Header Files generiert werden In den Headerfiles sind Parameter und Datentypen definiert In der Toplevel Source Datei werden 4 Funktionen beschrieben Eine „initialize“, eine „output“, eine „update“ und eine „terminate“ Funktion Die initialize Funktion beschreibt den Initialen Zustand des Systems Die ouptput und update function, welche auch wahlweise als eine Funktion generiert werden können beschreiben die eigentlich Funktionalität und das Zeitverhalten des Systems Die Terminate Funktion beschreibt was bei Beendigung des Programms passieren soll
9
Einbindung von Legacy Code
Definition: Legacy Code Workflow für das Einbinden von Legacy Code Ist bestehender Code, welcher ausführlich getestet wurde und bereits viele Jahre im Einsatz ist Oftmals auch in anderen (alten) Programmier- sprachen verfasst (Fortran, Ada, etc.) Matlab Konsolen Befehle: f1 = legacy_code('initialize') f1.SFunctionName = 'ex_sfun_doubleit'; f1.OutputFcnSpec = 'double y1 = doubleIt(double u1)'; f1.SourceFiles = {'doubleIt.c'}; f1.HeaderFiles = {'doubleIt.h'}; legacy_code('sfcn_cmex_generate', f1); legacy_code('compile', f1); legacy_code('slblock_generate', f1); Integration in Simulink Simulink erlaubt das Ein- binden von C Header und Source Files Eingebettete Funktionen können als normale Blöcke in das Modell eingebaut werden Diese Blöcke heißen S-Function Blocks Eine weitere wichtige Funktion von Simulink und dem RTW ist die Möglichkeit Legacy Code einzubinden Was ist überhaupt Legacy Code? Legacy code ist bestehender Code, welcher ausführlich getestet wurde und schon lange im Einsatz ist und sich somit bewährt hat Es wäre sehr aufwendig und unter Umständen auch sehr risikobehaftet, den Code neu schreiben zu müssen Damit man bestehenden Code weiterverwenden kann bietet Simulink die Möglichkeit C header und source files in ein Simulink Modell zu integrieren Die integrierten Funktionen können dann als normale Blocks verwendet werden Diese speziellen Legacy Code Blocks heißen S-Function Blocks und können wie folgt erzeugt werden Um Legacy code einzubinden kann man das Legacy Code Tool verwenden Dieses ist nichts weiter als der Matlab Konsolenbefehl „legacy_code“ Zu erst muss man die LCT Datenstruktur erzeugen indem das Tool mit dem Parameter „initialize“ ausführt Dann benennt man die Funktion und weißt entsprechend die C Dateien zu Mit dem „sfcn_cmex_generate“ Parameter kann man nun den S-function Code generieren Dann muss man das Ganze noch mit dem Parameter „compile“ kompilieren und dann kann man ein S-Function Symbol erzeugen und in das Modell einbinden
10
Beispiel: Euklidischer Algorithmus
Pseudocode A Simulink Modell B Generierter C Code C EUCLID(a, b) 1 solange b ≠ 0 2 h a mod b 3 a b 4 b h 5 return a Spezifikation Simulink Implementierung Als nächstes möchte ich euch kurz live zeigen wie man aus einem Modell Code generiert Dazu habe ich aus dem einfachen euklidischen Algorithmus ein Simulink Modell erstellt Keine Angst, ich werde es noch in voller Größe zeigen und den Code ebenfalls Oben links seht ihr also den Pseudocode des euklidischen Algorithmuses Aus dieser Spezifikation habe ich ein Simulink Modell erstellt und das Ganze entsprechend mit dem Model Advisor überprüfen lassen Nachdem ich alle Einstellungen angepasst hatte, konnte ich auch aus dem Modell den Code generieren lassen Ein Executable konnte ich nicht erzeugen lassen, weil mir der Compiler gefehlt hat, aber man würde sowieso nichts „sehen“ können, da das Programm keine Bildschirmausgaben hat Beispiel: Das wäre nun das Modell in voller Pracht Wenn ihr möchtet kann ich nochmal kurz erklären wie das Ganze funktioniert Dann schauen wir uns auch mal den Model Advisor an Und nun wie man den Code generiert Ihr seht, der generierte Code ist ziehmlich groß und unübersichtlich Das kann man aber verbessern indem man Blockbezeichner ohne Sonderzeichen verwendet Model Advisor Autom. Code Generierung Executable
11
Agenda Motivation – Warum automatisch Code generieren?
Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra Jetzt möchte ich noch etwas über die manuellen und automatischen Optimierungsmöglichkeiten sagen
12
Automatische Code Optimierung
Automatische Optimierungen Ein Beispiel Vereinfachen boolescher und algebraischer Formeln Zusammenfassen von Blöcken Sinnvolle automatische Zuweisung der Datentypen Eliminierung von unerreichbaren Pfaden Wiederverwendung von gespeicherten Signalen Generierte Dateien: Optimize01.c Optimize01_data.c Simulink beherrscht eine Reihe von automatischen Optimierungsmechanismen Dazu zählt unter anderem die Vereinfachung von logischen und algebraischen Formeln Sowie das Zusammenfassen von Blöcken die in Reihe geschaltet sind Außerdem wählt Simulink im Normalfall bereits sinnvolle Datentypen für die jeweiligen Signale Unerreichbare und somit überflüssige Pfade werden ebenfalls eliminiert und Signale und Variablen können mehrfach verwendet werden Rechts seht ihr ein von mir erstelltes Modell, welches lediglich eine Division und anschliessend eine Multiplikation ausführt Ich möchte damit zeigen wie gut Simulink mathematische Formeln vereinfachen kann Wenn man die Optimierung ausschaltet wird das Modell eins zu eins in Code übersetzt Glücklicherweise erkennt Simulink bei eingeschalteter Optimierung, dass das Ergebnis der Berechnung konstant ist und somit die Operationen entsprechend wegrationalisiert werden können Unten seht ihr dann den Code der aus diesem Modell generiert wurde Links unten ist die output Funktion leer, da keine Berechnungen gemacht werden müssen, sondern es muss nur eine Konstante, welche rechts unten definiert ist, ausgegeben werden Die automatische Optimierung von Simulink ist also ein sehr mächtiges Werkzeug und ermöglicht die Generierung von effizientem Code Allerdings ist auch einiges an Einarbeitungszeit nötig, um mit den entsprechenden Optionen umgehen zu können
13
Manuelle Code Optimierung
Manuelle Optimierungen Ein einfachere Variante des Eukl. Algorithmus Kleinere Datentypen erzwingen (wenn Overflow vernachlässigt werden kann) Alternative Implementierung von Algorithmen Abstimmen des Modells auf die jeweilige Zielplattform Nutzung vorgefertigter Embedded Matlab Funktionen Generierte Dateien: Optimize02.c Optimize02_data.c Natürlich kann Simulink auch keine Wunder vollbringen und vieles steht oder fällt mit der Implementierung des Entwicklers Daher gibt es natürlich jede Menge Tuningpotential auf manueller Ebene Man kann zum Beispiel kleinere Datentypen erzwingen, wenn man den Wertebereich der Signale genau kennt oder wenn es für die Funktionsweise unerheblich ist, dass ein Überlauf stattfinden kann Die wichtigste Möglichkeit das Maximum an Performance raus zu holen ist allerdings immer noch die Verwendung einer anderen Implementierung Also das verbessern des Algorithmus oder eine bessere Umsetzung als Simulink Modell Außerdem ist es wichtig die Zielplattform möglichst genau anzugeben, damit der Generator weiß welche Eigenheiten die Zielarchitektur hat und welche Datentypen und Operationen er besser nicht verwendet Eine andere Möglichkeit der alternativen Implementierung ist die Nutzung von Embedded Matlab Funktionen Diese sind nicht zu verwechseln mit einem normalen Matlab Function Block, denn die Embedded Funktionen sind eine Teilmenge aller Matlab Funktionen, welche auch in Code übersetzt werden können Rechts seht ihr nun eine Alternativimplementation des euklidischen Algorithmus, welchen ich hier durch eine embedded Matlab Funktion beschrieben habe Das Ergebnis der Code Generierung kann sich sehen lassen Im Vergleich zu dem Modell des euklidischen Algorithmus, welches ich vorhin vorgestellt habe, ist der generierte Code deutlich kleiner geworden Die Hauptquelldatei ist statt 416 LoC nur noch 305 Loc groß und die Daten Quelldatei ist nur noch 32 Loc statt 51 Locs groß Es ist natürlich klar, dass man den eukl. Algo von Hand auch in 10 Zeilen beschreiben könnte 416 LoC vs LoC (optimiert) 51 LoC vs. 32 LoC (optimiert)
14
Agenda Motivation – Warum automatisch Code generieren?
Funktionsweise und Besonderheiten Optimierungsmöglichkeiten der Code Generierung Bewertung: Pro und Contra Zum Abschluss möchte ich noch auf Leistungsaspekte der Code Generierung und auf die Vor und Nachteile dieser Methode eingehen
15
“ „ “ „ Leistungsanalyse Automatisch generierte Code vs. „Handarbeit“
Erfahrungsbericht: Daimler Crysler * “ Üblicherweise erreicht der automatisch generierte Code eine ähnliche Performance wie handgeschriebener Code In vielen Fällen ist der Auto-Code etwas Speicherschonender Die tatsächliche Leistung hängt aber sehr von den gewählten Einstellungen ab „ Erfahrungsbericht: NASA ** “ Wie versprochen noch ein paar Worte zu der Performance automatisch generierten Codes im Vergleich zu handgeschriebenem Code Leider gibt es sehr wenig brauchbare Informationen zu diesem Thema Ich nehme an auch deshalb, weil das Ganze auch schwer vergleichbar ist Im Allgemeinen sagt man aber, dass automatisch generierter Code ungefähr an die Performance von handgeschriebenem Code heranreicht In vielen Fällen ist der automatisch generierte Code sogar etwas speicherschonender Natürlich hängt das stark davon ab, welche Einstellungen man verwendet Links unten sind zwei kleine Tabellen, wo anhand eines konkreten Beispiels die Codegröße und der Speicherbedarf von hand und auto code verglichen wurden Rechts seht ihr mal 2 Ausschnitte aus Erfahrungsberichten zweier großer Firmen Da ich das von der Matlab Seite habe, ist auch klar dass dort natürlich keine Berichte veröffentlich werden, die negatives über Simulink berichten „ * **
16
Vor- und Nachteile der Code Generierung
Vorteile der Code Generierung Nachteile der Code Generierung Deutliche Reduktion der Entwicklungszeit Bessere Handhabbarkeit des Projekts durch bessere Übersicht und geringere Komplexität Leichtere Interpretierbarkeit des Simulink Modells im Vergleich zu reinem Code Einfache Wiederverwendbarkeit von Legacy Code Relativ breite Palette an unterstützten Plattformen inkl. der Möglichkeit Hardware generieren zu lassen Automatisch generierter Code ist weniger anfällig für Imple- mentierungsfehler Generierter Code ist schlecht lesbar und dadurch auch schwer manuell verifizierbar Der generierte Code ist bei einfachen Algorithmen deutlich größer als handgeschriebener Code Hohe Lizenzkosten (RTW kostet ,00 €) und viele zusätzliche Plugins/Toolboxes Keine Möglichkeit der Einflussnahme auf den verwendeten Sprachumfang Hohe Einarbeitungszeit bis guter Code generiert werden kann Was sind nun die konkreten Vor- und Nachteile der automatischen Code Generierung und in wie weit stimmen die Anfangs erwähnten Vorurteile? Sofern das System eine gewisse Mindestkomplexität überschreitet hilft die automatische Code Generierung die Entwicklungszeiten deutlich zu reduzieren Bei ganz kleinen Systemen, kann es aber von Vorteil sein, den Code von Hand zu schreiben wie wir anhand des Beispiels des eukl. Algo gesehen haben Nichts desto trotz verbessert die Modellbasierte Entwicklung die Übersichtlichkeit und verringert die Komplexität des Systems dadurch, dass es die Funktionalität anschaulicher darstellt Wir wir gesehen haben, ist es auch relativ einfach altbewährten Legacy Code weiterzuverwenden und somit kann dieses Vorurteil nicht bestätigt werden Auch die Palette an unterstützten Zielplattformen und die Möglichkeit für Generic Plattformen den Code generieren zu lassen entkräften das Vorurteil, dass der Code schlecht portierbar sei Ein weiterer wichtiger Vorteil dieser Methode ist auch, dass sich durch die automatische Code Generierung Implementierungsfehler verhindern lassen Bedingung dafür ist allerdings dass die Generatoren fehlerfrei arbeiten Ein Vorurteil dass man allerdings bestätigen kann, ist dass der generierte Code relativ unübersichtlich und somit schlecht lesbar ist Ein weiteres Manko, welches aber bei großen Firmen und Projekten nicht so sehr ins Gewicht fällt, sind die doch sehr teuren Lizenzkosten von Simulink und den ganzen Zusatzpaketen die man dafür erwerben kann Der Real-Time Workshop kostet alleine schon Euro und wenn man dann noch Statecharts verwendet, brauch man auch noch den Stateflow Coder und so summieren sich die Kosten recht schnell Weiterhin kann man keinen Einfluss auf den verwendeten Sprachumfang nehmen und somit wird es schwierig den generierten Code entsprechend zertifizieren zu lassen Wie bereits erwähnt benötigt man auch relativ viel Zeit, bis man alle Einstellungen kennt und guten Code generieren lassen kann
17
Zukunftsaussichten dieser Methode
Die nächste Evolutionsstufe: Steigende Komplexität der Software/Hardware erfordert weitere Abstraktion und somit wird diese Art der Modellierung sicherlich an Bedeutung gewinnen Automatische Code Generierung könnte die Qualität von Software-Code deutlich steigern, da es weniger Fehler bei der Übersetzung von Modell zu Programmcode gibt Die Code-Generatoren und Compiler werden immer besser und liefern bereits heute ebenbürtige Ergebnisse im Vergleich zu handgeschriebenem Code Der Konkurrenzkampf fordert immer geringere Time-To-Market und effizientere (billigere) Entwicklungsmethoden Zum Schluss möchte ich noch etwas über die Zukunftsaussichten der Modellbasierten Entwicklung und der damit verbundenen Code Generierung sagen Das Software und Hardware Systeme immer komplexer werden ist ja hinreichend bekannt und mittlerweile gibt es auch ernsthafte Probleme was die Fehleranfälligkeit dieser Systeme betrifft Deswegen denke ich dass es an der Zeit ist, eine weitere Abstraktionsebene zu schaffen, die das ganze wieder vereinfacht Die Modellbasierte Entwicklung hat hier gute Chancen das Problem zu lösen bzw zu verbessern Außerdem verringert die automatische Code Generierung die Fehler die bei der Übersetzung eines Modells in Code von Hand entstehen könnten Auch die Code Generatoren können sich mittlerweile sehen lassen und wenn sie erst mal ein ähnliches Reifestadium erreicht haben wie die guten C Compiler, kann man davon ausgehen dass der Code weitestgehend korrekt ist und an die Performance von handgeschriebenem Code heranreicht Ein weiteres wichtiges Kriterium um am Markt erfolgreich zu sein, ist die Zeit die das Produkt benötigt bis es marktreif ist Die Modellbasierte Entwicklung hilft hier die Entwicklungszeit deutlich zu verkürzen, welches für viele ein gutes Argument sein könnte, diese Methode auch anzuwenden
18
Vielen Dank für Ihr Interesse!
Das wars erst mal von meiner Seite Gibt es noch Fragen oder Anmerkungen zu dem Vortrag?
19
Quellenverzeichnis Verwendete Quellen
“Model-Based Design and Beyond: Solutions for Today’s Embedded Systems Requirements”, Krasner, Jerry, Embedded Market Forecasters, „Automatische Codegenerierung: Mythos und Realität“, D&V Dezember 2004, S. 40, “Multi-target Modelling for Embedded Software Development for Automotive Applications”, Hodge, Ye, Stuart, VisteonCorporation, March 2003, SAE Technical Paper Series “Automatic Code Generation: Facilitating New Teaching Opportunities in Engineering Education”, Pieter J. Mosterman, The MathWorks Inc., 2006 Matlab und Simulink Hilfe und Dokumentation Wikipedia
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.