Hallo, man kann bekanntlich z.B. mit "printf(_DATE_);" das Compile-Datum in String-Notation der Form "SEP 01 2006" ausgeben oder sonstwie speichern (auch im Flash, als Programm-Info oder so). Ich möchte aber für eine bestimmte Anwendung (Programm-Info-Block) dieses Datum gerne als numerische Werte (int's) haben. Läßt sich aus dem Compiler- bzw. Präprozessorstring _DATE_ ein numerisches Datum gewinnen (separiert in die drei Bestandteile), oder kennt jemand andere Präprozessor- oder Compiler-Direktiven, die hier das aktuelle Datum einfügen? Auch nach längerem Suchen habe ich nichts gefunden. Da das _DATE_ gut fixierte Feldbestandteile hat, könnte man evt. mit Präprozessor-if-Abfragen zum Ziel kommen, wenn es eine Möglichkeit gäbe, im Präprozessor Stringverarbeitung à la "Copy(scr,start,len)" von Borland-Delphi zu machen. Mir ist davon nichts bekannt. Geht's trotzdem? Weiß jemand etwas darüber? Danke für Comments. Günter
Deja vu? Eine Forumsuche hätte dir weitergeholfen: http://www.mikrocontroller.net/forum/read-2-308506.html#308511
Hallo Jörg, danke für diesen Hinweis. Er löst aber leider das Problem nicht. Klar könnte man zur Laufzeit das Datum mit C-Stringverarbeitung aufdröseln und beliebig auswerten. Bei meiner Anwendung geht's jedoch darum, daß der Compiler zu einer Applikation einen Versionsblock in eine bestimmte Section, die auf eine bestimmte Adresse zu linken ist, ausgeben soll (da hast Du mir mit der Idee, eine struct zu verwenden, um die Reihenfolge der Felder zu fixieren, schon mal geholfen - herzlichen Dank nochmal!). Das Datum muß somit schon zur Compilezeit feststehen, nicht erst bei der Ausführung des Codes, denn die im Flash stehende Applikation wird von einem speziellen Bootloader ausgelesen und weiterverarbeitet, da läuft deren Code noch gar nicht. Vielleicht kommst Du jetzt auf die Idee, im Versionsblock eine Adresse einer speziellen Funktion der Applikation zu hinterlegen, die der Bootloader aufrufen kann und dann das aufgedröselte Datum zurückbekommt - das wäre eine Lösung. Dennoch wäre mir der Vorschlag von Patrick Dohmen aus Deinem Link schon sympathischer - soetwas geht natürlich immer (externes Programm oder Script erstellt irgendwelche Daten, die per #include im Programm verarbeitet werden - das würde ggf. auch wieder zu meiner noch älteren Anfrage führen, wie man aus dem AVR Studio ein externes Programm aufgerufen bekommt, ohne ein externes Makefile zu verwenden). Ich muß also das Resumé ziehen, daß AVR-GCC hier keine Unterstützung bieten kann und ich mir einen anderen Weg suchen muß - auch okay. Es führen immer viele Wege zur Lösung. Jedenfalls danke für die Beschäftigung mit diesem Thema. Günter
Da war doch noch der wirklich coole C++-Trick. Der funktioniert in der Tat zur Compilezeit.
Hallo, Jörg, die Funktion von Rolf Magnus ist tatsächlich cool, um nicht zu sagen genial (und ich werde sie an anderer Stelle bestimmt verwenden); sie funktioniert aber durchaus nicht zur Compilezeit, sondern erst zur Laufzeit; denn sie funktioniert, wie Du selbst geschrieben hast und wie ich's getestet habe, nur bei Auto-Variablen, d.h. bei lokalen, auf dem Stack allokierten Variablen; und solche Initialisierungen geschehen ja nicht zur Compilezeit wie etwa bei globalen Variablen (dort wird ja ROM-Code generiert, der per Startup-Code ins RAM kopiert wird), sondern es sind ganz normale Zuweisungen, die logischerweise erst laufen können, wenn die Funktion aufgerufen wird. Somit löst's mein Problem nicht, denn ich will ja ein Datum im ROM-Code (bzw. Flash) ansiedeln, da muß es tatsächlich zur Compilezeit erzeugt werden und ins Hex-File wandern. Dennoch vielen Dank für den Link, für andere Anwendungen ist er sehr wertvoll. Gruß, Günter
Wie gesagt, in C++ geht's auch zur Compilezeit. Wenn du nicht für alles C++ verwenden willst, kannst du das auch in eine eigene Datei schreiben und nur diese mit dem C++-Compiler übersetzen.
Hallo, Rolf, ich will eigentlich kein C++-Projekt eröffnen (kenne mich mit C++ nicht aus), außerdem wollte ich's ganz einfach im AVR Studio mit WinAVR mitcompilieren. Oder siehst Du eine Möglichkeit, dort ein C++-Fragment reinzubringen, das dann mitcompiliert wird und im gleichen Hex-File landet? Günter
Das müßte schon gehen, aber ich kenne mich mit WinAVR und AVR-Studio nicht aus und kann dir nicht sagen, wo du da schrauben mußt. Evtl. reicht es, der Datei einen Namen zu geben, der auf .cpp endet und sie bei den Quellen mit anzugeben.
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.