Init() vergessen.
Init() vergessen.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke radbruch, ich vermute du meinst im Code. Aber leider löst das mein Problem nicht wirklich.
Und das F_CPU = 8000000 im Makefile hat mir leider auch nicht geholfe die Fehlermeldung bleibt immernoch bestehen.
Trozdem Danke
Mfg Florian
Hallo
"Du kannst also einfach in deine .c Datei folgendes hinter den includes schreiben:" dürfte ja wohl zu spät sein, wenn die Definition in asuro.c fehlt. Vielleicht hilft es auf die schnelle F_CPU in der Zeile 145 in asuro.c zu ersetzen. Vermutlich werden an dieser Stelle einmalig die Werte für die Baudratenregister des USART berechnet. Das könnte man auch von Hand erledigen und die Werte direkt im Code eintragen. Dann würde es wieder weitergehen...
https://www.roboternetz.de/community...53308-AsuroLib
Gruß
mic
Geändert von radbruch (10.06.2012 um 05:40 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo,
ich hoffe ich nerve jetzt nicht aber es funktioniert immernoch nicht.
Ich hab alle ausprobiert was hier gesagt wurde, ich hab es ins Makefile geschrieben und in asuro.c in die Zeile 145 F_CPU = 8000000 geschrieben (Was zu nem ganzen haufen Fehlern geführt hat).
Und F_CPU = 8000000 ganz einfach in mein Programm zuschreiben hat auch nicht fuktioniert.
Danke
Hallo
Keine Ahnung was du damit meinst. Der betreffende Bereich in asuro.c sieht so aus:in asuro.c in die Zeile 145 F_CPU = 8000000 geschrieben (Was zu nem ganzen haufen Fehlern geführt hat).
Zeile 145 ist rot markiert. Hier ersetzt du F_CPU durch 8000000 oder rechnest den Wert für das jeweilige Register selbst aus:Code:/* Die serielle Schnittstelle wurde waerend der Boot-Phase schon programmiert und gestartet. Hier werden die Parameter auf 2400 1N8 gesetzt. */ #if defined(__AVR_ATmega168__) UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; UCSR0B = (1<<RXEN0) | (1<<TXEN0); UCSR0C = (1<<UCSZ00) | (1<<UCSZ01); #else UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; // set baud rate UBRRL = (((F_CPU/BAUD_RATE)/16)-1); UCSRB = (1<<RXEN)|(1<<TXEN); // enable Rx & Tx UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // config USART; 8N1 #endif
UBRRH = (((8000000/2400)/16)-1)>>8; // set baud rate
UBRRL = (((8000000/2400)/16)-1);
Oder du verwendest direkt den Wert für UBRR aus dem Datenblatt unter "Examples of Baud Rate Setting"
UBRRH=0; // set baud rate
UBRRL=207;
Das funktioniert aber nur, weil der asuro alle seine Zeiten selbst berechnet und nicht delay.h verwendet.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke,
jetzt weiss ich wass du meinst, und ich habs genaus so gemacht, aber dann kommen nurnoch mehr Fehler.
Der Code aus asuro .c:
Das führt zu diesen Fehlern:Code:#else UBRRH = (((8000000/2400)/16)-1)>>8; // set baud rate UBRRL = (((8000000/2400)/16)-1); UCSRB = (1<<RXEN)|(1<<TXEN); // enable Rx & Tx UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // config USART; 8N1 #endif
Danke für die Gedulttest.o: In function `main':
C:\Users\Grau\Desktop\Asuro/test.c:8: undefined reference to `EncoderInit'
C:\Users\Grau\Desktop\Asuro/test.c:10: undefined reference to `GoTurn'
C:\Users\Grau\Desktop\Asuro/test.c:11: undefined reference to `GoTurn'
asuro.o: In function `__vector_4':
C:\Users\Grau\Desktop\Asuro/asuro.c:225: undefined reference to `count36kHz'
C:\Users\Grau\Desktop\Asuro/asuro.c:225: undefined reference to `count36kHz'
C:\Users\Grau\Desktop\Asuro/asuro.c:226: undefined reference to `count36kHz'
C:\Users\Grau\Desktop\Asuro/asuro.c:227: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:227: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:227: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:227: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:227: undefined reference to `timebase'
asuro.o:C:\Users\Grau\Desktop\Asuro/asuro.c:227: more undefined references to `timebase' follow
asuro.o: In function `__vector_4':
C:\Users\Grau\Desktop\Asuro/asuro.c:228: undefined reference to `Ovr2IntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:228: undefined reference to `Ovr2IntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:229: undefined reference to `Ovr2IntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:229: undefined reference to `Ovr2IntFunc'
asuro.o: In function `__vector_3':
C:\Users\Grau\Desktop\Asuro/asuro.c:242: undefined reference to `count36kHz'
C:\Users\Grau\Desktop\Asuro/asuro.c:242: undefined reference to `count36kHz'
C:\Users\Grau\Desktop\Asuro/asuro.c:243: undefined reference to `count36kHz'
C:\Users\Grau\Desktop\Asuro/asuro.c:244: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:244: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:244: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:244: undefined reference to `timebase'
C:\Users\Grau\Desktop\Asuro/asuro.c:244: undefined reference to `timebase'
asuro.o:C:\Users\Grau\Desktop\Asuro/asuro.c:244: more undefined references to `timebase' follow
asuro.o: In function `__vector_2':
C:\Users\Grau\Desktop\Asuro/asuro.c:269: undefined reference to `switched'
C:\Users\Grau\Desktop\Asuro/asuro.c:269: undefined reference to `switched'
asuro.o: In function `__vector_14':
C:\Users\Grau\Desktop\Asuro/asuro.c:303: undefined reference to `AdcIntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:303: undefined reference to `AdcIntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:304: undefined reference to `AdcIntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:304: undefined reference to `AdcIntFunc'
asuro.o: In function `Init':
C:\Users\Grau\Desktop\Asuro/asuro.c:181: undefined reference to `FrontLED'
C:\Users\Grau\Desktop\Asuro/asuro.c:182: undefined reference to `BackLED'
C:\Users\Grau\Desktop\Asuro/asuro.c:183: undefined reference to `BackLED'
C:\Users\Grau\Desktop\Asuro/asuro.c:184: undefined reference to `StatusLED'
C:\Users\Grau\Desktop\Asuro/asuro.c:186: undefined reference to `MotorDir'
C:\Users\Grau\Desktop\Asuro/asuro.c:187: undefined reference to `MotorSpeed'
C:\Users\Grau\Desktop\Asuro/asuro.c:189: undefined reference to `autoencode'
C:\Users\Grau\Desktop\Asuro/asuro.c:189: undefined reference to `autoencode'
C:\Users\Grau\Desktop\Asuro/asuro.c:191: undefined reference to `Ovr2IntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:191: undefined reference to `Ovr2IntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:192: undefined reference to `AdcIntFunc'
C:\Users\Grau\Desktop\Asuro/asuro.c:192: undefined reference to `AdcIntFunc'
Hallo
Nur keine Panik. Das F-CPU-Problem betraf den Preprocessor der vor dem Kompilieren die #defines ersetzt. Das scheint jetzt funktioniert zu haben, denn nun wird versucht, das C-Programm in die Maschinensprache der AVRs zu übersetzen. Dabei "merkt" der Kompiler, dass er für einige Funktionen die Definitionen nicht findet: "undefined reference to"
Das passiert, wenn asuro.c nicht gefunden wurde. Die Meldung dazu sollte etwa so aussehen: "temp.c:5:20: error: asuro.h: No such file or directory" Aber das erscheint ja bei dir offensichtlich nicht. Hier kann ich nun wirklich nur raten: Du includest die Datei asuro.h mit "", für die aktuelle Library muss man sie aber mit <> einbinden (""= im selben Verzeichniss wie der Quellcode des Programms, <> im GCC-Pfad) Das ist aber eher geraten als gewußt, denn ich verwende Version 2.3 der Lib.
Gruß
mic
[Edit]
Das count36kHz nicht gefunden wird zeigt, dass wirklich die orginale CD-Library eingebunden wurde. Ab Version 2.3, und deshalb auch in der aktuellen Lib, ist count36kHz bekannt.
Geändert von radbruch (10.06.2012 um 16:53 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen