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
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.
Danke für die schnelle Antwort, es funktioniert. Dann lasse ich halt das "atmega" weg :-) Viele Grüße CMM
Oder so: avr-gcc -Datmega16 oder avr-gcc -Datmega48 Im Quellcode schreibe ich dann: #ifdef atmega48 C-Code #endif Peter
1 | #if defined(__AVR__ATmega16__)
|
2 | ...
|
3 | #elif defined(__AVR__ATmega48__)
|
4 | ...
|
5 | #else
|
6 | # error Unsupported MCU type
|
7 | #endif
|
Jörg Wunsch wrote:
>
1 | > #if defined(__AVR__ATmega16__) |
2 | >
|
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
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.)
Jörg Wunsch wrote:
> gcc -E -dM
Danke, das habe ich schon lange gesucht.
Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.