Forum: Mikrocontroller und Digitale Elektronik Einfachen (AUTOSAR) Codegenerator schreiben


von Jens R. (tmaniac)


Lesenswert?

Hallo in die Runde,

Das Thema Codegeneratoren wird hier recht selten aufgegriffen. Da möchte 
ich mal eine Aufgabe (weil Probleme gibt es ja nicht) in den viruellen 
Raum stellen.

Also ich möchte mir einen einfachen Codegenerator schreiben.
Hauptaufgabe ist es Informationen für die Konfiguration in Strukturen 
und Konstanten und #defines zu packen. Richtig fein wird es wenn man die 
Konfiguration noch auf einer einfachen grafischen Oberfläche (ähnlich 
einem XML-Editor) erledigen könnte, ist aber nicht wirklich nötig.

Nun wollte ich mich mal belesen was es da für Möglichkeiten gibt. Aber 
alles was man so im Netz findet geht viel zu weit und beschreibt den Weg 
vom Model zum Code.

Was kennt ihr für Möglichkeiten sich einen Codegenerator zu bauen?

Eine Option die ich theoretisch kenne, ist der Weg aus XML über die 
Transformation (XSLT). In Richtung HTML hab ich das schon gemacht.

Auf Arbeit haben wir ein etwas mächtigeres Werkzeug, welches mir aber 
trotzdem noch zusagt. Dieses nutzt XML um die Konfigurationsstruktur zu 
beschreiben. Daraus wird eine Java-Klasse (Java-Objekt) automatisch 
generiert. Und dann kann man per ANT richtig flexibel beliebige 
Generatoren schreiben. Man kann im Generator-ANT-File auf alle 
Struktur-Elemente über GetFunktionen zugreifen.

Also für die jenigen die näher dran sind: Ich will mir einen einfachen 
AUTOSAR-Config-Code-Generator basteln.

Schon mal vorne Weg, danke für die Ideen,
TManiac

von Jens R. (tmaniac)


Lesenswert?

Moin,

Ich will einfach das Thema noch mal hochziehen.
Kann doch nicht sein, dass sich keiner Hilfswerkzeuge bastelt um 
übermäßige und fehlerträchtige Tipparbeit zu vermeiden.

Wie gesagt, auch wenn ich es für AUTOSAR-Software nutzen möchte, so 
müssen die Ideen nicht zwangsweise direkt aus der Ecke kommen.

Gruß,
TManiac

von Klaus2 (Gast)


Lesenswert?

...bei uns gibts lt. Intranet nur einen Hartmut Räthe, ansonsten hört 
sich das sehr nach den Vorentwicklern an :)

Kann ich dir aber leider auch nicht helfen, auch wenn ich das Thema 
kenne. Jedoch nicht von seiten der Basissoftwarekonig. Aber das Thema 
ist schon sehr speziell, muss man sagen...

Viel Erfolg, Klaus.

von Jens R. (tmaniac)


Lesenswert?

Nee, nicht ganz.

Ich suche nichts spezielles. Ich suche nur eine einfache Möglichkeit um 
Strukturen und so zu erzeugen. Das hat im Grunde nichts direkt mit 
AUTOSAR zu tun. Es kann aber dafür genutzt werden (so wie der Aufbau 
eines Getriebes auch mit einem Auto zu tun haben kann, muss aber nicht).

kleines Beispiel?

ich habe zb eine Beschreibung in folgender Weise (XML):
1
<module>
2
  <allgemeineEigenschaften>
3
    <EigenschaftTypeA>WertABC</EigenschaftTypeA>
4
    <EigenschaftTypeB>WertCBA</EigenschaftTypeB>
5
  </allgemeineEigenschaften>
6
  <spezielleEigenschaften>
7
    <EigenschaftTypeC>
8
      <TeilEigenschaftTypeC1>234</TeilEigenschaftTypeC1>
9
      <TeilEigenschaftTypeC2>987</TeilEigenschaftTypeC2>
10
      <TeilEigenschaftTypeC3>567</TeilEigenschaftTypeC3>
11
    </EigenschaftTypeC>
12
    <EigenschaftTypeD>
13
      <TeilEigenschaftTypeD1>SymbolischeName1</TeilEigenschaftTypeD1>
