mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit der mathlib?


Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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 %)

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian S. wrote:

> Kann mir jemand erklären was das soll?

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

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha ok, danke!

Autor: Markus F. (pippo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich hab jetz genau das gleiche Problem mit gleicher Fehlermeldung 
mit folgender Zeile:
#include <math.h>

...

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.

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus F. wrote:
> So, ich hab jetz genau das gleiche Problem mit gleicher Fehlermeldung
> mit folgender Zeile:
>
>
> #include <math.h>
> 
> ...
> 
> 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.


http://www.mikrocontroller.net/articles/FAQ#Aktivi...

die libprintf_flt.a kannst du weglassen

Autor: Markus F. (pippo)
Datum:

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

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann zieh dir mal das vom Karl rein, das ist gut ;)

Autor: Markus F. (pippo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat funktioniert, danke. Nur ist jetz der Code explodiert :)

Autor: Fabian S. (jacky2k)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.