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?