Problem mit #define in C

Gast #3810112
Lesenswert?

Hallo C-Experten :)

Beim einbinden der Standard Peripherals Library für einen STM32F3 
Controller in meine GCC-Compiler Umgebung habe ich folgendes Problem. 
DIE IDE setzt für diesen Compilertyp noch die Präprozessor-Definition 
'STM32F30X', die aktuelle Library erwartet aber 'STM32F303xC'. Soweit 
kein Problem, denn in der Datei 'stm32f30x.h' ist folgendes enthalten:
1
#if defined(STM32F30X) 
2
  #define STM32F303xC
3
#endif
Allerdings tritt dann in der gleichen Datei weiter unten an folgender 
Stelle ein Compiler-Fehler auf:
1
typedef enum IRQn
2
{
3
  NonMaskableInt_IRQn         = -14,
4
  ...
5
  #ifdef STM32F303xC 
6
  WWDG_IRQn                   = 0,
7
  ...
8
  FPU_IRQn                    = 81
9
  #endif /* STM32F303xC */
10
  #ifdef STM32F334x8 
11
  WWDG_IRQn                   = 0,  //expected ',' or '}' before 'WWDG_IRQn'
12
  ...
13
} IRQn_Type;
Füge ich händisch die Präprozessor-Definition 'STM32F303xC' hinzu, so 
tritt der Fehler nicht auf, allerdings an allen möglichen Stellen 
'"STM32F303xC" redefined [enabled by default]'.

Woher kommt das Verhalten, dass sich die beiden genannten Fälle 
unterscheiden und wie könnte ich es hinkriegen, dass der Compilerfehler 
mit der Definition aus der Datei nicht auftritt?

Vielen Dank für Antworten,

Florian
Gast #3810118
Lesenswert?

Doch, prinzipiell ist das schon das letzte Element, denn wenn er in 
'#ifdef STM32F303xC' reinspringt, dann sollte er in keines der darauf 
folgenden ifdefs mehr reinspringen. Der Code ist korrekt, so denke ich, 
da er von STMicro direkt stammt. Das verwirrende ist ja, dass der Code 
kompiliert wenn ich das #Define in den Präprozessor-Direktiven setze, 
aber nicht mehr wenn das #define in der Quellcode-Datei geschieht. Und 
zwar in der gleichen Datei, wo der Fehler auftritt.
Gast #3810134
Lesenswert?

A. K. schrieb:
> Vmtl ist STM32F334x8 ebenfalls definiert.

Danke, dass ich da nicht drauf gekommen bin. Ganz oben im File steht 
(gekürzt):
1
#if !defined (STM32F303xC) && !defined (STM32F334x8) && ...
2
 /* #define STM32F303xC */  
3
 #define STM32F334x8    
4
 /* #define STM32F302x8 */ 
5
#endif

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren