Forum: Compiler & IDEs STM32 - Probleme mit Makefile


von pegel (Gast)


Lesenswert?

Hallo @all,

ich habe die Toolchain von:

http://fun-tech.se/stm32/OpenOCD/index.php

für den STM32 erfolgreich installiert und alles läuft soweit.

eclipse, gdb und auch das Blinky Beispiel funktionieren.

Als nächstes wollte ich die Standard Peripheral Library v3.5.0 von ST 
einbinden. Dazu bin ich wie hier beschrieben vorgegangen:

http://www.embedds.com/st32mvldiscovery-project-template-for-gcc/

Ganz unten auf der Seite gibt es das Ganze noch mal als zip Datei.

Das Problem kommt schon beim compilieren der main.c in der die includes 
nicht gefunden werden. Im makefile sind meiner Meinung nach alle Pfade 
für -I angegeben. Hab auch schon einiges versucht z.B. volle Pfadangabe, 
prüfen der TAB und Leerzeichen im Makefile usw.
Leider habe ich noch keinen Erfolg dabei gehabt.

Hat schon mal jemand dieses Template-Projekt zum laufen gebracht oder 
vielleicht ein ähnliches?

viele Grüsse

von pegel (Gast)


Lesenswert?

noch vergessen: die .h Dateien und Libraries sind natürlich an der 
richtigen Stelle installiert :-)

von ZiZi. (Gast)


Lesenswert?

Hi Pegel

Und was ist mit  TAB und Leerzeichen in den Pfadnamen?

Nützlich wäre auch gewesen, Du hättest die Fehlermeldungen geliefert.


ZiZi.

von pegel (Gast)


Lesenswert?

Hallo ZiZi,

die neue Fehlermeldung ist:

arm-none-eabi-gcc    -c -o main.o main.c
main.c:22:23: schwerwiegender Fehler: stm32f10x.h: Datei oder 
Verzeichnis nicht gefunden
Kompilierung beendet.
make: *** [main.o] Fehler 1

Neu deswegen weil ich inzwischen die Toolchain von:

http://fun-tech.se/stm32/OpenOCD/index.php

noch einmal mit gcc-4.6.1 und den jeweils neuesten Tools erstellt habe.

Durch ein zusätzliches "make list" lasse ich mir auch die Pfad-Variablen 
ausgeben:

list:
  @echo -e "uincdir **************************************"
  @echo $(UINCDIR)
  @echo -e "incdir ***************************************"
  @echo $(INCDIR)
  ls $(UINCDIR)


Das passt soweit auch. Aber leider bleibt der Fehler :-(

von ZiZi. (Gast)


Lesenswert?

In dieser Zeile:

> arm-none-eabi-gcc    -c -o main.o main.c

fehlen die include-Direktiven (-I Option). Oder woher soll der Compiler
wissen, wo er die Header herholen soll?

In der/den Kommandozeile(n) für den Compiler muss so was wie

arm-none-eabi-gcc -I $(INCDIR)

stehen.

Das von Dir oben angegebene Beispiel von embedds.com hat bei mir 
übrigens out-of-the-box
funktioniert.

OpenOCD steht mit Deinem Prob in keinem Zush..

ZiZi.

von pegel (Gast)


Lesenswert?

ZiZi. schrieb:
> In dieser Zeile:
>
>> arm-none-eabi-gcc    -c -o main.o main.c
>
> fehlen die include-Direktiven (-I Option). Oder woher soll der Compiler
> wissen, wo er die Header herholen soll?

Genau das verstehe ich nicht. Sollte nicht im Makefile Zeile 154 genau 
das gemacht werden?

Das Makefile hier von der Seite ist das aus der zip:
http://www.embedds.com/st32mvldiscovery-project-template-for-gcc/

von pegel (Gast)


Lesenswert?

Ich habe gerade die originale zip Datei noch einmal runtergeladen, 
entpackt und make ausgeführt.
Meldung:

.dep/crt.o.d:1: *** Mehrfache Target-Muster.  Schluss.

hattest Du das auch?

wenn ich dann .dep lösche und make ausführe hab ich wieder den 
vorherigen Fehler :-(

von ZiZi (Gast)


Lesenswert?

Hallo pegel,


>.dep/crt.o.d:1: *** Mehrfache Target-Muster.  Schluss.

Hatte ich jetzt auch.
Inhalt von .dep löschen. das sind dependency Files, die automatisch neu 
generiert werden.
Meine Aussage von gestern bez. "funktioniert out-of-the-box"
muss ich korrigieren. Ich habe auch mit einem anderen template Projekt 
gespielt, bei der 'make' funktioniert hat. Bei einem erneuten
Versuch heute hatte ich die selben Probleme Wie Du.

Und dass stm32f10x.h nicht gefunden wird, liegt an
einem Gross-/Kleinschreibungsproblem in
STM32vldiscovery.h (Zeile 30), wo STM32f10x.h inkludiert wird
(statt stm32f10x.h).

Spielt bei einem Wind*ws Filesystem i.d.R keine Rolle.
Unix Filesysteme sind aber case-sensitiv.
Offensichtlich benutzt Du Linux.

HDH,

ZiZi.

von pegel (Gast)


Lesenswert?

Hallo ZiZi,

es freut mich das Du noch dabei bist ;-)

Du hast Recht, ich nutze Linux für die Toolchain. Hab auch gleich 
probiert das include in der STM32vldiscovery.h zu korrigieren was aber 
leider noch nicht den Erfolg brachte. Darauf hin habe ich alle Dateien 
auf ähnliche Probleme untersucht aber keine weiteren 
Groß/Kleinschreibungs Fehler gefunden.
Weiterhin habe ich auch noch ein anderes Template gefunden:
http://www.micromouseonline.com/blog/2009/10/19/another-stm32-project-template
und siehe da es funktioniert! Dann kann ich schon mal ausschließen das 
das Problem in meiner Toolchain liegt. Da Du mir den Fehler bestätigt 
hast, werde ich als nächstes mal versuchen die beiden Makefile zu 
vergleichen. Ich bin immer noch der Meinung das da der Fehler liegt.

MfG pegel

von pegel (Gast)


Lesenswert?

Trotz weiterer Fehlermeldungen bin ich jetzt einen Schritt weiter.
http://www.embedds.com/st32mvldiscovery-project-template-for-gcc/

im Makefile Zeilen: 154 157 160 163
fehlen jeweils nach dem % der .
z.B.: aus
%o : %c
wird
%.o : %.c
usw.

von pegel (Gast)


Lesenswert?

Geschafft!
Das war das Problem. Die Warnungen ergaben sich auch dem Parameter:
-Wstrict-prototype

Ist jetzt auch gelöst.

Dank an ZiZi

von ZiZi (Gast)


Lesenswert?

Hallo Pegel,

>im Makefile Zeilen: 154 157 160 163
>fehlen jeweils nach dem % der .
>z.B.: aus
>%o : %c
>wird
>%.o : %.c
>usw.

Das war bei mir  nicht notwendig.

rm -rf .dep/ und
STM32 > stm32x  in Libraries/Utilities/STM32vldiscovery.h

war bei mir alles. Der build läuft ohne jegliche Warnungen durch.

Compiler:

$ arm-none-eabi-gcc -v

Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/local/arm-2011.03/bin/../libexec/gcc/arm-none-e 
abi/4.5.2/lto-wrapper
Target: arm-none-eabi
Configured with: 
/scratch/janisjo/arm-eabi-lite/src/gcc-4.5-2011.03/configure 
--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu 
--target=arm-none-eabi --enable-threads --disable-libmudflap 
--disable-libssp --disable-libstdcxx-pch 
--enable-extra-sgxxlite-multilibs --with-gnu-as --with-gnu-ld 
--with-specs='%{save-temps: -fverbose-asm} -D__CS_SOURCERYGXX_MAJ__=2011 
-D__CS_SOURCERYGXX_MIN__=3 -D__CS_SOURCERYGXX_REV__=42 
%{O2:%{!fno-remove-local-statics: -fremove-local-statics}} 
%{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: 
-fremove-local-statics}}}' --enable-languages=c,c++ --disable-shared 
--enable-lto --with-newlib --with-pkgversion='Sourcery G++ Lite 
2011.03-42' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ 
--disable-nls --prefix=/opt/codesourcery --with-headers=yes 
--with-sysroot=/opt/codesourcery/arm-none-eabi 
--with-build-sysroot=/scratch/janisjo/arm-eabi-lite/install/arm-none-eab 
i 
--with-gmp=/scratch/janisjo/arm-eabi-lite/obj/host-libs-2011.03-42-arm-n 
one-eabi-i686-pc-linux-gnu/usr 
--with-mpfr=/scratch/janisjo/arm-eabi-lite/obj/host-libs-2011.03-42-arm- 
none-eabi-i686-pc-linux-gnu/usr 
--with-mpc=/scratch/janisjo/arm-eabi-lite/obj/host-libs-2011.03-42-arm-n 
one-eabi-i686-pc-linux-gnu/usr 
--with-ppl=/scratch/janisjo/arm-eabi-lite/obj/host-libs-2011.03-42-arm-n 
one-eabi-i686-pc-linux-gnu/usr  --with-host-libstdcxx='-static-libgcc 
-Wl,-Bstatic,-lstdc++,-Bdynamic -lm' 
--with-cloog=/scratch/janisjo/arm-eabi-lite/obj/host-libs-2011.03-42-arm 
-none-eabi-i686-pc-linux-gnu/usr 
--with-libelf=/scratch/janisjo/arm-eabi-lite/obj/host-libs-2011.03-42-ar 
m-none-eabi-i686-pc-linux-gnu/usr  --disable-libgomp 
--enable-poison-system-directories 
--with-build-time-tools=/scratch/janisjo/arm-eabi-lite/install/arm-none- 
eabi/bin 
--with-build-time-tools=/scratch/janisjo/arm-eabi-lite/install/arm-none- 
eabi/bin
Thread model: single
gcc version 4.5.2 (Sourcery G++ Lite 2011.03-42)


