Hallo, hat jemand von euch vielleicht das Beispielprogramm des STM3240G-EVAl Boards schon mal mit dem GCC durchgedreht? Im Grunde taugt auch jeder andere Kompiler aber die anderen (IAR usw.) Sind in der kostenlosen Version nicht mit der Codegröße Kompatibel. Ich scheiter hier an so sachen, dass anscheinend manche Files nicht mitkompiliert werden, da funktionen doppelt vorliegen. In anderen Files werden Defines verwendet, die im ganzen Projekt nirgends definiert werden usw. Vielleicht hat ja jemand so was schon mal gemacht, sodass er mir hier Tipps geben kann. Entweder, wo steht, welche dateien überhaupt kompiliert werden müssen und ob es Jemand das Projekt vielleicht schon auf den GCC portiert hat.
Hab das Board leider nicht, aber hab schon mal für dich angefangen.
Meine Umgebung: linux eclipse gcc
Ich mach das so:
- eclipse Makefile Projekt anlegen
- in den Projektordner den Ordner:
F4_Demonstration_Builder_V1.0.1 entpacken
- in den Projektordner das Makefile legen
(hab immer eins als Vorlage da ;-) )
main() suchen und ins Makefile eintragen.
Dann kompileren und die Fehler von oben an befriedigen.
Was sich als Lib zusammenfassen lässt wird auch so gemacht.
Fehlt eine .h dann Datei suchen und den gesamten Ordner -IOrdner
Achtung: lcdHal.h bei linux Gross/Kleinschreibung beachten bzw. ändern.
Ist bis jetzt auch noch ein schöner Fehler in einem #include das
linux/gcc stört.
Das Ganze geht natürlich auch ohne eclipse, ist aber so komfortabler.
Ich muss erst mal weg, hänge aber schon mal das angefangene Makefile an.
Hallo, vielen Dank, habe das gleich mal ausprobiert und bin denke (hoffe) ich sehr weit gekommen. Habe von Makefiles nur Bedingt ahnung, deines scheint da um meilen besser zu sein als meins. Ich hänge mal den aktuellen Stand an. (12MB) ich benutze die gleiche Toolchain, wie du sie oben beschrieben hast mit eclipse gcc von code sourcery usw. nur auf Windows, was aber denke ich kein problem darstellen sollte. Woran es jetzt noch hapert: Die Libs werden erzeugt. Die Objektdateien auch. Nur beim Linken der Libs zum Hauptprogramm findet er die Libs nicht wieder. Hab mal die Änderung von .a in .lib geändert aber ohne erfolg. Hast du ne Idee woran das liegen könnte?
863368byte ist das .hex-file groß; Ich hab's mit dem alten Atollic-True compil.; Aber: Als STM324xG-Eval kann es nicht gehn, da die Libr. ../../../../Utilities/STM32_Audio/Addons/SpiritDSP_Equalizer -L../../../../Utilities/STM32_Audio/Addons/SpiritDSP_LoudnessControl die verlinkt werden, nicht für hard-float ausgelegt sind; Ich habe STM32F407IG als Device , aber als Board-Einstellung: none Dafür diese Switches: -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -DSTM32F2XX -DUSE_STDPERIPH_DRIVER -DUSE_STM322xG_EVAL -DUSE_3D_OBJECTS -I../../../Config -I../../../Core/Devices/STM32F2xx -I../../../Core/Graphics -I../../../Core/Mod_Manager -I../../../Core/User -I../../../Core/Lib -I../../../Modules -I../../../Modules/Audio_Player -I../../../Modules/Audio_Recorder -I../../../Modules/Calendar -I../../../Modules/Camera -I../../../Modules/Console -I../../../Modules/Credits -I../../../Modules/Ethernet -I../../../Modules\File_Manager -I../../../Modules\serial -I../../../Modules/Common -I../../../Modules/Image_Browser -I../../../Modules/System -I../../../Modules/USBD -I../../../../Libraries/Embedded_GUI_Library/inc -I../../../../Libraries/Embedded_GUI_HAL/inc -I../../../../Libraries/STM32_USB_HOST_Library/Core/inc -I../../../../Libraries/STM32_USB_HOST_Library/Class/MSC/inc -I../../../../Libraries/STM32_USB_Device_Library/Core/inc -I../../../../Libraries/STM32_USB_Device_Library/Class/MSC/inc -I../../../../Libraries/STM32_USB_Device_Library/Class/HID/inc -I../../../../Libraries/STM32_USB_Device_Library/Class/Audio/inc -I../../../../Libraries/STM32_USB_OTG_Driver/inc -I../../../../Libraries/STM32F2xx_StdPeriph_Driver/inc -I../../../../Libraries/CMSIS/Device/ST/STM32F2xx/Include -I../../../../Libraries/STM32F2x7_ETH_Driver/inc -I../../../../Utilities/STM32_EVAL -I../../../../Utilities/STM32_EVAL/Common -I../../../../Utilities/STM32_EVAL/STM322xG_EVAL -I../../../../Utilities/Third_Party/fat_fs/inc -I../../../../Utilities/Third_Party/FreeRTOS/Source/include -I../../../../Utilities/Third_Party/lwip_v1.3.2/src/include -I../../../../Utilities/Third_Party/lwip_v1.3.2/port/STM32 -I../../../../Utilities/Third_Party/lwip_v1.3.2/src/include/ipv4 -I../../../../Utilities/Third_Party/lwip_v1.3.2/port/STM32/FreeRTOS -I../../../../Utilities/STM32_Audio/STM322xG_EVAL -I../../../../Utilities/STM32_Audio/Common -I../../../../Utilities/Third_Party/jpeg-8d/include -I../../../../Utilities/STM32_Audio/Addons/SpiritDSP_Equalizer -I../../../../Utilities/STM32_Audio/Addons/SpiritDSP_LoudnessControl -I../../../../Libraries/CMSIS/Include -I../../../../Utilities/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 -Os -ffunction-sections -fdata-sections -g -Wall vielleicht hilft euch das weiter --
Sonke A. schrieb: > findet er die Libs nicht wieder Hast Du die Libs mit -l angehängt? Wenn ja, setz mal vor das erste -l noch ein: -L$(TOP) da die libs im TOP Pfad liegen.
ok ja das hats gebracht. Jetzt hat er nur die Objektfiles nicht gebaut also die, die nicht in der LIB sind wurden nicht erstellt. Muss ich die im Makefile alle extra angeben? Gruß
Sonke A. schrieb: > die nicht in der > LIB sind wurden nicht erstellt. In welcher? Hast Du selbst noch libs erstellt? Häng mal nur dein Makefile an.
nein ich habe keine libs erstellt. Ich meine die anderen sourcen, welche zum erstellen des Projektes benötigt werden. Also alle anderen Objektfiles. Im Anhang das Makefile. Gruß
Sonke A. schrieb: > nein ich habe keine libs erstellt Dann hast Du noch viel Arbeit vor dir. Es wird vieles aus dem Pfad verwendet. Als Anhaltspunkt kannst Du die Auflistung von vampire nehmen. Ich würde als nächste eine libModules.a erstellen. Das mit dem -L$(TOP): $(CC) $(CFLAGS) $^ -o $@ -L$(TOP)libSTM32F4xx_StdPeriph_Driver -L$(TOP)libCore_Graphics war eigentlich so gemeint: $(CC) $(CFLAGS) $^ -o $@ -L$(TOP) -lSTM32F4xx_StdPeriph_Driver -lCore_Graphics vampire schrieb: > Als STM324xG-Eval kann es nicht gehn, da die Libr. > ../../../../Utilities/STM32_Audio/Addons/SpiritDSP_Equalizer > -L../../../../Utilities/STM32_Audio/Addons/SpiritDSP_LoudnessControl > die verlinkt werden, nicht für hard-float ausgelegt sind; Darüber müssen wir dann auch noch nachdenken....
Irgentwie musst Du dem Linker noch sagen, was er machen soll:
-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -T"..\STM32F207IG_FLASH.ld"
-static -L../../../../Utilities/STM32_Audio/Addons/SpiritDSP_Equalizer
-L../../../../Utilities/STM32_Audio/Addons/SpiritDSP_LoudnessControl
-Wl,-cref,-u,Reset_Handler,--no-wchar-size-warning
"-Wl,-Map=${BuildArtifactFileBaseName}.map" -Wl,--gc-sections
-Wl,--defsym=malloc_getpagesize_P=0x1000
vampire schrieb: > Irgentwie musst Du dem Linker noch sagen, was er machen soll: Das dauert noch ein wenig :-)
lib_equalizer_cortex_m3.a und lib_loudness_cortex_m3.a müssten für m4 hard-float gebildet werden; Ich bin mir nicht sicher, aber ich glaube, ST hat nur "copyright" für die *_m3.a ;
Ich habe jetzt die libModules aus der Liste oben im das Makefile eingefügt:
1 | libModules.a: |
2 | $(CC) $(CFLAGS) -c \ |
3 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Audio_Player/*.c \ |
4 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Calendar/*.c \ |
5 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Console/*.c \ |
6 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Ethernet/*.c \ |
7 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Serial/*.c \ |
8 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/Image_Browser/*.c \ |
9 | $(TOP)STM32F2-F4_Demonstration_Builder_V1.0.1/Project/Modules/USBD/*.c |
10 | @$(AR) cr $@ $(TOP)*.o |
11 | rm -rf $(TOP)*.o |
Bei einigen Dateien wurde uint8_t nicht gefunden. In die hab ich dann #include "stdint.h" eingefügt. Kann man gcc auch sagen das er allgemein die stdint.h für alle Dateien benutzen soll? Diese muss dann natürlich im Makefile bei:
1 | all: ..... libModules.a .... |
eingefügt werden und auch als -lModules benutzt werden.
Eigentlich könnte uns ein Moderator jetzt nach GCC schieben... (Mod.: so sei es.)
Ok setze mich nachher daran. Habe die stdint in der stm32f4xx.h inkludiert. Damit fallen die Fehlermeldungen weg. Hab ich.dein Konzept richtig verstanden für alle Ordner jeweils eine lib zu machen? Dann kommen wir doch wieder zu dem.Punkt, dass gewisse Delfine nicht definiert sind. Aber vielleicht sind das Source, die gar nicht in der obigen Liste auftauchen. Gruß
Sonke A. schrieb: > Hab ich.dein Konzept richtig verstanden für alle Ordner jeweils eine lib > zu machen? Nein. Natürlich nur für die logisch zusammenhängenden. Wie z.B.: Module, USB, Ethernet usw. Meine gfundenen "Delfine" sind:
1 | CFLAGS+=-DVECT_TAB_FLASH |
2 | CFLAGS+=-DUSE_STDPERIPH_DRIVER |
3 | CFLAGS+=-DSTM32F4XX |
4 | CFLAGS+=-DUSE_STM324xG_EVAL |
5 | CFLAGS+=-std=gnu99 |
Lib's bieten sich an, wenn die darin enthaltenen Funktionen keiner Änderung (zur Laufzeit oder bei CPU-Wechsel) unterliegen; Schränken aber, wenn sie nicht von vornherein dazu in der Lage sind( if..then ), die Anpssung an sich ändernde Hardware ein --
Haben aber auch den Vorteil das man Schritt für Schritt die Erstellung des Gesamtprojekts überprüfen kann.
Ixh habe mal, nur zur Orientierung, ein (Windows-)makefile angehängt; Mit PN(Notepad) und CS-lite compiliert -- näheres hier: Beitrag "Open407V-D mit PN und CS"
@vampire hast du die Möglichkeit anzuhängen, welche sourcen an dem Build beteiligt sind? Dein Post oben zeigt ja "nur" die includes. USB_OTG läuft so bei mir nicht durch. es müsste das define USB_OTG_MODE definiert sein. ist dies definiert, scheitert er an der nichtdefinition von USB_OTG_OTGCTL_TypeDef
In der usb_regs.h gibt es ein : USB_OTG_GOTGCTL_TypeDef USB_OTG_OTGCTL_TypeDef findet sich in einer anderen usb_regs.h von einem anderen Projekt. In der struct besteht der Unterschied in 2 Variablen. Ich würde das "G" einsetzen und sehen ob sich dadurch Fehler ergeben. Hier die andere: http://printer-capture.googlecode.com/svn-history/r2/trunk/inc/usb_regs.h
Für die Audiosachen kann das nicht kompiliert werden, da die Funktion EVAL_AUDIO_Init() für den 200er andere Parameter hat als für den 400er. Wenn ich das 400er define setze kann er das nicht linken. @ vampire, habe ich dich richtig verstanden, das deine sourcen auch nicht für den 400er zu kompilieren sind? Was passiert denn, wenn ich für den 200er kompiliere und das auf den 400er spiele, die sind doch bis auf kleinigkeiten identisch oder? ich habe leider grade keine Idee wie ich den Konflikt auflöse. Im Anhang ist mein aktuelles Makefile.
in meiner usb_regs.h gibt es das nicht. welchen Codestand hast du denn? kannst du den vielleich mal als zip anhängen?
Sonke schrieb: > Was passiert denn, wenn ich für den 200er kompiliere und das auf den > 400er spiele, die sind doch bis auf kleinigkeiten identisch oder? -die hard-float "Kleinigkeit"; Das"Atollic" versteckt ja nur das makefile . Aber Änderungen, wie "USE SOFT-FLOAT"(weis' jetzt nicht genau wie's heisst) sind dort nicht möglich. Wie geschrieben, habe ich das als Board-none und STM32F407IG als Device compiliert.
Sonke schrieb: > in meiner usb_regs.h gibt es das nicht Doch. Hab deine Demo.zip geladen. Da ist USB_OTG_GOTGCTL_TypeDef drin. Wir haben die gleichen Versionen.
./Project/Core/Devices/STM32F4xx/stm32f4xx_conf.h:89: warning: "assert_param" redefined Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F40x/stm32f4xx.h:65: note: this is the location of the previous definition C:\DOKUME~1\ich\LOKALE~1\Temp\cc7TC72m.o: In function `main': main.c:(.text+0x6): undefined reference to `NVIC_PriorityGroupConfig' main.c:(.text+0x20): undefined reference to `xTaskGenericCreate' main.c:(.text+0x24): undefined reference to `vTaskStartScheduler' C:\DOKUME~1\ich\LOKALE~1\Temp\cc7TC72m.o: In function `Background_Task': main.c:(.text+0x3a): undefined reference to `MOD_PreInit' main.c:(.text+0x42): undefined reference to `MOD_AddModule' main.c:(.text+0x4a): undefined reference to `MOD_AddModule' main.c:(.text+0x52): undefined reference to `MOD_AddModule' main.c:(.text+0x5a): undefined reference to `MOD_AddModule' main.c:(.text+0x62): undefined reference to `MOD_AddModule' C:\DOKUME~1\ich\LOKALE~1\Temp\cc7TC72m.o:main.c:(.text+0x6a): more undefined references to `MOD_AddModule' follow C:\DOKUME~1\ich\LOKALE~1\Temp\cc7TC72m.o: In function `Background_Task': main.c:(.text+0xa0): undefined reference to `CONSOLE_AddMessage' main.c:(.text+0xa4): undefined reference to `GL_Startup' main.c:(.text+0xa8): undefined reference to `MOD_LibInit' main.c:(.text+0xac): undefined reference to `GL_Init' main.c:(.text+0xc0): undefined reference to `STM_EVAL_LEDToggle' main.c:(.text+0xc6): undefined reference to `STM_EVAL_LEDToggle' main.c:(.text+0xcc): undefined reference to `STM_EVAL_LEDToggle' main.c:(.text+0xd2): undefined reference to `STM_EVAL_LEDToggle' main.c:(.text+0xd6): undefined reference to `GL_Handle_Inputs' main.c:(.text+0xda): undefined reference to `GL_Background_Handler' main.c:(.text+0xde): undefined reference to `GL_LowPower' main.c:(.text+0xe2): undefined reference to `GL_HandleSystemSettingsChange' main.c:(.text+0xe6): undefined reference to `GL_UpdateBackgroundProcessStatus' main.c:(.text+0xea): undefined reference to `MOD_HandleModulesBackground' main.c:(.text+0xf0): undefined reference to `vTaskDelay' main.c:(.text+0xf8): undefined reference to `mod_system' main.c:(.text+0xfc): undefined reference to `mod_audio' main.c:(.text+0x100): undefined reference to `mod_image' main.c:(.text+0x104): undefined reference to `mod_ethernet' main.c:(.text+0x108): undefined reference to `mod_camera' main.c:(.text+0x10c): undefined reference to `mod_usbd' main.c:(.text+0x110): undefined reference to `mod_recorder' main.c:(.text+0x114): undefined reference to `mod_serial' main.c:(.text+0x118): undefined reference to `mod_calendar' main.c:(.text+0x11c): undefined reference to `mod_filemgr' main.c:(.text+0x120): undefined reference to `mod_console' main.c:(.text+0x124): undefined reference to `mod_credits' collect2: ld returned 1 exit status make: *** [main.elf] Error 1 habe dein Demo.zip ausprobiert; Zunächst im makefile 117 $(CC) $(CFLAGS) $^ -o $@ -LlibSTM32F4xx_StdPeriph_Driver.lib -LlibCore_Graphics.lib geändert, dann die obigen Fehler --
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.