WinAVR compile errors: 'PORTB' undeclared ...

OP #345484
Lesenswert?

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
#345491
Lesenswert?

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
OP #345492
Lesenswert?

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?
#345493
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren