Forum: Compiler & IDEs __PART_NAME__ in AtmelStudio 7 und C


von Marcel P. (souko)


Lesenswert?

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 !

von Frickelfritze (Gast)


Lesenswert?

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

von Marcel P. (souko)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.