Forum: Mikrocontroller und Digitale Elektronik Problem mit der mathlib?


von Fabian S. (jacky2k)


Lesenswert?

Hallo,
ich muss (leider) ein paar Funktionen aus der mathlib verwenden, aber 
irgendwie will das nicht so ganz. Ich kann die math.h einbinden, aber 
wenn ich dann z.B. sqrt() verwende und den Kram compiliere, haut er mir 
das um die Ohren:

>c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr5\li bc.a(fp_p
>owsodd.o): In function `__fp_powsodd':
>(.text.fplib+0x10): relocation truncated to fit: R_AVR_13_PCREL against symbol `
>__mulsf3' defined in .text section in c:/winavr-20080610/bin/../lib/gcc/avr/4.3.
>0/avr5\libgcc.a(_mul_sf.o)
>c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr5\li bc.a(fp_p
>owsodd.o): In function `__fp_powsodd':
>(.text.fplib+0x20): relocation truncated to fit: R_AVR_13_PCREL against symbol `
>__mulsf3' defined in .text section in c:/winavr-20080610/bin/../lib/gcc/avr/4.3.
>0/avr5\libgcc.a(_mul_sf.o)

Meinen Nachforschungen zur Folge ligt es daran, dass er die mathlib 
nicht mit einlinkt, also habe ich an mein avr-gcc Befehl "-lm" 
angehängt, aber das ändert absolut nichts.
Mein Compilierbefehl sieht momentan so aus:

avr-gcc -g -lm -Os -std=gnu99 -mmcu=%microcontroller% %datei1% %datei2% 
%datei3% %datei4% %datei5% %datei6% %datei7% %datei8% %datei9% -o 
%dateioutput_name%.elf -DF_CPU=%F_CPU% -Wall

(in einer bat, desshalb die %)

von Fabian S. (jacky2k)


Lesenswert?

Lol, ich habs! Wie bescheuert ist das denn???
Man muss das -lc HINTER die Dateinamen tun im gcc Aufruf, dann 
klappts.
Kann mir jemand erklären was das soll?

PS: habe gelesen, dass es in manchen Fällen auch helfen soll noch -lc 
dran zu hängen, falls jemand vor dem Problem steht ;)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Fabian S. wrote:

> Kann mir jemand erklären was das soll?

Ja: Beitrag "Re: WINAVR-Bug: zuviel SRAM/Flash bei float"

von Fabian S. (jacky2k)


Lesenswert?

Aha ok, danke!

von Markus F. (pippo)


Lesenswert?

So, ich hab jetz genau das gleiche Problem mit gleicher Fehlermeldung 
mit folgender Zeile:
1
#include <math.h>
2
3
...
4
5
extension = sin (a*pi/180);


Hab auch brav den Link gelesen, nur versteh ich nicht ganz, wo ich das 
-lm oder -lc einfügen muss. Bin mal bei Project -> Configuration options 
-> custom options rein und habs überall mal probiert einzufügen, aber 
hat nix gebracht.

von Fabian S. (jacky2k)


Lesenswert?

Welche IDE verwendest du denn? Vermutlich AVR Studio.
Da gibts einige Möglichkeiten. Das sauberste ist sicher du trägst sie 
unter Librarys mit ein, kann dir aber leider nicht sagen wo die genau 
liegt. Es sollte auch gehen, wenn du auf "Custom Opetions" gehst und 
dort unter [Linker Options] das -lm hinzufügst.

von Karl H. (kbuchegg)


Lesenswert?

Markus F. wrote:
> So, ich hab jetz genau das gleiche Problem mit gleicher Fehlermeldung
> mit folgender Zeile:
>
>
1
> #include <math.h>
2
> 
3
> ...
4
> 
5
> extension = sin (a*pi/180);
6
>
>
>
> Hab auch brav den Link gelesen, nur versteh ich nicht ganz, wo ich das
> -lm oder -lc einfügen muss. Bin mal bei Project -> Configuration options
> -> custom options rein und habs überall mal probiert einzufügen, aber
> hat nix gebracht.


http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio

die libprintf_flt.a kannst du weglassen

von Markus F. (pippo)


Lesenswert?

Ich benutze AVR Studio 4.15, ja. Unter [Linker Options] und [Project.c] 
hab ichs bereits eingefügt, jedoch ohne erfolg

von Fabian S. (jacky2k)


Lesenswert?

Dann zieh dir mal das vom Karl rein, das ist gut ;)

von Markus F. (pippo)


Lesenswert?

Hat funktioniert, danke. Nur ist jetz der Code explodiert :)

von Fabian S. (jacky2k)


Lesenswert?

Explodiert?
War das nicht bei so ganz alten Rechnern so, dass man die Hardware nur 
mittels Software beschädigen konnte? :D

von Karl H. (kbuchegg)


Lesenswert?

Markus F. wrote:
> Hat funktioniert, danke. Nur ist jetz der Code explodiert :)

:-)
Was hast du erwartet. So ein Sinus ist ja auch kein Pappenstiel :-)

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.