14
      <TeilEigenschaftTypeD2>42</TeilEigenschaftTypeD2>
15
    </EigenschaftTypeD>
16
  </spezielleEigenschaften>
17
</module>

und daraus würde ich gerne etwas im folgenden Stil machen:
1
#define DefMitEigenschaftTypeA     WertABC
2
#define DefMitEigenschaftTypeB     WertCBA
3
4
const TypeEigenschaftTypeC ConstantEigenschaftTypeC =
5
{
6
   234,
7
   987,
8
   567
9
};
10
11
const TypeEigenschaftTypeD ConstantEigenschaftTypeD =
12
{
13
    SymbolischeName1,
14
    42
15
};

Das Beispiel ist halt stark vereinfacht, aber es sollte reichen um das 
Verfahren zu verstehen. Es geht eben nur darum um überhaupt einen Ansatz 
zu haben.

Gruß,
TManiac

von Klaus2 (Gast)


Lesenswert?

Ok - verstanden, aber keine Aktien drin, sry :)

Klaus.

von Andreas H. (andreas_h16)


Lesenswert?

Hallo,

das hab ich schon auf vielfältige Weise gemacht.

Z.B. habe ich in grauer Vorzeit SNMP ASN.1 MIBs in C Strukturen 
"compiliert". Als Werkzeuge habe ich flex und bison (lex/yacc) 
verwendet.

