Hi Profis, ich würde gerne in der Software für eines meiner Projekte die Teilekennzeichnung (also ATmega168, ATMega328, etc...) als String automatisch zur Kompilierung eintragen lassen. Geschrieben habe ich meinen Source in C Ich habe jetzt bei Atmel online hier: http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_preprocessor.Pre-defined_macros.html schon folgendes Macro/define gefunden: _PART_NAME_ Aber irgendwie meckert mir das Studio beim übersetzen, das er das nicht findet. Und so wie ich das auf der Website von Atmel verstehe, ist das ja auch ein Assembler-macro/define ? _TIMESTAMP_ funktioniert zum Beispiel super, aber das kommt ja glaube ich aus VisualStudio Gibt es hier noch eine andere Möglichkeit ohne das jedes mal händisch zu ändern ? Hintergrund: Die Software läuft auf mehreren Geräten, in denen je nach Revision unterschiedliche AVR's verbaut wurden. Um später über einen RS232-port das verbaute Teil identifizieren zu können, würde ich das gerne irgendwie mit in die FW packen. So muss man später das Gerät nicht extra aufschrauben und kann für Updates und weiter Änderungen dann über RS2332 das Target rausfinden. Vielen Dank schonmal !
Vielleicht so?
1 | // Prozessor defines in <avr/io.h>
|
2 | |
3 | #ifdef __AVR_ATmega644__
|
4 | #define ID_STRING "Das ist ein ATMega644"
|
5 | #endif
|
6 | |
7 | #ifdef __AVR_ATmega328P__
|
8 | #define ID_STRING "Das ist ein ATMega328p"
|
9 | #endif
|
10 | |
11 | #ifdef __AVR_ATmega2560__
|
12 | #define ID_STRING "Das ist ein ATMega2560"
|
13 | #endif
|
Das wäre eine Möglichkeit, die ich auch schon in betracht gezogen habe. Ich dachte aber es gäbe vielleicht schon ein fertiges macro/define welches den gewählten Prozessor als String zurück gibt, so wie _TIMESTAMP_ eben. Mal gucken ob noch jemand eine Idee hat, ansonsten mach ich das wohl so. Vielen Dank auf jeden Fall schon mal.
Neuere Versionen von avr-gcc definieren __AVR_DEVICE_NAME__, spätestens ab v5. Das ist allerdings 1) kein String und 2) in Kleinschreibung. Um einen String zu erhalten geht dann z.B.
1 | #define DEVICE_NAME2(X) #X
|
2 | #define DEVICE_NAME1(X) DEVICE_NAME2 (X)
|
3 | #define DEVICE_NAME DEVICE_NAME1 (__AVR_DEVICE_NAME__)
|
4 | |
5 | const char device_name[] = DEVICE_NAME; |
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.