www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Obdev USB mit ATtiny25


Autor: Sören Dierking (tweety955)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Maxxie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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"

Autor: Sören Dierking (tweety955)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das eigenartige ist nur, das usbCrc16Append in Zeile 241 schon einmal 
aufgerufen wird. An der Stelle kommt es zu keinem Fehler.

Autor: Maxxie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sören Dierking (tweety955)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das hat schonmal geholfen...! Jetz besteht nur noch das Problem 
mit usbCrc16Append !

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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)

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.