ARM Cortex M4 hängt beim Sinus

#4614694
Lesenswert?

Hallo,

ich benutze einen ST32F405 auf einem Olimex board. Den programmiere ich 
mit arm-gcc 4.8.4 unter Eclipse mit einem Makefile (angehängt). Ich 
benutze float Zahlen, die floating point unit ist eingeschaltet und die 
normalen float Rechnungen gehen auch wunderbar.

Wenn ich allerdings 'sinf' zur Berechnung eines float-Sinus benutzen 
will schmiert der Prozessor ab, er hängt irgendwo.

Ich habe mir die libm.a aus der toolchain aus 
\arm-none-eabi\lib\fpu\libm.a direkt in mein source Verzeichnis kopiert 
und linke die dazu. Ich habe das so gemacht weil ich es nicht besser 
weiss. Im list-file (angehängt) sieht auch alles ganz schick aus, es 
geht allerdings nicht.

Habe ich die richtige lib genommen?
Wie kann ich die richtige besser automatisch auswählen?
Hat das was mit dieser 'thumb' Geschichte zu tun?

Danke für Eure Zeit

Cheers
Detlef
Angehängte Dateien:
Gast #4614705
Lesenswert?

Detlef _. schrieb:
> Ich habe mir die libm.a aus der toolchain aus
> \arm-none-eabi\lib\fpu\libm.a direkt in mein source Verzeichnis kopiert
> und linke die dazu. Ich habe das so gemacht weil ich es nicht besser
> weiss.

Einfach mit -lm linken. Bei korrekt angegebenen Linker-Optionen (-mfpu, 
-mfloat-abi, -mthumb, ...) verwendet der Linker automatisch die 
richtige.

Detlef _. schrieb:
> Hat das was mit dieser 'thumb' Geschichte zu tun?
Kann sein, wenn du die ARM Mode Library genommen hast passiert irgendein 
Unsinn.

Es ist auch hilfreich, den exakten Assemblercode anzugeben, bei dem es 
abstürzt, und nicht nur "irgendwo".
#4614714
Lesenswert?

Detlef _. schrieb:
> \arm-none-eabi\lib\fpu\libm.a

Völlig falsch: Die ist für Prozessoren, die ARM Befehle können, 
Cortex-M4 kann aber nur thumb (genauer: thumb-2) Befehle.

Daher kommt gcc normalerweise als Multilib, und wenn man 
arm-none-eabi-gcc als Linker Frontend benutzt und den Cortex M4 als MCU 
und die korrekte FPU angibt, nimmt er automagisch die richtige libm.

Bei Deiner Lib gibts nur einen Hardfault, oder er meckert beim Linken.
#4615602
Lesenswert?

Hallo,

danke, ja, die falsche lib.

>>>>>>
Einfach mit -lm linken. Bei korrekt angegebenen Linker-Optionen (-mfpu,
-mfloat-abi, -mthumb, ...) verwendet der Linker automatisch die
richtige.
<<<<<<

Ich habe jetzt bei den Compilerflags und auch den Linkerflags jeweils 
'-lm' angegeben, Compiler/Linker beschweren sich nicht über das flag.

Trotzdem noch 'undefined reference to sinf'.

Die Ausgabe der Compiler/Linker hab ich in dem File angehängt
Habt Ihr noch eine Idee?

Danke
Cheers
Detlef
Angehängte Dateien:

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