Download - Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk
![Page 1: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/1.jpg)
Generierung von effizientem C-Code aus UML2-Strukturdiagrammen
AbschlussvortragMathias Funk
![Page 2: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/2.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 2 / 17
Aufgabenstellung
• Konzeptioneller Teil– Wie können UML2-Strukturdiagramme in
ANSI C übertragen werden?– Wie kann effizienter Code erzeugt werden?
• Technischer Teil– Entwicklung eines Eclipse-Plugins
• Einlesen von UML2-Modellen (aus ViPER)• Implementierung der konzeptionellen Ergebnisse• Generierung von lauffähigem ANSI C-Code
![Page 3: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/3.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 3 / 17
Inhalt• Motivation / Anforderungen• Transformationskonzept
– Maximen– Beispiel
• Realisierung– ANSI C-Modell– Plugin-Architektur
• Optimierung– Singletons– Evaluation
• Demo
![Page 4: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/4.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 4 / 17
Kontext: MDD
![Page 5: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/5.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 5 / 17
Anforderungen
• MDD im Umfeld eingebetteter Systeme– MeDUSA
• Verwendung von UML2-Modellen• Zielsprache ANSI C• Übergang von Modell zu Code möglichst
nahtlos:Codegenerierung!
![Page 6: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/6.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 6 / 17
Transformationskonzept
Konzept der Klasse existiert nicht in C
• Transformation nach Standardmapping– Zentrale Datenstruktur als C-struct
• Maximen– Generische Umsetzung aller Classifier
• Durchgängigkeit, Konsistenz• Bessere Akzeptanz durch Entwickler
– Unabhängigkeit von späterer Instantiierung• Wiederverwendung
![Page 7: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/7.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 7 / 17
Beispiel: Behavior Port I
• Port besitzt zwei Interfaces:– Interface1 mit Operation: operation1(param1 : int) : int– Interface2 mit Operation: operation1(param1 : char) : char
![Page 8: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/8.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 8 / 17
Beispiel: Behavior Port II
struct _PortType1 {
/* provided interfaces */void * interface1;int (* fp_interface1_operation1)(void * _self, int param1);
/* required interfaces */void * interface2;int (* fp_interface2_operation1)(void * _self, char param1);
}
struct _StructuredClass {
/* ports */PortType1 port1;
}
• Umsetzung der Classifier in C-Strukturen:
![Page 9: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/9.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 9 / 17
Beispiel: Behavior Port III• Setzen der Funktions- und Instanzzeiger mittels Registrierungsfunktionen:
void REGISTER_PortType1_Interface1(void* _self, void* connector){
self->interface2 = connector;}
void REGISTER_PortType1_Interface1_operation1(void* _self, int(* operation)(void* _self, int param1))
{self->fp_interface1_operation1 = operation;
}
• Aufruf der Registrierungsfunktionen im Konstruktor des umgebenden Classifiers:
REGISTER_PortType1_Interface1(&port1, self);REGISTER_PortType1_Interface1_operation1(&port1,
StructuredClass_operation1_Implementation);
![Page 10: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/10.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 10 / 17
Realisierung
• ANSI C-Modell(neu entwickelt, da nicht frei verfügbar)– Core-Diagramm– Container-Diagramm
• Plugin-Architektur
![Page 11: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/11.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 11 / 17
ANSI C Modell: Core
![Page 12: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/12.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 12 / 17
ANSI C-Modell: Container
![Page 13: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/13.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 13 / 17
Workflow
![Page 14: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/14.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 14 / 17
Plugin-Architektur
![Page 15: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/15.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 15 / 17
Optimierung: Singletons• Singleton: „eine globale Instanz“• Häufig in der Praxis• Keine Verletzung der direkten Abbildung
struct _Data {
int a;char b;
}
#define Data struct _Data
Data Data_self;
struct _Data {
int a;char b;
}
#define Data struct _Data
Data_CREATE();
Data data1;
Data_CREATE($data1);
Normale Transformation Transformation mit Singletons
![Page 16: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/16.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 16 / 17
Optimierung: Evaluation• Performance
– 6 Mrd. Funktionsaufrufe einer einfachen Multiplikation (Demo-Beispiel)• Unoptimiert: 392 Sekunden• Singletons: 331 Sekunden
• Speicherplatz (dynamisch)– 3 Instanzen bzw. 3 Singletons (Demo-Beispiel)
• Unoptimiert: 1.016.492 Bytes• Singletons: 1.016.611 Bytes
– 31 Instanzen bzw. 3 Singletons• Unoptimiert: 1.016.828 Bytes• Singletons: 1.016.611 Bytes
• Speicherplatz (statisch)– 3 Instanzen bzw. 3 Singletons (Demo-Beispiel)
• Unoptimiert: 13.967 Bytes• Singletons: 14.086 Bytes
– 31 Instanzen bzw. 3 Singletons• Unoptimiert: 16.015 Bytes• Singletons: 16.134 Bytes
![Page 17: Generierung von effizientem C-Code aus UML2-Strukturdiagrammen Abschlussvortrag Mathias Funk](https://reader036.vdokument.com/reader036/viewer/2022062411/570491be1a28ab14218d812f/html5/thumbnails/17.jpg)
RWTH Aachen, LuFGI 3 Software Konstruktion - Mathias Funk 17 / 17
Demo
Vielen Dank für die Aufmerksamkeit!