Problem mit #define in C

Gast #3810112
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
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 #3810128
Beim gcc kann man nur den Preprozessor laufen lassen. Erzeugt eine 
source.i Datei, wenn ich mich richtig errinnere. Einfach mal schauen, ob 
der STM32F334x8 Teil eingebaut wird.
Gast #3810134
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.