Forum: Compiler & IDEs Error bei Divisionen mit AVR (__udivmodqi4)


von Berni (Gast)


Lesenswert?

Hallo!

Hab ein Problem beim Programmieren meines ATmega32. Beim Kompilieren
erscheint der Fehler: "relocation truncated to fit R_AVR_13_PCREL
__udivmodqi4"

Es ist mir schon klar, dass das mit irgendwelchen Divisionen zu tun
haben muss. In meinem Programm kommen aber nur ca. 15 Divisionen vor,
immer nur char-Divisionen, keine Divisionen durch null. Entferne ich
aber einige beliebige Divisionen,tritt der Fehler nicht mehr auf. Dabei
ist es allerdins egal, welche Division ich entferne, also syntaktisch
ist da kein Fehler drin.

Ich halte es auch für ausgschlossen, dass das Programm zu lang ist, es
hat genau 15 der 32 möglichen KB. Ein Timing-Problem aufgrund von ISR`s
oder ähnlichem kann ich ebenfalls ausschließen, da ich keine
zeitkritischen Einflüsse im System habe.

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


Lesenswert?

Hast du -lm mit angegeben?

von Berni (Gast)


Lesenswert?

-lm? von einem -lm weiß ich nix, wo würde das hingehören?

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


Lesenswert?

In die Linkeroptionen.

Siehe

https://savannah.nongnu.org/bugs/?func=detailitem&item_id=3485

Ich halte das für das gleiche Problem.

von Berni (Gast)


Lesenswert?

So, hab jetzt "MATH_LIB = -lm" in die Makefile eingefügt, hat aber
leider nix gebracht.
Ebenfalls stdlib.h inkludiert, hat ebenso keinen Erfolg erbracht...

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


Lesenswert?

Benutzt du C++?  Da ist noch ein Bug offen, der sehr ähnlich
zu deinem Verhalten aussieht...

von Berni (Gast)


Lesenswert?

Nein, ich benutze C, ohne ++, was wär das für ein Bug?

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


Lesenswert?

Bekommst du ein minimales Beispiel zusammen, mit dem man den
Fehler reproduzieren kann?

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


Lesenswert?

p.s.: Kannst ja mal ein -v in die Kommandozeile vom GCC mit
aufnehmen und dann die Ausgabe hier posten.

von Rolf Magnus (Gast)


Lesenswert?

Überall das -mmcu=atmega32 eingetragen?

von Berni (Gast)


Angehängte Dateien:

Lesenswert?

Mit -v gibt er folgendes aus (siehe Dateianhang)

Ja, -mmcu ist auch richtig gesetzt.

von Ingo (Gast)


Lesenswert?

Da sehe ich aber nicht, dass die m.lib dazu gelinkt wird.

Kannst Du mal das makefile posten, bitte?

von Berni (Gast)


Angehängte Dateien:

Lesenswert?

m.lib?

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


Lesenswert?

-lm ans Ende der Kommandozeile hinzufügen, die den Linker aufruft.

Dein Makro MATH_LIB wird einfach gar nicht benutzt.  Du musst das
-lm in LIBS eintragen in deinem Makefile.

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.