Hallo ! Ich habe das Problem, das mir AVR Studio während des Buildvorgangs immer folgende Errors ausgibt: usbdrv.o: In function `usbProcessRx': H:\Tiny\new\default/../src/usbdrv.c:449: undefined reference to `usbFunctionSetup' usbdrv.o: In function `usbBuildTxBlock': H:\Tiny\new\default/../src/usbdrv.c:537: undefined reference to `usbCrc16Append' Kann leider nicht rausfinden, wo das Problem liegt. Hoffe das mir jemand mit Obdev USB Erfahrung helfen kann. Mein Code: #define F_CPU 16500000UL #include <avr/io.h> #include <compat/deprecated.h> #include "include/usbdrv.h" #include "include/usbportability.h" #include "include/oddebug.h" /* Funktion zur Berechnung des Slots */ short Slot(short sRES) { . . .(Abgeschnitten) . . return Slot; } int main(void) { /* Definieren der Ein- und Ausgänge */ outp(0x22, DDRB); /* ADC conversion */ unsigned short sRES = 0; unsigned char SlotID = 0; MCUCR = (1<<PUD); ADCSRA = (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2) | (1<<ADEN); ADMUX = (1<<MUX1) | (1<<MUX2) |(0<<REFS0) | (0<<REFS1) |(0<<REFS2); ADCSRA |= (1<<ADSC); while ( ADCSRA & (1<<ADSC) ) { ; } sRES = ADC; SlotID = Slot(sRES); /* USB */ unsigned char usbFunctionSetup(unsigned char data[8]) { return 0; } usbInit(); while(1) { usbPoll(); } return 0; } ( Ziel soll es einmal sein, die Variable SlotID in Windows anzeigen zu lassen.(z.B. als ProduktID)) Vielen dank im vorraus.
Die Fehlermeldung ist doch recht eindeutig: usbdrv.o: In function `usbProcessRx': H:\Tiny\new\default/../src/usbdrv.c:449: undefined reference to `usbFunctionSetup' Im Sourcemodul usbdrv.c wird in Zeile 449 ein Symbol namens usbFunctionSetup referenziert (also vermutlich eine so benannte Funktion aufgerufen), das zu diesem Zeitpunkt nicht bekannt ist. Wenn diese Funktion irgendwo in Deinem Projekt vorhanden ist, dann fehlt der Funktionsprototyp, der in einer Headerdatei oder aber in usbdrv.c vor der betreffenden Stelle anzubringen ist. Die zweite Fehlermeldung ist genauso gestrickt.
Ich mag mich irren, aber undefined reference ist ein Linker Problem (deswegen wird es auch in der .o vermisst. Da kannst du noch so lange deklarieren. Da fehlt der Funktionsköper. Sonst lautete der Fehler in etwa "... was not declared in this scope"
Das eigenartige ist nur, das usbCrc16Append in Zeile 241 schon einmal aufgerufen wird. An der Stelle kommt es zu keinem Fehler.
Achso: bewege mal usbFunctionSetup nach ausserhalb der main() damit die auch ausserhalb (insbesondere innerhalb usbdrv.o) sichtbar wird. So wie jetzt ist sie nur lokal gültig und beim Linken für die anderen nicht auffindbar.
Danke, das hat schonmal geholfen...! Jetz besteht nur noch das Problem mit usbCrc16Append !
> Ich mag mich irren, > > aber undefined reference ist ein Linker Problem (deswegen wird es auch > in der .o vermisst. Da kannst du noch so lange deklarieren. Du irrst nicht, ich habe das dafür geschafft. Also bitte meinen weiter oben stehenden Beitrag ignorieren. Asche. Aufs. Haupt. (Ich arbeite nicht mit gcc, und bin daher dessen Fehlermeldungen nicht gewohnt, und so auf den erstaunlich / erfreulich präzisen Angabe des Orts des Funktionsaufrufs reingefallen, den andere Linker nicht ansatzweise so präzise auszuspucken pflegen)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.