gcc4 / neue avrlibc

OP #365034
Lesenswert?
• ▲
▼
Hi!

Ich suche eine möglichkeit einfach per preprozessor #if #else
den gcc4 zu erkennen.
Welche Variable kann ich da abfragen ? Gibts was wie GCC_VERSION ?

Problem ist nämlich das bei der gcc4 bzw neuen avrlibc die
delay.h von avr/delay.h nach util/delay.h gewandert ist.
Ausserdem noch anderer kleinkram ...

Ich suche also sowas wie:
1
#if GCC4
2
 #include <avr/delay.h>
3
#else
4
 #include <util/delay.h>
5
#endif

Geht bestimmt, habs nur bis jetzt nicht per google & co rausfinden
können ::)

Gruss,
Simon
OP #365035
Lesenswert?
• ▲
▼
habs doch noch gefunden ...
gibt jetzt ne <avr/version.h>:
1
#ifndef _AVR_VERSION_H_
2
#define _AVR_VERSION_H_
3

4
/** \ingroup avr_version
5
    String literal representation of the current library version. */
6
#define __AVR_LIBC_VERSION_STRING__ "1.4.4"
7

8
/** \ingroup avr_version
9
    Numerical representation of the current library version.
10

11
    In the numerical representation, the major number is multiplied by
12
    10000, the minor number by 100, and all three parts are then
13
    added.  It is intented to provide a monotonically increasing
14
    numerical value that can easily be used in numerical checks.
15
 */
16
#define __AVR_LIBC_VERSION__        10404UL
17

18
/** \ingroup avr_version
19
    String literal representation of the release date. */
20
#define __AVR_LIBC_DATE_STRING__    "20060420"
21

22
/** \ingroup avr_version
23
    Numerical representation of the release date. */
24
#define __AVR_LIBC_DATE_            20060420UL
25

26
/** \ingroup avr_version
27
    Library major version number. */
28
#define __AVR_LIBC_MAJOR__          1
29

30
/** \ingroup avr_version
31
    Library minor version number. */
32
#define __AVR_LIBC_MINOR__          4
33

34
/** \ingroup avr_version
35
    Library revision number. */
36
#define __AVR_LIBC_REVISION__       4

Das gibt wieder nen netten #ifdef #endif haufen :-X

Bye, Simon
Moderator Persönliche Seite #365038
Lesenswert?
• ▲
▼
Damit du den #if/#else-Haufen nicht brauchst, gibt's doch
extra _AVR_LIBC_VERSION_.  Deren Wert wächst monoton mit
den Versionen, du kannst ihn also mit einem einfachen >
vergleichen.

Außerdem haben wir <avr/version.h> noch von <avr/io.h> mit
includiert, damit es in einem Headerfile auftaucht, was es
garantiert schon früher gab und was sowieso praktisch jeder
bereits benutzt.  Für eine avr-libc-Version < 1.4.x kannst
du also mit

#if _AVR_LIBC_VERSION_ < 10400UL

testen.  (Unbekannte Makros ersetzt der Präprozessor in
mathematischen Ausdrücken durch den Wert 0.  Das ist vom
Standard abgedeckt.)

GCC belegt den Makro _GNUC_ mit seiner major version, also
#if _GNUC_ >= 4 gilt für alles ab GCC 4.x.  Außerdem gibt's
noch _GNUC_MINOR_.

Du solltest natürlich einen sinnvollen Test vornehmen, also
_AVR_LIBC_VERSION_ wenn es um Features der avr-libc geht,
_GNUC_, wenn es um den Compiler selbst geht.
OP #365039
Lesenswert?
• ▲
▼
>Außerdem haben wir <avr/version.h> noch von <avr/io.h> mit
>includiert, damit es in einem Headerfile auftaucht, was es
>garantiert schon früher gab und was sowieso praktisch jeder
>bereits benutzt.  Für eine avr-libc-Version < 1.4.x kannst
>du also mit
Ah super! danke für die Info ;)
Schade dass ich relativ lange gebraucht habe um die mitteilung über die
neue version.h zu finden.
Es wäre evtl hilfreich auf der avr libc seite direkt mit einem
auffälligen
Text darauf hinzuweisen bzw eine faq dazu ;)

>#if _AVR_LIBC_VERSION_ < 10400UL
jepp, genau das benutze ich ;)

gcc4 war quatsch, es ist ja die neue libc :)

Bye, Simon

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.