Forum: PC-Programmierung beim kompilieren extra dateien erzeugen


von dotm (Gast)


Lesenswert?

Hallo!
Meine MCU applikation in C (compiler: keil) schickt datenpakete über 
unterschiedliche Kanäle. Dabei ändern sich die erzeugten Daten und die 
Reihenfolge oft bei einem Versionssprung, weiters sind Sachen wie 
Trennzeichen, Reihenfolge der Datensätze etc nach einer neuen Version 
unterschiedlich.
Mein Gedanke wars also beim kompilieren eine extra Datei erzeugen zu 
lassen die dann vom Klienten (nicht meine Programmierarbeit) automatisch 
ausgewertet wird um das neue Datenformat erkennen zu können.
Gibt es irgendwelche Scripts die ich während des kompilierens ausführen 
kann und die Informationen aus dem Sourcecode verarbeiten können?
grüsse!

von dotm (Gast)


Lesenswert?

Eventuell geht auch der andere Weg:
Ich schreibe mir eine Datei die für den Clienten wichtige Informationen 
beinhaltet (z.B. Datenformat des gesendeten Paketes, Reihenfolge der 
Messgrössen, Trennzeichen usw..) und der diese Datei wird dann in den 
Code verarbeitet und der Code automatisch angepasst.
Gibt es dafür eine allgemein (für C) gültige Lösung?

von Hululu (Gast)


Lesenswert?

Beide Wege gehen. Z.B. mit einem Perl-Script den Du in Deine Makedatei 
einarbeitest.
Aber herunterladen kannst Du sowas nicht. Das musst Du selbst schreiben.

Die Schwierigkeit bei einer standardisierten Lösung besteht darin, das 
unterschiedliche Vorstellungen darüber existieren, auf welche Weise etwa 
die Dinge die Du genannt hast, beschrieben werden sollen und auf welche 
Weise sie im C-Code behandelt werden.

Eine allgemeine Lösung die alles erschlägt kann es nicht geben.
Eine spezielle Lösung aber wird vermutlich den einen oder anderen Aspekt 
nicht so behandeln wie Du es willst.

1. Trennzeichen
Das geht über ein #define im C-Code. Aber wie steht das in der 
Textdatei?
Z.B.

TRENNER: ';'

da fehlt als nur noch das "#define".

2. Reihenfolge der Datensätze

Entweder spezifizierst Du eine Sortiereihenfolge und ein Feld, nach dem 
sortiert wird oder eine Funktion.

Auch schon fast ein "#define". Kommt auf Deinen C-Code an. Wie 
realisierst Du die Reihenfolge?

von dotm (Gast)


Lesenswert?

hallu hulu!
Ich kann alle die dinge die ich realisieren will problemlos mit defines 
und macros machen.
Die Datei die an den Server (also klienten) weitergeleitet wird 
entspricht aber nicht C sondern ist eine CSV, auch mit Feldern die für 
den Code eigentlich nicht gebraucht werden.
Und das soll auch so bleiben.
Ich glaube aber kaum dass der Präprozessor fähig ist eine Datei zu 
öffnen, diese Umzuformatieren und daraus dann Code zu generieren.
Oder irr ich mich da?
Die Umformatierfunktionen kann ich aber problemlos in C schreiben, 
dieser Code muss dann aber nicht von meinem MCU ausgeführt werden 
sondern lokal, demnach wäre ein weiterer Compiler von Nöten.

von Tom K. (ez81)


Lesenswert?

dotm schrieb:
> Gibt es irgendwelche Scripts die ich während des kompilierens ausführen
> kann und die Informationen aus dem Sourcecode verarbeiten können?

Ja, die, die du schreibst. Visual Studio kann WIMRE "benutzerdefinierte 
Buildschritte" (auch wenn ich die immer höchst undurchsichtig fand), bei 
Makefiles ist das noch viel einfacher. Falls Keil das nicht kann, würde 
mich das sehr wundern.

Automatische Codeerzeugung ist allgemein eine sehr nützliche 
Angelegenheit.
Ob es günstiger ist, aus dem Code deine Datenformatbeschreibung zu 
extrahieren oder umgekehrt, musst du sehen. Auf jeden Fall möchte man 
Perl/Python/Ruby/was_auch_immer_in_Windows_üblich_ist benutzen, statt 
mit C Strings zu kämpfen.

Vielleicht ist auch http://en.wikipedia.org/wiki/Protocol_Buffers für 
dich interessant. Das wäre ein Standard, um aus einer 
Datenpaketbeschreibung Code für div. Sprachen zu generieren.

von StinkyWinky (Gast)


Lesenswert?

Bei uVision von Keil kann man eigene Scripts/Programme einhängen:

- vor der Übersetzung einer C/C++ Datei
- vor dem Build/Rebuild
- nach dem Build/Rebuild

Damit lässt sich das Gewünschte realisieren

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.