Forum: Mikrocontroller und Digitale Elektronik WinAVR compile errors: 'PORTB' undeclared ...


von Timo Q. (flux_ims)


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

von Andreas B. (baitronic)


Lesenswert?

#include <avr/io.h>

Gruß Andreas

von Andreas B. (baitronic)


Lesenswert?

Ahh vergiss das, nicht mein Tag, sorry

von Dirk D. (dirkd)


Lesenswert?

Schick mal Dein angepasstes Makefile. Es sieht so aus als wäre die CPU
nicht richtig definiert

von Timo Q. (flux_ims)


Angehängte Dateien:

Lesenswert?

hier ist es

von Dirk D. (dirkd)


Lesenswert?

Ändere mal Deine Makefile

SRC = ledlight.c

und nichts bei

CPPSRC =

von Timo Q. (flux_ims)


Lesenswert?

Du bist der Beste! Das hat geklappt. Vielen Dank :)

von Dirk D. (dirkd)


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

von Timo Q. (flux_ims)


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?

von Dirk D. (dirkd)


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.

von Dirk D. (dirkd)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.