Hallo Leute, ich hab mal eine Frage zum präprozessor in Zusammenhang mit AVR-Studio. Ich würde gerne bestimmte #define-Anweisungen Prozessorabhängig setzen, also z.B. #if MCU_Typ = "mega8" #define MeinPin 5 #else #define MeinPin 3 #endif Nun stellt man ja im AVR-Studio einen Prozessortypen ein, aber wie heißt das passende #define dazu (damit ich den porzessor nciht nochmal extra in meinem Quelltext definieren muß), und muß ich mega8 in Anführungszeichen setzen? Wahrscheinlich bin ich nur wieder zu blind.. :-)
CAnfänger wrote: > #if MCU_Typ = "mega8" > #define MeinPin 5 > #else > #define MeinPin 3 > #endif > > Nun stellt man ja im AVR-Studio einen Prozessortypen ein, aber wie heißt > das passende #define dazu (damit ich den porzessor nciht nochmal extra > in meinem Quelltext definieren muß), und muß ich mega8 in > Anführungszeichen setzen? mit #if kannst du nur integer vergleichen, z.B.:
1 | #if MAX < 1000
|
2 | #define MIN 100
|
3 | #else
|
4 | #define MIN 200
|
5 | #endif
|
In deinem Fall brauchst du sowas:
1 | #ifdef MCU_TYP_MEGA8
|
2 | #define MeinPin 5
|
3 | #else
|
4 | #define MeinPin 3
|
5 | #endif
|
oder so
1 | #define TYP_MEGA8 8
|
2 | #define TYP_MEGA16 16
|
3 | |
4 | #define MCU_TYP TYP_MEGA8
|
5 | |
6 | ...
|
7 | |
8 | #if MCU_TYP == MEGA8
|
9 | #define MeinPin 5
|
10 | #else
|
11 | #define MeinPin 3
|
12 | #endif
|
MFG :-)
ok, soweit hab ich es erstmal verstanden.. Ich meinte eben, ob man auf die Einstellung im AVR-Studio zugreifen kann, also ob es schon ein fertiges #define für den Prozessortyp gibt - denn beim compilieren steht ja da auch eine Option "-mmcu=atmega8", weil man das in der Umgebung so eingestellt hat.. Also anders gefragt - muß ich MCU_TYP_MEGA8 aus dem o.g. Beispiel selbst definieren oder ist das immer definiert, d.h kann ich auf etwas prozessorspezifisch vordefiniertes zurückgreifen, wie z.B. auf die Registernamen?
1 | #ifdef __AVR__ATmega8__
|
2 | ...
|
3 | #elif defined(__AVR__ATmega88__)
|
4 | ...
|
5 | #else
|
6 | # error "Unknown MCU type."
|
7 | #endif
|
Ja, sowas meinte ich.. Und wo sehe ich, welcher Controller welches define hat? gibt es da ein Liste irgendwo?
@Jörg Wunsch :-) Mit dem einen Unterstrich mehr wolltest Du mich wohl aufs Glatteis führen?
Aber nach dem dritten AVR ist das Schema sowieso klar, und du musst nicht mehr nachgucken. Die Liste aller Präprozessor-Makros erhält man übrigens mit:
1 | touch foo.c |
2 | avr-gcc -mmcu=atmega8 -dM -E foo.c | sort |
3 | rm -f foo.c |
> Mit dem einen Unterstrich mehr wolltest Du mich wohl aufs Glatteis > führen? Sorry, Flüchtigkeitsfehler.
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.