Forum: Compiler & IDEs "defined (__AVR_ATtiny85__)" oder "defined (__ATtiny85__)"


von Jörg E. (jackfritt)


Lesenswert?

Gibt es eine Möglichkeit das beide erkannt werden ?
Eventuell durch ein include ?

Ich habe nämlich "altmüll" code gefunden wo noch
(_ATtiny85_) drin steht.

Ich wollte nich alle von Hand(oder per Script) ändern.

Thx,

Jörg

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg Esser schrieb:

> Ich habe nämlich "altmüll" code gefunden wo noch
> (_ATtiny85_) drin steht.

AVR-GCC hat dies noch nie generiert, aber vielleicht soll der Code
ja auch für andere Compiler benutzbar sein?  Ich glaube, IAR generiert
entsprechende #define-Werte ohne "AVR_" drin.

von Peter II (Gast)


Lesenswert?

1
#ifdef __AVR_ATtiny85__
2
   #ifndef _ATtiny85_
3
   #define _ATtiny85_
4
   #endif
5
#endif

von Simon K. (simon) Benutzerseite


Lesenswert?

Peter II schrieb:
>
1
> #ifdef __AVR_ATtiny85__
2
>    #ifndef _ATtiny85_
3
>    #define _ATtiny85_
4
>    #endif
5
> #endif
6
>

Aufpassen. Die Rauten müssen bei Präprozessorbefehlen immer das erste
Zeichen in der Zeile sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Simon K. schrieb:

> Aufpassen. Die Rauten müssen bei Präprozessorbefehlen immer das erste
> Zeichen in der Zeile sein.

Nein, schon lange nicht mehr.  Es ist lediglich gefordert, dass
davor höchstens white space steht.

Aber aufpassen an anderer Stelle: Makros, die mit zwei Unterstrichen
beginnen, sind reservierte Bezeichner.  Wenn schon also:
1
#if defined(__AVR_ATtiny85__)
2
#  define IS_ATTINY85
3
#elif defined(__ATtiny85__)
4
#  define IS_ATTINY85
5
#else
6
#  error "Unknown MCU type"
7
#endif
8
9
...
10
11
#ifdef IS_ATTINY85
12
...
13
#endif

von Stefan E. (sternst)


Lesenswert?

Jörg Wunsch schrieb:
> Wenn schon also:

Ich glaube, du hast den OP vielleicht missverstanden. Ich denke er will 
die "andere Richtung" haben, also das _ATtiny85_ nicht zusätzlich 
erkennen, sondern zusätzlich generieren, weil im Code solche Abfragen
1
#ifdef defined(__ATtiny85__)
vorhanden sind, und er die nicht ändern will.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan Ernst schrieb:
> sondern zusätzlich generieren

Genau das ist aber nicht gestattet, weil es sich bei
1
__ATtiny85__

um einen reservierten Namen handelt.

von Jörg E. (jackfritt)


Lesenswert?

Um es nochmal genauer zu erklären.
Ich denke es gibt von Atmel noch mehr Codeschnipsel die alle mit
so Makros wie #ifdef defined(_ATtiny85_) anfangen weil sie eventuell 
an IAR zugeschnitten sind?

Es wäre toll so eine #include Datei zu haben die
aus Makros wie obigem besteht.
1
#if defined(__AVR_ATtiny85__)
2
#  define IS_ATTINY85
3
#elif defined(__ATtiny85__)
4
#  define IS_ATTINY85
5
#else
6
#  error "Unknown MCU type"
7
#endif
8
9
...
10
11
#ifdef IS_ATTINY85
12
...
13
#endif

Könnte doch grundsätzlich klappen oder?

Ob das was für die Profis, ist ist eine andere Frage ;)

oh ich glaube da gibs was von atmel ?
http://www.ece.cmu.edu/~ece549/spring08/team6/healthnet/avr/rdk230wpan-1.5/src/inc/mcu_types.h

Gruss,

Jörg

von Jörg E. (jackfritt)


Lesenswert?

So nochmal genauer gekuckt und festgestellt das es in der Datei
mcu_types.h genau anders herum sein müsste also so:
1
#if defined(__AVR_ATtiny85__)
2
#  define  __ATtiny85__    (__ATtiny85__)
3
#endif

Gruss,

Jörg

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg Esser schrieb:
> Ich denke es gibt von Atmel noch mehr Codeschnipsel die alle mit
> so Makros wie #ifdef defined(ATtiny85) anfangen weil sie eventuell
> an IAR zugeschnitten sind?

Ja, nicht unwahrscheinlich.  Atmel war sehr lange Zeit komplett auf
IAR fixiert bezüglich AVR-Beispielcode.

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.