Forum: PC Hard- und Software GCC und Code::Blocks, Präprozessor defekt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tommi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich habe ein Problem mit Code::Blocks und dem GCC für den STM32. Und 
zwar scheint es als ob der Präprozessor nicht aufgerufen wird. Im 
ASM-Startup-Script gibt es dann eine Fehlermeldung, dass ein Label 
doppelt initialisiert wird, weil offensichtlich beide Teile des 
Präprozessor-#if-Blockes ausgewertet werden (Code-Fragment siehe unten). 
Ich habe dann den #else-Zweig einfach rausgeschmissen, habe dann aber 
über Compilerwarnungen festgestellt, dass auch im C-Code einer 
Bibliothek merkwürdige Dinge passieren, mit Warnungen in #ifdef-Blöcken, 
die im Editor ausgegraut sind, also gar nicht kompiliert werden sollten. 
Das Kompilieren hat aber funktioniert. Mein Verdacht ist nun, dass der 
Compiler ohne vorigen Aufruf des Präprozessors durchläuft oder zumindest 
nur mit reduzierter Funktionalität.
Aber kann das überhaupt sein?
-> Gibt es irgendwelche Einstellungen die man machen muss, oder gibt es 
Kommandos (die bei mir evtl. gesetzt sind), um den Präprozessor 
einzuschränken?

Den ARM-GCC-Compiler habe ich für Code:Blocks selbst eingerichtet und da 
kann natürlich etwas falsch sein.

Code::Blocks deshalb um später den Chip-Hersteller wechseln zu können, 
ohne eine neue IDE zu benötigen, aber das nur am Rande.
1
#if 1
2
 [...]
3
.flash_to_ram_loop:
4
 [...]
5
#else
6
 [...]
7
.flash_to_ram_loop:
8
 [...]
9
#endif

Fehlermeldung: startup_stm32f10x_md.s|166|Error: symbol 
`.flash_to_ram_loop' is already defined|

von Tommi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Wenn ich die Startup-Datei in der Konsole kompiliere, kommt die gleiche 
Fehlermeldung.
1
>arm-none-eabi-gcc.exe -mcpu=cortex-m3 -c startup_stm32f10x_md.s -o startup_stm32f10x_md.o
1
startup_stm32f10x_md.s: Assembler messages:
2
startup_stm32f10x_md.s:167: Error: symbol `.flash_to_ram_loop' is already defined

von foobar (Gast)


Bewertung
2 lesenswert
nicht lesenswert
".s" ist Assembler direkt, ".S" oder ".sx" ist Assembler mit 
Preprozessor.

von Tommi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Super, habs grad mal probiert, der Startup-Sript läuft jetzt durch! 
Danke!

Gibt es sowas auch bei C-Dateien?

von Tommi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
OK, die Ausgrauung im C-Code scheint nur ein Problem in der IDE zu sein, 
das Define wird beim Kompilieren richtig verwendet.

Das Problem ist damit soweit gelöst. Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.