www.mikrocontroller.net

Forum: Compiler & IDEs gcc4 / neue avrlibc


Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht 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:
#if GCC4
 #include <avr/delay.h>
#else
 #include <util/delay.h>
#endif

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

Gruss,
Simon

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs doch noch gefunden ...
gibt jetzt ne <avr/version.h>:
#ifndef _AVR_VERSION_H_
#define _AVR_VERSION_H_

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

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

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

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

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

/** \ingroup avr_version
    Library major version number. */
#define __AVR_LIBC_MAJOR__          1

/** \ingroup avr_version
    Library minor version number. */
#define __AVR_LIBC_MINOR__          4

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

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

Bye, Simon

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schenke mir den ganzen Unter-Include-Schrunz und kopiere bei jeder
neuen WINAVR-Version alles zusammen ins Include.


Peter

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist natürlich auch eine prima Möglichkeit, ein schönes Durcheinander
zu produzieren und ggf. seltsame Bugs zu ernten.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ssss Ssssss (sssssss)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.