Forum: Compiler & IDEs STM32-Float-Ops gehen nicht


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Arm-Spezialisten,

bin als Arm-Neuling verzweifelt dabei, einem STM32 float-Operationen 
beizubringen.

Habe ein simples Programm, in dem nur eine float-Addition ausgeführt 
wird. Build-Prozess mit letzter Codesourcery-Release (gcc 4.3.2) 
funktioniert (scheinbar). math.h ist includiert.

Sobald ich das Prog mit OOCD auf den uC spiele und per reset run starte, 
bleibt es mit einem HardFault hängen. Kommentiere ich die Addition aus, 
läuft es.

Scheinbar wird die Fkt. __addsf3 nicht richtig ausgeführt(?!)

Habe im Anhang das Makefile dazugehängt. Fehlt noch was?

Hat jemand schon mal ein ähnliches Problem gehabt?


Ein für jeden Hinweis dankbarer
Peter

von Peter (Gast)


Lesenswert?

..und habs auch schon: libraries libgcc.a etc. aus ordner 
.\arm-none-eabi\lib\thumb2\
tricky teufel, dieser stm32 ;)

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Nicht direkt den Linker (arm-*-ld) aufrufen, sondern mit dem 
compiler-frontend (arm-*-gcc) linken. Dabei Optionen für mcu und thumb 
mitgeben, dann werden "automatisch" die zum Target passenden Libraries 
(libgcc, libc, libm) angebunden. So kann man sich die Bastelei mit 
direkten Pfadangaben sparen.


Edit: hoppla. Grade gemerkt, dass der Ursprungsbeitrag in 
Forum-Zeitrechnung antik ist. Bin über einen anderen Thread 
reingestolpert. Information ist hoffentlich dennoch nützlich für Leute, 
die über die Forensuche hierher gelangen.

von buffalo (Gast)


Lesenswert?

Danke für den Tipp !
Ich habe das selbe Problem wie obiger Poster mit den soft float 
Geschichten aus der libgcc (_aeabi...). Anstatt den Linker zu 
verwenden hab ich es jetzt mit dem gcc Frontend versucht. Ich hab jetzt 
das Problem mit den soft float Zeug zwar weg, bekomme dafür aber jetzt 
die libg mit unresolved symbols um die Ohren gehauen, dabei nutz ich 
daraus garnix. Mein Progrämmchen keinen einzigen Funktionsaufruf ausser 
main() !?!

Weis da jemand Rat ?

Danke für alle Antworten die da kommen mögen.

arm-none-eabi-gcc -g -mcpu=cortex-m3 -mthumb -static -Tstm32.ld   -o 
main.elf main.o startup_stm32f10x.o
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/libg.a(lib_a-exit.o):  In function 
`exit':
exit.c:(.text.exit+0x14): undefined reference to `_exit'
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/libg.a(lib_a-sbrkr.o):  In function 
`_sbrk_r':
sbrkr.c:(.text._sbrk_r+0xe): undefined reference to `_sbrk'
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/libg.a(lib_a-writer.o):  In function 
`_write_r':
writer.c:(.text._write_r+0x12): undefined reference to `_write'
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/libg.a(lib_a-closer.o):  In function 
`_close_r':
closer.c:(.text._close_r+0xe): undefined reference to `_close'
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/libg.a(lib_a-lseekr.o):  In function 
`_lseek_r':
lseekr.c:(.text._lseek_r+0x12): undefined reference to `_lseek'
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/libg.a(lib_a-readr.o):  In function 
`_read_r':
readr.c:(.text._read_r+0x12): undefined reference to `_read'
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/crt0.o:  In function `start':
/home/heiko/opt/crosstools/arm-none-eabi/lib/gcc/arm-none-eabi/4.3.4/../ 
../../../arm-none-eabi/lib/thumb/crt0.o:  In function `start':
collect2: ld returned 1 exit status

P.s. Es ist zum aus der Haut fahren. Die Toolchain macht mich noch 
fertig....

Gruß buffalo

von Heiko J. (buffalo)


Lesenswert?

Da hab ich jetzt ewig gesucht ....und ne Frage ins Forum gestellt und 
ein paar Minuten später selber die Antwort gefunden. ... Für alle 
mitleidenden, die Zauberformel lautet:
"arm-none-eabi-gcc -g -nostdlib -mcpu=cortex-m3 -mthumb -static 
-Tstm32.ld   -o main.elf main.o startup_stm32f10x.o -lgcc"

Wichtig ist "-nostdlib" und die libgcc manuell mit "-lgcc" anhängen.

Gruß buffalo

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.