mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR32: undefined reference to `__avr32_udiv64'


Autor: Joerg Desch (jdesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich bei meinen ersten Schritten mit dem AVR32 auf die Funktionen 
cpu_delay_ms() und cpu_delay_us() des UC3 Frameworks V1.6.1 gestoßen 
bin, habe ich ein kleines Linker-Problem.

Ich benutze ein normales Makefile, in dem folgende Module einbezogen 
werden:
CSRCS = \
  $(DRVR_PATH)/INTC/intc.c \
  $(DRVR_PATH)/PM/pm.c \
  $(DRVR_PATH)/PM/power_clocks_lib.c \
  $(DRVR_PATH)/USART/usart.c \
  $(DRVR_PATH)/GPIO/gpio.c \
  $(DRVR_PATH)/TC/tc.c

Optimierungseinstellungen sind folgende:
OPTIMIZATION = -O3 -ffunction-sections -fdata-sections

Danach bekomme ich dann folgenden Fehler:
Linking to `uc3a1256-sample.elf'.
system.o: In function `cpu_is_timeout':
/home/jd/work/at32uc3/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h:184: undefined reference to `__avr32_udiv64'
/home/jd/work/at32uc3/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h:184: undefined reference to `__avr32_udiv64'
collect2: ld returned 1 exit status

In den inline-Funktionen rund um die Delays werden temporäre Variablen 
vom Typ "unsigned long long" benutzt.

Welche Library stellt `__avr32_udiv64' zur Verfügung? Ich habe mit find 
und nm nach diesem Symbol geGREPt, aber es ist überall nur als 
"undefined" aufgelistet. Das Hinzulinken mit -lm -lc usw. bringt leider 
nichts.

Ich hatte diese Meldung zuvor schon einmal. Irgendwo hatte ich da alte 
Hinweise im Netz gefunden (aus dem Jahr 2007), die sagten, mal solle die 
Optimierung aktivieren. Das habe ich dann bei dem alten Sample als 
erfolgreich anwenden können (von -O0 auf -O3). Aber hier geht das nicht. 
Die alten Samples habe ich noch...

Hat schon mal jemand dieses Problem gehabt?

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir nicht sicher, aber ich glaube deine fehlenden librarys sind 
"globale" librarys von Atmel und diese sollten automatisch dazu gelinkt 
werden, wenn du den richtigen Prozessor in deiner Entwicklungsumgebung 
(Eclipse?) eingestellt hast. Check mal ob diese in Ordnung ist.
[....ist allerdings nur eine Vermutung...]

Autor: Joerg Desch (jdesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutzte Eclipse nicht (es läuft nicht richtig unter Ubuntut). Im 
Makefile sind sowohl die Architektur als auch das Target richtig 
definiert. Das habe ich schon mehrfach kontrolliert.

Wie gesagt. In den ersten Samples hatte ich das auch, nur konnte ich es 
da durch das aktivieren des Optimizers beheben.

Sonst hat niemand eine Idee?

Autor: Joerg Desch (jdesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GELÖST!!!

Oh man, was ein Kram. Die Lösung war das explizite Linken von libgcc! 
Das sollte eigentlich automatisch passieren, aber anscheinend klappt das 
manchmal nicht.

Ein einfache -lgcc hat es gebracht. ;-)

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.