Hallo zusammen,
ich bin auf einem STM32 mit dem ARM-GCC. Ich will ein vordefiniertes
Makro mit einem anderen vergleichen. Konkret in etwa so:
1 | #if( INPUT_CLK_GPIO == GPIOA )
|
2 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
|
3 | #else
|
4 | #error "Invalid/non-implemente GPIO for Clock input"
|
5 | #endif
|
Dabei ist definiert:
1 | #define INPUT_CLK_GPIO GPIOA
|
2 | #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
|
3 | #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
|
4 | u.s.w.
|
So funktioniert das nicht. Der Compiler/Präprozessor wirft mir vor:
"error: operator '*' has no right operand". Den Teil verstehe ich schon
einmal nicht. Nach der Präzprozessor-Orgie steht da ja etwas wie:
1 | struct{ ... } * 1234 == struct{ ... } * 1234
|
mit einer garantiert anderen Zahl.
Daher meine zwei (voneinander unabhängigen) Fragen:
a) Wie kann ich dem Präprozessor beibringen, zur prüfen, ob die beiden
Makros (also die Zeiger) äquivalent sind und
b) Wie kommt der Compiler bei diesem Konstrukt von oben auf die
Fehlermeldung?
Viele Grüße
W.T.