Forum: Compiler & IDEs STM3240G-EVAL Beispielprogramm


von Sonke A. (soeni)


Lesenswert?

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.

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Sonke A. (soeni)


Angehängte Dateien:

Lesenswert?

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?

von vampire (Gast)


Lesenswert?

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 --

von hp-freund (Gast)


Lesenswert?

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.

von Sonke A. (soeni)


Lesenswert?

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ß

von hp-freund (Gast)


Lesenswert?

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.

von Sonke A. (soeni)


Angehängte Dateien:

Lesenswert?

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ß

von hp-freund (Gast)


Lesenswert?

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....

von vampire (Gast)


Lesenswert?

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

von hp-freund (Gast)


Lesenswert?

vampire schrieb:
> Irgentwie musst Du dem Linker noch sagen, was er machen soll:

Das dauert noch ein wenig :-)

von vampire (Gast)


Angehängte Dateien:

Lesenswert?

dies script läuft auch für stm32f4xx --

von vampire (Gast)


Lesenswert?

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 ;

von vampire (Gast)


Lesenswert?

-vergiss das oben geschriebene -- !

von hp-freund (Gast)


Lesenswert?

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.

von hp-freund (Gast)


Lesenswert?

Eigentlich könnte uns ein Moderator jetzt nach GCC schieben...

(Mod.: so sei es.)

von Sonke A. (soeni)


Lesenswert?

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ß

von hp-freund (Gast)


Lesenswert?

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

von vampire (Gast)


Lesenswert?

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 --

von hp-freund (Gast)


Lesenswert?

Haben aber auch den Vorteil das man Schritt für Schritt die Erstellung 
des Gesamtprojekts überprüfen kann.

von vampire (Gast)


Angehängte Dateien:

Lesenswert?

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"

von Sonke (Gast)


Lesenswert?

@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

von hp-freund (Gast)


Lesenswert?

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

von Sonke (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Sonke (Gast)


Lesenswert?

in meiner usb_regs.h gibt es das nicht. welchen Codestand hast du denn? 
kannst du den vielleich mal als zip anhängen?

von vampire (Gast)


Lesenswert?

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.

von hp-freund (Gast)


Lesenswert?

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.

von vampire (Gast)


Lesenswert?

./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 --

von vampire (Gast)


Lesenswert?

da fehlen wohl zwei *.h ;

von vampire (Gast)


Lesenswert?

sehe grad: -deine "Modules" ist völlig leer --

von vampire (Gast)


Angehängte Dateien:

Lesenswert?

schau Dir mal Debug --> makefiles an;

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.