Hallo Leute, ich bin blutiger AVR Anfänger und versuche bisher erfolglos ein kleines Demo Programm (LED Blinklicht) zu kompilieren. Ich habe WinAVR installiert, das makefile angepasst ( MCU = atmega128 ...) und habe in Programmers Notepad auf Tools/Make All geklickt, mit folgender Ausgabe: avr-gcc -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=obj/ledlight.lst -std=c89 -Wundef -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-exceptions -Wall -Wa,-adhlns=ledlight.c -Wl,-Map=ledlight.map,--cref -lm ledlight.c -o ledlight In file included from ledlight.c:1: C:/WinAVR/avr/include/avr/io.h:324:6: warning: #warning "device type not defined" ledlight.c: In function `main': ledlight.c:21: error: `PORTB' undeclared (first use in this function) ledlight.c:21: error: (Each undeclared identifier is reported only once ledlight.c:21: error: for each function it appears in.) ledlight.c: In function `init': ledlight.c:32: error: `DDRB' undeclared (first use in this function) ledlight.c:33: error: `PORTB' undeclared (first use in this function) ledlight.c: In function `delay_ms': ledlight.c:46: error: `asm' undeclared (first use in this function) ledlight.c:46: error: syntax error before "volatile" make.exe: *** [ledlight] Error 1 Was muss ich tun, damit der compiler die Sachen findet? (irgendwas includen oder PATH setzen???) (Btw: mit AVR Studio läuft es) Please help, Timo
Schick mal Dein angepasstes Makefile. Es sieht so aus als wäre die CPU nicht richtig definiert
Ändere mal Deine Makefile SRC = ledlight.c und nichts bei CPPSRC =
Du bist der Beste! Das hat geklappt. Vielen Dank :)
Fein. Dan mal noch schnell ne kurze Erklärung Bei SRC gibst Du die C-Files an, die compiliert werden sollen. Es ist auch möglich dort Pfade anzugeben. z. B. lcd/lcd.c CPPSRC ist für C++-Files und ASRC für Assembler gedacht Ich bin mir im Moment nicht sicher warum der Compiler überhaupt versucht hat Dein C-File zu übersetzen; allerdings wurde bei dem Versuch nicht die CPU-Option gesetzt. Daher die Warnung aus der io.h. Und über die io.h werden die IO-Operationen (z. B. PORTB oder DDRB) definiert
Danke für die Infos. Es erschließt sich mir die Logik :) Hab aber schon das nächste Problem: Will ein Beispielprogramm zur UART Ansteuerung kompilieren (siehe http://www.kreatives-chaos.com/index.php?seite=c_uart ), aber es gibt wieder nen Haufen Fehler: avr-gcc -c -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=obj/strings.lst -std=gnu99 -Wundef -MD -MP -MF .dep/strings.o.d strings.c -o obj/strings.o strings.c: In function `main': strings.c:41: error: `UCSRB' undeclared (first use in this function) strings.c:41: error: (Each undeclared identifier is reported only once strings.c:41: error: for each function it appears in.) strings.c: In function `uart_init': strings.c:49: error: `UBRRH' undeclared (first use in this function) strings.c:50: error: `UBRRL' undeclared (first use in this function) strings.c:53: error: `UCSRB' undeclared (first use in this function) strings.c:56: error: `UCSRC' undeclared (first use in this function) strings.c:56: error: `URSEL' undeclared (first use in this function) strings.c: At top level: strings.c:60: warning: `SIG_UART_DATA' appears to be a misspelled signal handler strings.c: In function `SIG_UART_DATA': strings.c:67: error: `UDR' undeclared (first use in this function) strings.c:74: error: `UCSRB' undeclared (first use in this function) make.exe: *** [obj/strings.o] Error 1 Was ist hier wieder los?
Nicht blind Beispiele übernehmen und das Datenblatt des Controllers lesen. Die Beispiele bei kreatives-chaos sind vermutlich für den Mega8 geschrieben. Dort gibt es das Register UCSRB beim Mega128 vermutlich nicht. Daher ist es in der io Datei für den mega8 iom8.h definiert und in der iom128.h nicht. Schau Dir mal das Datenblatt zum Mega128 an. Dort gibt es ein UART (USART) Kapitel.
Kleiner Tipp: Der Mega128 hat 2 UARTS daher muß es auch 2 Register-Sätze geben deren Name sich nach dem Kanal (0 oder 1) richtet
Liegt daran, dass der Mega128 zwei UARTS hat. Bei der einen heißen die Register deshalb entsprechend UCSR1A, UCSR1B usw...
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.