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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren