STM32 - Probleme mit Makefile

Gast #2289596
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
Gast #2289655
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 :-(
Gast #2289769
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.
Gast #2289820
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/
Gast #2289862
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 :-(
Gast #2290827
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.
Gast #2291243
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
Gast #2291521
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.
Gast #2291615
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 :-)

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