www.mikrocontroller.net

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


Autor: Timo Q. (flux_ims)
Datum:

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

Autor: Andreas B. (baitronic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>

Gruß Andreas

Autor: Andreas B. (baitronic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh vergiss das, nicht mein Tag, sorry

Autor: Dirk Dörr (dirkd)
Datum:

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

Autor: Timo Q. (flux_ims)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ist es

Autor: Dirk Dörr (dirkd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ändere mal Deine Makefile

SRC = ledlight.c

und nichts bei

CPPSRC =

Autor: Timo Q. (flux_ims)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du bist der Beste! Das hat geklappt. Vielen Dank :)

Autor: Dirk Dörr (dirkd)
Datum:

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

Autor: Timo Q. (flux_ims)
Datum:

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

Autor: Dirk Dörr (dirkd)
Datum:

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

Autor: Dirk Dörr (dirkd)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liegt daran, dass der Mega128 zwei UARTS hat. Bei der einen heißen die
Register deshalb entsprechend UCSR1A, UCSR1B usw...

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.