STM32-Float-Ops gehen nicht

Gast #1100801
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
Angehängte Dateien:
Moderator Persönliche Seite #1457861
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.
Gast #1625765
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
#1625778
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

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