(Der "." in Filenamen hat bei Unix Systemen keine spezielle Bedeutung,
er ist ein Zeichen wie jedes andere).

ZiZi.

von pegel (Gast)


Lesenswert?

ZiZi schrieb:
> Das war bei mir  nicht notwendig.

Eigenartig. Bei mit geht es nicht ohne.
Aber hauptsache es läuft jetzt.
Ich habe auch auf der original Seite einen Kommentar hinterlassen.

Meine arm-none-eabi-gcc -v Ausgabe fällt etwas bescheidener aus:

# arm-none-eabi-gcc -v
Es werden eingebaute Spezifikationen verwendet.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/daten/programme/stm32-gcc-4.6.1/libexec/gcc/arm-non 
e-eabi/4.6.1/lto-wrapper
Ziel: arm-none-eabi
Konfiguriert mit: ../configure --target=arm-none-eabi 
--prefix=/daten/programme/stm32-gcc-4.6.1 --enable-interwork 
--enable-multilib --enable-languages=c,c++ --with-newlib 
--without-headers --disable-shared --with-gnu-as --with-float=soft 
--with-cpu=cortex-m3 --with-tune=cortex-m3 --with-mode=thumb 
--disable-libssp --with-gnu-ld
Thread-Modell: single
gcc-Version 4.6.1 (GCC)


Jetzt kann die eigentliche Lernphase mit dem STM32 beginnen :-)

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.