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 %)
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 ;)
Fabian S. wrote: > Kann mir jemand erklären was das soll? Ja: Beitrag "Re: WINAVR-Bug: zuviel SRAM/Flash bei float"
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.
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.
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
Ich benutze AVR Studio 4.15, ja. Unter [Linker Options] und [Project.c] hab ichs bereits eingefügt, jedoch ohne erfolg
Explodiert? War das nicht bei so ganz alten Rechnern so, dass man die Hardware nur mittels Software beschädigen konnte? :D
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.