Bei einen HTML-Komprimierer (Tokenizer/Musterkomprimierung) für Ulrich 
Radigs Webserver habe ich einen HTML/XML Scanner/Tokenizer aus 
Codeproject (http://www.codeproject.com/KB/recipes/#Parsers) 
zurückgegriffen. Hier wird HTML etwa auf 50%-70% komprimiert in 
C-Headers (Progmem-Struktur) übersetzt und von einem atmega 644 mittels 
Mustertabelle on the fly dekomprimiert.

Möglichkeiten/Tools gibts also viele, allerdings habe ich niemals ein 
Metatool gesehen, welches scannen/parsen der Quellinformation und 
generieren des Zielformats ohne Umweg über ein Programm (dedizierter 
compiler).

Gruss, Andreas

von Christoph S. (christoph2) Benutzerseite


Lesenswert?

Hallo,

Ich weiss nicht, ob noch jemand den Thread auf dem Radar hat, aber ich 
versuche es mal.

Also mir fallen zwei realistische Möglichkeiten ein:

1. dynamische Sprachen (z.B. Python oder Ruby)
machen es sehr einfach deine Systembeschreibung (XML, YAML, ...) zu 
verarbeiten. Zu anschließenden Codegenerierung bieten sich 
Templating-Systeme (z.B. Cheetah/Python http://www.cheetahtemplate.org/ 
an).
Wenn man eine für sich passende Tool-Kombination gefunden hat, kann man 
nicht mehr ohne, die Einsatzmöglichkeiten sind vielfältig.
Einer der wenigen Titel zu diesem Thema ist:
Jack Herrington: Codegeneration in Action [Manning].
Ich habe es zwar noch nicht gelesen, aber es scheint einen breiten 
Überblick zu bieten (unter der Verwendung von Ruby).

2. Model-driven Development/Engineering (Modellgetriebene 
Software-Entwicklung)
Wenn du dich beruflich mit AUTOSAR beschäftigst, kommst du früher oder 
später damit so oder so in Berührung.
Und ja, es ist ein sehr komplexes Thema.
Ich kann hier nur das Eclipse-basierte Projekt Acceleo 
http://www.eclipse.org/acceleo/ empfehlen; die Tutorials sind einen 
Blick wert.
Wer nun MDSD automatisch mit UML assoziert, der irrt sich, jedenfalls im 
Zusammenspiel mit Eclipse. Das Eclipse-Modelling-Framework (EMF) bietet 
Tools mit denen man unter anderem eigene Meta-Modelle anlegen kann. Das 
ist nicht so schrecklich, wie es sich anhört. Es könnte in deinen Fall 
bedeuten, das dein Meta-Modell aus den Elementen "module, 
allgemeineEigenschaften,EigenschaftTypeA" etc. besteht, die in 
irgendwelchen Beziehungen zueinander stehen. Danach generierst du einen 
Model-Editor, mit dem du die konkreten Eigenschaftswerte 
"WertABC,WertCBA" erfasst. Zu guter Letzt transformierst du dein Modell 
in eine beliebige Text-Darstellung; Acceleo ist ein model-to-text Tool.


Es ist letztlich eine Frage der Angemessenheit und der Bereitschaft sich 
einzuarbeiten, und der Aufwand ist mitunter nicht gering.

Cheers

Chris

von TManiac (Gast)


Lesenswert?

Dank dir Christoph,

der Tipp mit dem Buch ist viel wert.

MDSD ist zwar am Rande auch da, mir geht es aber mehr um die LowLevel 
Software. Ich versuche mich an einer eigenen Implementation der MCAL 
Module für mich privat. Da fließt zwar einiges aus dem Erfahrungen im 
Berufsumfeld ein, aber das Geld für die Tools will ich nicht ausgeben.

Inzwischen weiß ich auch dass so einiges zur Godegeneration schon im EMF 
drin ist, das auch ausgiebig in den kommerziellen Tools genutzt wird.

Gruß,
TManiac

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Jens Räthe schrieb:
> Ich suche nur eine einfache Möglichkeit um
> Strukturen und so zu erzeugen
Falls du des Javas mächtig bist, ich nutze für sowas ganz gerne 
http://velocity.apache.org/
Mit einem passendem Template und einem kleinem XML Parser kannst du dir 
da relativ simpel deinen gewünschten Generator bauen.

Wenn du es sehr Luxoriös haben willst:
http://www.eclipse.org/Xtext/
das generiert dir automatsich eine Editor Plugin für Eclipse...

von Taylor (Gast)


Lesenswert?

Hallo zusammen!

Sollte noch jemand diesen Thread beobachten, stelle ich einmal meine 
Absicht vor.

Ich besitze zum Beispiel 30 Codes, möchte daraus gerne 300 machen.

Es müsste doch möglich sein, aus einer gewissen Anzahl von Codes den 
Algorithmus dahinter auszulesen - am besten mit einem Tool zum Erstellen 
eines Generators, welches ich allerdings bisher noch nicht gefunden 
habe.

Kennt jemand eine solche Hilfe? Ich denke mal nicht, dass es möglich 
sein wird per Hand mit nur 30 Codes einen Algorithmus auszulesen, oder?

Taylor

von Kali (Gast)


Lesenswert?

@ Taylor

Dies hier ist ein Thread in dem es darum geht, Programmcode automatisch 
zu generieren.


Abgesehen von den grundsätzlichen Schwierigkeiten den Algorithmus 
einer Information zu finden der verwendet wurde um sie zu generieren um 
neue Information im Sinne einer Identifikation (Code) bzw. eines 
Schlüssels (Kryptografie) zu generieren, wäre zu klären ob Dein 
konkretes Vorhaben nicht gegen geltende Gesetze bzw. allgemeine oder 
besondere Geschäftsbedingungen verstösst.
Der erste Grund, also die grundsätzlichen mathematischen 
Schwierigkeiten, stehen allerdings einem deterministischen Verfahren 
überhaupt im Wege. So lässt sich zu jeder beliebigen Zahlenfolge eine 
unendliche Menge von Algorithmen angeben um sie zu erzeugen. Ob einer 
davon einen weiteren Code erzeugt, der den Regeln zur Verifikation auch 
der ursprünglichen Folge(n) entspricht lässt sich ausschliesslich durch 
Versuch herausfinden.

von malloc (Gast)


Lesenswert?

Rein Interesse haber, aber ist was draus geworden?

Generell wäre mir bei XML und daraus im einfach Stil Code generieren 
auch XSLT dazu eingefallen.

von TripleSSSX2X (Gast)


Lesenswert?

Hallo!

Wenn das Thema Codegenerator (für AUTOSAR) noch aktuell ist, sollstest 
Du dir unbedingt X2X anschauen (www.x2x.ch). Damit kannst Du 
superschnell Deien Gnerator bauen uns auch Stück für Stück ausbauen, 
ohne groß programmieren zu müssen.

von R.B. (Gast)


Lesenswert?

Eine weitere Idee, die wir in nem Autosar-Serienprojekt nutzen:

http://www.infoq.com/articles/thiede-ruby-modelling

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.