Forum: Compiler & IDEs ARM Cortex M4 hängt beim Sinus


von Detlef _. (detlef_a)


Angehängte Dateien:

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

von Dr. Sommer (Gast)


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

von Dr. Sommer (Gast)


Lesenswert?

Dr. Sommer schrieb:
> verwendet der Linker automatisch die richtige.
PS: Bei dem bei einigen Linuxen mitgelieferte arm-gcc funktioniert das 
nicht richtig. Daher ist dringend zu empfehlen, den arm-gcc von 
https://launchpad.net/gcc-arm-embedded zu nutzen (geht nicht nur unter 
Debian/Ubuntu), der hat auch viel neuere Versionen.

von Jim M. (turboj)


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.

von Detlef _. (detlef_a)


Angehängte Dateien:

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

von hp-freund (Gast)


Lesenswert?

Detlef _. schrieb:
> -lm

muss ganz am Ende der Zeile stehen.

von Detlef _. (detlef_a)


Lesenswert?

Yup, geht :)))))))))))))

Danke
Cheers
Detlef

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.