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


von Joerg D. (jdesch)


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:
1
CSRCS = \
2
  $(DRVR_PATH)/INTC/intc.c \
3
  $(DRVR_PATH)/PM/pm.c \
4
  $(DRVR_PATH)/PM/power_clocks_lib.c \
5
  $(DRVR_PATH)/USART/usart.c \
6
  $(DRVR_PATH)/GPIO/gpio.c \
7
  $(DRVR_PATH)/TC/tc.c

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

Danach bekomme ich dann folgenden Fehler:
1
Linking to `uc3a1256-sample.elf'.
2
system.o: In function `cpu_is_timeout':
3
/home/jd/work/at32uc3/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h:184: undefined reference to `__avr32_udiv64'
4
/home/jd/work/at32uc3/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h:184: undefined reference to `__avr32_udiv64'
5
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?

von Hans W. (hans_wurst)


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...]

von Joerg D. (jdesch)


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?

von Joerg D. (jdesch)


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. ;-)

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.