Forum: Compiler & IDEs ARM STM32F4xx, CodeSourcery, Eclipse: Include-Problem


von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Hallo!

obwohl für uns die AVRs im Moment locker ausreichen, möchte ich mich 
nebenbei in die ARM-Welt einarbeiten. Man weiss ja nie, was das nächste 
Projekt für Anforderungen stellt und ich möchte dann vorbereitet sein. 
Außerdem gefällt es mir nicht, von einem Chiphersteller abhängig zu sein 
...

Also habe ich mir nun für erste Tests das STM32F4xx-Discovery-Kit 
bestellt und nach 
http://www.mikrocontroller.net/articles/STM32F4-Discovery
Eclipse mit CDT und ARM-Plugin sowie die CodeSourcery Werkzeugkette und 
stlink installiert (unter Debian).

Nun wollte ich heute morgen das LED-Blink-Beispiel aus dem Tutorial 
übersetzen, aber der Compiler weigert sich standhaft, die Quelltexte der 
STM32-Standardbibliothek zu übersetzen.

In der stm32f4xx.h findet sich ja Folgendes,

#ifdef USE_STDPERIPH_DRIVER
  #include "stm32f4xx_conf.h"
#endif /* USE_STDPERIPH_DRIVER */

um die von mir freigegebenen Header-Dateien einzubinden.

Das Problem: er weigert sich standhaft, meine stm32f4xx_conf.h zu 
finden, obwohl sich diese im Projektverzeichnis befindet.
Ich habe nun sogar schon mit -iquote das Projektverzeichnis explizit 
angegeben (sollte ja eigentlich nicht nötig sein, oder?), aber keine 
Chance:

arm-none-eabi-gcc -DUSE_STDPERIPH_DRIVER -DUSE_STM32F4_DISCOVERY 
-DSTM32F4XX -DHSE_VALUE=8000000 
-I/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/In 
clude 
-I/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/De 
vice/ST/STM32F4xx/Include 
-I/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/STM32F4x 
x_StdPeriph_Driver/inc  -I"/home/jogger/eclipse-workspace/Testprojekt" 
-O0 -Wall -Wa,-adhlns="StdPeriph/stm32f4xx_adc.o.lst" -c 
-fmessage-length=0 -iquote /home/jogger/eclipse-workspace/Testprojekt 
-MMD -MP -MF"StdPeriph/stm32f4xx_adc.d" -MT"StdPeriph/stm32f4xx_adc.d" 
-mcpu=cortex-m4 -mthumb -g3 -gdwarf-2 -o "StdPeriph/stm32f4xx_adc.o" 
"/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/STM32F4xx 
_StdPeriph_Driver/src/stm32f4xx_adc.c"

In file included from 
/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/STM32F4xx_ 
StdPeriph_Driver/inc/stm32f4xx_adc.h:38:0,
                 from 
/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/STM32F4xx_ 
StdPeriph_Driver/src/stm32f4xx_adc.c:104:
/usr/local/stm32/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/Libraries/CMSIS/Devi 
ce/ST/STM32F4xx/Include/stm32f4xx.h:6968:30:  fatal error: 
stm32f4xx_conf.h: No such file or directory
compilation terminated.

Irgendwie habe ich wohl Tomaten auf den Augen, denn das ist ja 
eigentlich ein lösbares Problem - dachte ich zumindest bisher ;-)

Wo liegt mein Fehler?

Chris D.

von Roland H. (batchman)


Lesenswert?

Chris D. schrieb:
> Das Problem: er weigert sich standhaft, meine stm32f4xx_conf.h zu
> finden, obwohl sich diese im Projektverzeichnis befindet.

In welchem Verzeichnis liegt die Datei? Was sag "ls -l" in diesem 
Verzeichnis? Groß-/Kleinschreibung?

Chris D. schrieb:
> -I"/home/jogger/eclipse-workspace/Testprojekt"

Probiere mal
1
-I /home/jogger/eclipse-workspace/Testprojekt

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Roland H. schrieb:
> Chris D. schrieb:
>> Das Problem: er weigert sich standhaft, meine stm32f4xx_conf.h zu
>> finden, obwohl sich diese im Projektverzeichnis befindet.
>
> In welchem Verzeichnis liegt die Datei? Was sag "ls -l" in diesem
> Verzeichnis? Groß-/Kleinschreibung?

Welche Datei? Die stm32f4xx_conf.h liegt im aktuellen 
Projektverzeichnis:

jogger@fantast:~/eclipse-workspace/Testprojekt> ls -l
drwxr-xr-x 3 jogger jogger  4096 Jun  9 11:13 Debug
-rw-r--r-- 1 jogger jogger  1402 Jun  8 14:55 main.c
-rw-r--r-- 1 jogger jogger 24159 Jun  8 13:38 startup_stm32f4xx.S
-rw-r--r-- 1 jogger jogger  1229 Jun  8 13:15 stm32f4xx_conf.h
-rw-r--r-- 1 jogger jogger  5033 Jun  8 13:34 stm32_flash.ld
-rw-r--r-- 1 jogger jogger 21856 Jun  8 13:35 system_stm32f4xx.c

