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
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".
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.