mikrocontroller.net

Forum: PC-Programmierung Informationen zwischen Codeprojekt, VOR dem compilieren austauschen


Autor: Jannik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich suche gerade nach einer Möglichkeit um zwischen 2 Codeprojekten, 
also zwischen 2 Programmiersprachen, Informationen auszutauschen bzw. 
beiden Projekten zum Zeitpunkt des compilierens die gleichen 
Informationen bereit zu stellen.
Der konkrete Anwendung'sfall ist ein serielles Protokoll, dass zwischen 
Mikrocontroller, in C++, und Userinterface, in C#, konsistent sein soll, 
ohne vor jedem Compolieren die Dokumente in beiden Projekten zu händisch 
zu vergleichen.
Im Mikrocontroller werden alle Informationen als Preprozessor defines 
festgelegt, im Userinterface nutze ich eine Klasse mit nur statischen 
Membern.

Ich hatte bereits folgende Ansätze:
1. C-Datei in C#-Projekt einbinden -> ich habe keine Möglichkeit 
gefunden
1.1 C-Datei mit einem Hilfsprogramm in C# übersetzen lassen -> war mir 
ehrlich gesagt zu umständlich
2. Protokoll als XML-Datei erstellen und in beide Projekte einbinden -> 
ich habe keine Erfahrungen mit XML und wäre hier dankbar für eure Tipps 
wie man das anstellen könnte. Das müsste ja für den Mikro auch im 
Preprozessor laufen.

Oder kennt einer von euch einen komplett anderen Ansatz um die Datei 
gleich zu halten?


Danke im Voraus für eure Unterstützung.

: Verschoben durch Moderator
Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Codegeneratoren einfachster Art:

Denk dir eine Beschreibungssprache aus, zum Beispiel in der Form
# Comment
[SECTION]
KEY1=VALUE1


Nimm eine simple, einfache Skriptsprache deiner Wahl. Für die Aufgabe 
reicht zum Beispiel klassisches AWK.

Skripte zwei Codegeneratoren. Beide lesen die Beschreibungssprache, 
einer generiert C++, einer C#.

Bau die jeweiligen Codegeneratoren in die jeweiligen Buildsysteme ein.

Gesamter Arbeitsaufwand: ca. 1 bis 2 Stunden.

Wenn du es richtig langsam, schlecht lesbar, schlecht wartbar, aber 
modern und web-isch haben möchtest dann nimm XML als Grundlage für die 
Beschreibungssprache und ein beliebiges unsägliches XML 
Translation-Tool.

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sehen denn die Informationen in den Defines (in C++) und den
statischen Members (C#) aus? Sind das nur numerische Konstanten oder
etwas Komplizierteres?

Wenn die Informationen nicht zu komplex strukturiert sind, lässt sich
vielleicht eine Syntax finden, die sowohl der C++- als auch oder
C#-Compiler versteht. Das wäre endlich einmal eine sinnvolle Anwendung
des polyglottes Programmierens:

  https://de.wikipedia.org/wiki/Polyglottes_Programm

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jannik schrieb:
> ich suche gerade nach einer Möglichkeit um zwischen 2 Codeprojekten,
> also zwischen 2 Programmiersprachen, Informationen auszutauschen bzw.
> beiden Projekten zum Zeitpunkt des compilierens die gleichen
> Informationen bereit zu stellen.

Warum? mal ehrlich ich kann verstehen was du vorhast. Aber was hindert 
dich daran das Serielle Protokoll in C++ zu schreiben und dann beim 
Compileren des Codes für den Mikrocontroller, eine dll für dein Host zu 
erzeugen.
in deinem C# Programm lädst du dann einfach die C(++)-dll und beide 
Seiten sprechen defintiv das gleiche Protokoll!
Wenn du das Clever machen willst kannst du ja in der dll noch ein paar 
Versionsnummern einbauen um sicherzugehen das es auch die richtige dll 
ist.

Wenn du das nicht willst musst du dir einen paar code generatoren 
erzeugen welche aus einer Abstrakten Syntax das Protokoll für alle 
beteiligen Programmierstprachen übersetzen. Auch das kann beliebig 
Kompliziert werden und wenn das Protokoll nicht ganz trival ist. 
Ausserdem holst du dir da einen ganze menge weiter Fehlerquellen ins 
Projekt.(Fehler in der Beschreibung, Fehler in einen Beteiligten Parser, 
uneindeutige Syntax, bloaded Code im generierten Module und so weiter)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist Protocol Buffers etwas für Dich.
https://developers.google.com/protocol-buffers/docs/overview

Autor: georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
imonbln schrieb:
> eine dll für dein Host zu
> erzeugen.

Eine Möglichkeit. Die andere: Mixed Language Programming. Es war früher 
völlig üblich, z.B. C und Assembler in Modulen zu verwenden und 
zusammenzulinken, es kann sowohl C eine Assembler-Funktion aufrufen als 
auch umgekehrt, das gilt auch für irgendeine andere Kombination. Das 
scheint aber völlig aus der Mode gekommen zu sein. Zugegebenermassen 
sind DLLs einfacher, nur hat man dann nicht die eine lauffähige Datei.

Georg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.