In diesem Verzeichnis wird der Befehl auch ausgeführt.

Groß- und Kleinschreibung habe ich auch schon geprüft. Das kann aber 
eigentlich auch nicht das Problem sein, da ich die Include-Verzeichnisse 
in Eclipse per Datei-Dialog zusammengeklickt habe.

> Chris D. schrieb:
>> -I"/home/jogger/eclipse-workspace/Testprojekt"
>
> Probiere mal
>
>
1
> -I /home/jogger/eclipse-workspace/Testprojekt
2
>
Das hat erwartungsgemäß leider nichts geändert :-/

Gibt es vielleicht irgendwelche Konfigurationsdateien für den 
arm-none-eabi-gcc, die dazwischenfunken? Aber eigentlich sollte man ja 
eh per -I alle Voreinstellungen überschreiben können.

Chris D.

von Roland H. (batchman)


Lesenswert?

Bist Du sicher, dass in Deinem obigen Ausschnitt alle Parameter durch 
ein Leerzeichen getrennt sind?
Hänge doch mal das Makefile an.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Roland H. schrieb:
> Bist Du sicher, dass in Deinem obigen Ausschnitt alle Parameter durch
> ein Leerzeichen getrennt sind?

Ja, ziemlich - ich habe den Befehl eben nochmal Stück für Stück 
zusammengesetzt - nix :-(

> Hänge doch mal das Makefile an.

Ich bin bei Eclipse ziemlicher Neuling. Da die Makefiles automatisch 
generiert werden, vermute ich mal, dass sie sich alle im 
Debug-Verzeichnis befinden. Ich habe das mal gezippt angehängt.

Auf den ersten Blick sehe ich da nichts gravierend Falsches - Sources 
passen, Objektdateien auch ...

Ich muss zugeben: ich bin ziemlich ratlos

Chris D.

von Matthias K. (matthiask)


Lesenswert?

HSE_VALUE=8000000
STM32F4XX
USE_STDPERIPH_DRIVER
USE_STM32F4_DISCOVERY
STM32F407VG

In der CoIDE mache ich diese globalen Symbole bekannt.

von Jean P. (fubu1000)


Lesenswert?

Hi,
Das vergnügen mit einrichten von Eclipse für ARM habe ich auch schon 
hinter mir.
wenn es für Windoof 64bit sein dürfte, könnte ich Dir die ganze Arbeit 
ersparen und ne fertige Eclipse Lösung bieten.
Dann müsstest du lediglich, den µC-Typ, HSE_VALUE, StartUp-File und 
linker script anpassen.
Wenn du willst, schicke ich Dir die IDE?!?
Gruß

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Hallo Jens,

danke für das Angebot, aber wir haben hier nur Linux (und WinXP 32-Bit 
in einer VBox).

Klar, das Einrichten dauert etwas, aber: prinzipiell sehe ich in der 
Befehlsausgabe des Makefiles auch keinen Fehler - Eclipse scheint also 
das zu machen, was es soll: Include-Pfade stimmen, Sourcen scheinen zu 
stimmen, Aufruf stimmt - nur diese simple Header-Datei im selben 
Verzeichnis wird vom Compiler offenbar nicht erkannt.

Chris D.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Arggghh ...

Ich hab den Fehler gefunden.

Ich hatte mir gedacht: "Verdammtnochmal, dann setzt Du das jetzt mal 
direkt in die Headerdatei der StdLibrary ein:

#ifdef USE_STDPERIPH_DRIVER
  #include "/home/jogger/eclipse-workspace/Testprojekt/stm32f4xx_conf.h"
#endif /* USE_STDPERIPH_DRIVER */

Ergebnis wieder:

fatal error: 
/home/jogger/eclipse-workspace/Testprojekt/stm32f4xx_conf.h: No such 
file or directory
compilation terminated.

Gedacht: "DAS ... KANN ... NICHT ... SEIN!"

Also habe ich versucht, den Dateinamen einfach mal mit "ls -al ... " 
anzeigen zu lassen - und wie man das in der Kommandozeile der Bash so 
macht, mit Tab-Pfadergänzung.

Das Ergebnis sieht man im angehängten Screenshot! (mein "NEIIIIIN!" 
glücklicherweise nicht ;-)

Offenbar waren hinter dem sichtbaren Dateinamen "stm32f4xx_conf.h" noch
zwei Leerzeichen, die mit dem normalen "ls -al" nicht auffallen ...

Dateinamen korrigiert ... Compilation läuft wunderbar durch

Ich hatte schon viel, aber DAS hatte ich auch noch nie.

Wahrscheinlich hatte ich mit der Maus etwas in der Bash markiert und die 
Leerzeichen dann mitgenommen.

Was gibt es doch für Scheißfehler ... :-}

Schönes WE noch :-)

Chris D.

von tthu (Gast)


Lesenswert?

Hatte gerade den selben Fehler. Bei mir lags daran dass die libs im 
Ordner "STM32 libraries" abgelegt waren. Offenbar mag der compiler auch 
keine Leerzeichen im Pfad.

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
Noch kein Account? Hier anmelden.