__PART_NAME__ in AtmelStudio 7 und C

Gast #4659438
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 !
Gast #4659575
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
Gast #4659610
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.
Persönliche Seite #4660234
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;

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.