www.mikrocontroller.net

Forum: Compiler & IDEs Abfrage ob GCC oder AVR-GCC


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich will für ein Programm, dass einmal auf dem PC und einmal auf einem 
ATMega läuft bestimmte Teile im Quellcode gleich halten. Beim PC muss 
ich z.B. ein memcpy beim Atmega ein stattdessen memcpy_p benutzen.

Dafür würde ich beim compilieren gerne unterschen. Irgendwie so in der 
Richtung #ifdef avrgcc dann mach das.

Ich weiss, dass man die Version auf die Art abfragen kann. Ich würde 
aber gerne nur unterscheiden ist es der avr-gcc oder gcc.

Welche Möglichkeiten habe ich?

Die Suchfunktion hat leider nichts ergeben.

Danke für die Info.

Andreas

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du koenntest zum Beispiel schauen, ob F_CPU definiert ist. Das waere 
jetzt das Einfachste, das mir einfaellt...

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

Bewertung
0 lesenswert
nicht lesenswert
Der AVR-GCC definiert einen Makro
__AVR__

Auf dem PC wirst du im Gegenzug typischerweise einen Makro
__i386__
finden.

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine mehr formalisierte Methode wäre es, die autotools zu verwenden.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super danke an alle für die turbomäßig schnellen und guten Antworten.

@Patrick an sowas in der Richtung hatte ich auch schon gedacht. Zwar 
nicht F_CPU sondern irgendetwas was es nur beim avr-gcc gibt

@Jörg Das wird genommen. Auf sowas hatte ich gehofft.

@Guru mit Autotools kenne ich mich nicht aus. Werde ich mir aber mal 
ansehen.

Grüße
Andreas

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob gcc am Werk ist, sieht man am Makro
__GNUC__

Zusammen mit
__GNUC_MINOR__
__GNUC_PATCHLEVEL__

bekommt man auch die gcc-Version raus:

Für avr-gcc 4.7.0 sind diese Makros z.B. definiert zu 4, 7 bzw. 0.

Einen Überblick über alle (internen) Makros verschafft man sich mit
avr-gcc -x c /dev/null -E -dM | sort

Autor: Kai S. (zigzeg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:
> Hallo,
>
> ich will für ein Programm, dass einmal auf dem PC und einmal auf einem
> ATMega läuft bestimmte Teile im Quellcode gleich halten. Beim PC muss
> ich z.B. ein memcpy beim Atmega ein stattdessen memcpy_p benutzen.
>
> Dafür würde ich beim compilieren gerne unterschen. Irgendwie so in der
> Richtung #ifdef avrgcc dann mach das.

Am besten machst DU sowas wie
#ifdef __AVR__
# define memcpy memcpy_p
#endif
statt vieler Fallunterscheidungen ueber den Code verstreut ...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Am besten machst DU sowas wie
>
>#ifdef _AVR_
># define memcpy memcpy_p
>#endif

Wohl besser umgekehrt, da Du vermutlich beim AVR-GCC memcpy sowie auch 
memcpy_p verwenden können willst.

#ifndef AVR
# define memcpy_p memcpy
#endif

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Wohl besser umgekehrt, da Du vermutlich beim AVR-GCC memcpy sowie auch
> memcpy_p verwenden können willst.
>
> #ifndef AVR
> # define memcpy_p memcpy
> #endif

Habe ich gerade so gemacht.

Allerdings komme ich um einige Fallunterscheidungen nicht drumherum. Auf 
dem PC habe ich keinen direkten CAN-Controller auf dem AT90CAN schon. 
Aber werde dafür sorgen, dass es nicht unübersichtlich wird.

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.