Hallo zusammen!
Habe auf meinem Rechner mit Ubuntu 12.04LTS die toolchain für den
STM32F407 gemäß
http://www.mikrocontroller.net/articles/STM32F4-Discovery installiert,
hat auch alles gut geklappt. Jetzt versuche ich das Beispiel zu
kompilieren, leider hängt der Compiler bei einer der peripheral
libraries:
1
Building file: /opt/STM32F4xx_DSP_StdPeriph_Lib_V1.2.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c
2
Invoking: ARM Linux GCC C Compiler (Sourcery Lite Bare)
/opt/STM32F4xx_DSP_StdPeriph_Lib_V1.2.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c:138:5: error: 'FMC_Bank1' undeclared (first use in this function)
13
Building file: /opt/STM32F4xx_DSP_StdPeriph_Lib_V1.2.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma2d.c
14
/opt/STM32F4xx_DSP_StdPeriph_Lib_V1.2.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c:138:5: note: each undeclared identifier is reported only once for each function it appears in
15
Invoking: ARM Linux GCC C Compiler (Sourcery Lite Bare)
16
/opt/STM32F4xx_DSP_StdPeriph_Lib_V1.2.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fmc.c:146:3: error: 'FMC_Bank1E' undeclared (first use in this function)
Da klappt irgendwas mit stm32f4xx_fmc.c nicht, gibt eine lange
Fehlerliste... aber die angeblich undefinierten variablen sind alle in
stm32f4xx.h definiert, der compiler findet die aber irgendwie nicht...
Im Preprocessor ist der richtige Typ (-DSTM32F40_41xxx) definiert denke
ich, oder?
Wer kann mir da helfen? Sollte mein erstes Projekt mit dem STM32F4
werden, aber schon ueber 200 errors ohne ueberhaupt eine Zeile
geschrieben zu haben...
Danke!
Jan
Immer wieder das Gleiche.
Tja, ich kann nur sagen, daß ich mit Windows arbeite und mir für ein
Projekt eine Batchdatei schreibe, wo Compiler, Assembler, Linker usw. zu
Fuß aufgerufen werden. Wenn man das einmal zelebriert hat, klappt das
immer und zuverlässig und man ist einen Sack voll Probleme los, die mit
Makefiles, IDE's usw. daherkommen. Bei dir wäre das ein Shell-Script -
und sowas hat man als Linuxer bittesehr zu können.
Vielleicht hapert's bei dir nur an irgendiner Case-Sensitivität oder
daran, daß irgendeine Datei formell 'root' gehört oder mit dem elenden
Link-Gewirre bei Linux der Compiler in's Leere oder ganz woandershin
greift, wer soll das aus der Entfernung denn wissen?
Mein Rat, lade dir hier aus der Codesammlung mal die Lernbetty herunter
und versuche die bei dir zu übersetzen. Wenn das klappt, dann findest du
auch die Haken bei deinem Demo-Projekt.
W.S.
Dann wird entweder stm32f4xx.h nicht includiert oder ein #ifdef ist im
Weg.
Wenn ich bei so was gar nicht mehr weiterkomme dann streue ich zum Test
#error in die Header ein um zu sehen was überhaupt ausgewertet wird.
Bei meinen stm32-Projekten mit gcc unter Linux habe ich immer ein
CFLAGS += -include stm32f4xx_conf.h
im Makefile. Das sorgt dafür das immer alle relevanten Header da sind.
Jaja, mit genug Erfahrung im Kreuz hat man ne ziemliche Anzahl von
Tricks bei der Hand, um herauszufinden, wo es nicht läuft. Aber der Jan
steht noch ganz am Anfang.
Nebenbei gesagt, würde ich mit dem Entwickeln unter Linux erst garnicht
anfangen, sondern mir notfalls nen Zweit-PC mit Windows zulegen und dort
entweder die Keil-Demo oder die IAR-Demo installieren. Meine Erfahrung
mit dem GCC, präziser mit dem ARM-GCC sind miserabel, dort lauern noch
viel häßlichere Fallstricke, die man nur per Reassembler herauskriegt,
siehe 'exportierte labels in thumb code'.
W.S.
@Jan
Klopp die STM32F4xx_DSP_StdPeriph_Lib_V1.2.0
in die Tonne und nimm eine ältere Version.
Alternativ: Hör nicht auf den Schwätzer W.S.
Lösch die stm32f4xx_fmc.c einfach, benne sie um so das sie beim
compilieren nicht verwendet wird oder wenn du Eclipse
benutzt Date anklicken, rechte Maustaste:
Resource Configurations-> Exclude from Build und dann
Select All anklicken.
Korrektur (scheiß Laptop Tastatur)
Lösch die stm32f4xx_fmc.c einfach, benenne sie um so das sie beim
compilieren nicht verwendet wird oder wenn du Eclipse
benutzt Datei anklicken, rechte Maustaste:
usw.
Jan schrieb:> Ein Fehler ist "'FSMC_Bank1' undeclared (first use in this function)
Bitte die ERSTEN Fehlermeldungen posten, nicht die Folgefehler. Dein
genannter Fehler ist etwas unwahrscheinlich. Das #define muss außerdem
-DSTM32F4XX sein und nicht -DSTM32F40_41xxx - zumindest bei den mir
bekannten StdPeripheral Library Versionen.
W.S. schrieb:> Projekt eine Batchdatei schreibe, wo Compiler, Assembler, Linker usw. zu> Fuß aufgerufen werden
Und wenn du ein großes Projekt hast wartest du jedes Mal brav eine halbe
Stunde bis alles compiliert ist? Ne, besser gleich richtig mit
makefiles.
W.S. schrieb:> die mit> Makefiles, IDE's usw. daherkommen. Bei dir wäre das ein Shell-Script -> und sowas hat man als Linuxer bittesehr zu können.
Ein makefile ist ein Shellscript mit extra-Intelligenz, die diverse
Probleme löst. Bei den IDE-Problemen kann ich dir allerdings zustimmen
(dass das noch passiert).
W.S. schrieb:> Vielleicht hapert's bei dir nur an irgendiner Case-Sensitivität
Nö, nicht bei der StdPeripheral (unter Windows kanns genausogut an der
Case-Insensitivität hapern)
> oder> daran, daß irgendeine Datei formell 'root' gehört
Nope, das gäbe andere Fehler
> oder mit dem elenden> Link-Gewirre bei Linux der Compiler in's Leere
Windows hat jetzt auch Links.
>oder ganz woandershin> greift, wer soll das aus der Entfernung denn wissen?
Ach das kann unter Windows natürlich grundsätzlich nicht passieren. ...
W.S. schrieb:> Mein Rat, lade dir hier aus der Codesammlung mal die Lernbetty herunter
Aber nur, wenn du besonders schlechten Code-Stil lernen willst, der
W.S. hat da ein wahres Kunstwerk fabriziert. Man kann nur hoffen dass er
damit nicht schon eine Generation von Anfängern mit infiziert hat.
> und versuche die bei dir zu übersetzen. Wenn das klappt, dann findest du> auch die Haken bei deinem Demo-Projekt.
Er wird ein -I oder -D Flag vergessen haben. Mit der richtigen
Fehlermeldung zuerst wäre das einfacher herauszufinden.
W.S. schrieb:> Nebenbei gesagt, würde ich mit dem Entwickeln unter Linux erst garnicht> anfangen, sondern mir notfalls nen Zweit-PC mit Windows zulegen und dort> entweder die Keil-Demo oder die IAR-Demo installieren.
Kann aber keine neuen C++ Standards :-/ ... Das lustige ist, dass an den
Unis gerne mal geraten wird Linux in einer VM zu installieren, um dort
vernünftig C++ coden zu können...
> Meine Erfahrung> mit dem GCC, präziser mit dem ARM-GCC sind miserabel, dort lauern noch> viel häßlichere Fallstricke, die man nur per Reassembler herauskriegt,> siehe 'exportierte labels in thumb code'.
Kann dafür aber auch mehr, gell.
holger schrieb:> Alternativ: Hör nicht auf den Schwätzer W.S.
Jawoll!
Ah, habe jetzt erst die raffiniert versteckten Meldungen im OP gesehen.
Das Problem ist schlicht und ergreifend dass der STM32F407VG keinen FMC
hat, sondern nur einen FSMC. Daher darfst du die stm32f4xx_fmc.c nicht
mit kompilieren. Du darfst dich bei den Genies bei ST bedanken. GCC &
Linux hat damit, im Gegensatz zu W.S.' Wahn/Wunsch-fantasien, nichts mit
zu tun.
Und tatsächlich gibts STM32F40XX nicht mehr, STM32F40_41xxx war wohl
richtig.
Guten Morgen zusammen!
Vielen Dank für Eure Hilfe! Habe jetzt anscheinend einen Leidensgenossen
gefunden: Beitrag "Re: Eclipse Linux STM32"
Gleiche Fehlermeldung wie bei mir, liegt das an ST? Die Jungs sind hier
gleich nebenan, aber ich glaube die lassen mich nicht rein um zu meckern
:) Juergen G. (jup) hat in dem o.g. thread ein schönes Template mit der
Version 1.0.0 der StdPeripheralLib gepostet, kompiliert bei mir ohne
Probleme! Damit kann ich arbeiten, jetzt sucht der Anfänger (also ich
und sicher auch viele andere) eine gute Beschreibung wie man st-link in
eclipse einbindet um zu flashen und zu debuggen... Wenn das dann auch
noch läuft wäre es eine gute Basis um den STM32F4 besser kennen zu
lernen :-)
Danke!
Jan
Ok, unter dem thread den ich da eben genannt habe steht wie man es mit
openOCD macht, werde das versuchen!
Kann man damit rechnen das ST bald eine korrigierte Version rausbringt?
Jan schrieb:> Kann man damit rechnen das ST bald eine korrigierte Version rausbringt?
ST interessiert sich nicht für Software-Fehler, das sieht man u.a. an
der unendlich langen Errata-Liste:
http://www.mikrocontroller.net/articles/STM32#Errata.2C_Tipps_und_Tricks
- Software ist für ETechniker und ST ein notwendiges Übel...
Wie gesagt kannst du das auch selber korrigieren durch
nicht-Mitcompilieren der stm32f4xx_fmc.c .
texane st-link einbinden geht so:
Im Terminal "st-util" ausführen
In Eclipse eine Debug "GDB Hardware Debugging" Konfiguration hinzufügen,
arm-none-eabi-gdb als Debugger auswählen, als Host 127.0.0.1 und Port
4242 eingeben
Hallo,
ich hatte das gleiche Problem wie der TE! (Error: stm32f4xx_fmc.c ...
'FMC_Bank1' undeclared...)
Habe die stm32f4xx_fmc.c , wie oben beschrieben, vom Compilieren
ausgeschlossen (Eclipse):
holger schrieb:> Resource Configurations-> Exclude from Build und dann> Select All anklicken.
Allerdings bekomme ich jetzt eine neue Fehlermeldung:
Console:
make all
make: *** No rule to make target `stm32f4xx_fmc.o', needed by
`myProject.elf'. Stop.
Hat vielleicht jemand eine Idee wie man das in den Griff bekommt?
Grüsse
Uwe