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!
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?
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.