mikrocontroller.net

Forum: Compiler & IDEs Präprozessor #if anweisung


Autor: CMM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade eine Bedingte anweisung für verschieden 
Mikrocontroller zu schreiben:

Ich übergebe avr-gcc dazu mit der -D option um welchen Mikrokontroller 
es sich handelt.

avr-gcc -DMCU=atmega16
oder
avr-gcc -DMCU=atmega48

Im Quellcode schreibe ich dann:

#if (MCU == atmega48)
C-Code
#endif


Aber der C-Code wird immer berücksichtigt, egal welchen prozessor ich 
MCU zuweise. Kann mir wer sagen wo der Fehler liegt?

Viele Grüße

CMM

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Vergleichsoperatoren, die für #if etc. zur Verfügung stehen, können 
nur* numerische Ausdrücke auswerten.

Du könntest also mit -DMCU=16

und

#if (MCU == 16)
...
#endif

arbeiten.



*) Soweit ich weiß und die Dokumentation meines C-Compilers richtig 
interpretiere. Will nicht ausschließen, daß ich mich da irre.

Autor: CMM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort,

es funktioniert. Dann lasse ich halt das "atmega" weg :-)

Viele Grüße

CMM

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder so:

avr-gcc -Datmega16
oder
avr-gcc -Datmega48

Im Quellcode schreibe ich dann:

#ifdef atmega48
C-Code
#endif



Peter

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

Bewertung
0 lesenswert
nicht lesenswert
#if defined(__AVR__ATmega16__)
...
#elif defined(__AVR__ATmega48__)
...
#else
#  error Unsupported MCU type
#endif

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
>
> #if defined(__AVR__ATmega16__)
> 

Sehr schön, die Frage ist bloß, wie kriegt man diese Namen raus ?

Gibt es vielleicht einen Compilerschalter, um ein Listfile mit allen 
internen Symbolen zu erzeugen ?



Peter

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

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:

> Sehr schön, die Frage ist bloß, wie kriegt man diese Namen raus?

Durch RTFM:

http://www.nongnu.org/avr-libc/user-manual/using_tools.html

> Gibt es vielleicht einen Compilerschalter, um ein Listfile mit allen
> internen Symbolen zu erzeugen?

gcc -E -dM gibt die Liste aller Makros mit ihren Werten, die sie am
Ende des preprocessing haben, auf stdout aus.  Sollte man sinnvoller-
weise wohl gleich noch duch »sort« pipen.  Wenn du das in einer Datei
haben willst, lenkst du die Ausgabe in eine Datei um.  (Ich pipe es
immer nach »less« und lese es mir gleich am Bildschirm durch.)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:

> gcc -E -dM


Danke, das habe ich schon lange gesucht.


Peter

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.