Modellbasierte Software-Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer Institut für Rechnerarchitektur und Softwaretechnik
Systematik der Modellerstellung Für jedes Bedienelement (Schalter, Knopf, Sensor) die verschiedenen Positionen als Zustand und die Benutzereingaben als Ereignis Für jedes Ausgabeelement die verschiedenen physikalischen Zustände modellieren Steuerung zur Verbindung der Ein- und Ausgaben Parallelschaltung dieser Automaten ergibt Modell der Steuerung Umgebungsmodell zur Modellierung der physikalischen Realität (z.B. Sensorereignis falls Motor am Anschlag) Parallelschaltung dieser Automaten ergibt Systemmodell
Heute: Codegenerierung Codegenerierung aus State Machines Codegenerierung aus Simulink Codegenerator ist „Compiler für Modelle“ Wiederverwendung schnelle Prototyp- und Produkterstellung erhöhte Zuverlässigkeit gegen Programmierfehler automatische Optimierung des generierten Codes Ziel: automatische Übersetzung von Modellen in ausführbaren (C-) Code
Codegenerierung aus State Machines Übersetzung eines endlichen Automaten nach C? loop case/switch Adjazenzmatrix
State Machine Besonderheiten Hierarchie geschachtelte Zustände Parallelität Zustandsraumvektor Kommunikation Event-Queue Nichtdeterminismus i.A. verboten
Beispiel: Visual State Coder
Codeoptimierung Hauptkriterium: Größe des generierten Codes! Variablenbreite (int8 statt int32, state_type, ...) Prozessorspezifika (Register, Timer, ...) werden meist vom Target Compiler optimiert Tabellenformat benötigt Ausführungs-Engine! (256-748 bytes Overhead) Laufzeit festgelegt durch „run-to-completion“-Semantik
Codegenerierung für Simulink Drei kommerzielle Produkte verfügbar Embedded Coder (MathWorks) Real Time Workshop (MathWorks) TargetLink (dSPACE GmbH) Quelle: dSPACE GmbH
Thanks for the slides: Daniela Weinberg Prinzip Thanks for the slides: Daniela Weinberg
Beispiel Schaltsystem mit Schwellwert 0.5 physikalisches Modell (SimuLink) Implementierungsmodell (TargetLink) Äquivalenz?
generierter Code Zweierpotenz-Skalierung; 128 * 2-8 = 0.5 Void switch_system(Void) { /* Switchswitch_system/switch_primitive */ if (Sa1_Input2_ >= 128 /* 0.5 */) { /* # combined # Outport: switch_system/OutputPort */ Sa1_OutputPort_ = Sa1_Input1_; } else {
Codeabsicherung Wie kann man sicherstellen, dass der generierte Code das Erwartete leistet? (c) generierter Code (a) Modell (b) Code- Generator (d) Code Ausführung Physical Model (floating - point) Compiler (Linker) Host PC Code generator C Code Target Implementation Model (fixed - point) Cross - compiler (Linker / Loader ) Qualitätssicherung auf jeder Ebene notwendig! 18.11.2005
Modelltransformation Codegenerator = Compiler Grammatik Metamodell Abstrakter Syntaxbaum XML-Repräsentation Attributgrammatik Graphtransformation Realisierung von Modell-Codegeneratoren durch Modelltransformationen verschiedene Standards verfügbar: QVT/M2M, ATL, MOF2Text, Tefkat, XSLT, ...
QVT Beispiel Geg. Metamodell für Quell- und Zielmodelle A Model-Driven Development Approach to Mapping UML State Diagrams to Synthesizable VHDL Stephen K. Wood, David H. Akehurst, Oleg Uzenkov, W. Gareth J. Howells, and Klaus D. McDonald-Maier
VHDL Metamodell
QVT Regel
Beispiel: Elimination von „deep transitions“ Graphical Composition of State-Dependent Use Case Behavioral Models Jon Whittle, João Araújo, Ana Moreira, Rasheed Rabbi