Probleme mit io.h

Gast #2864281
Lesenswert?

Hallo,

bin momentan am verzweifeln. Wenn ich diese zwei includes (Atmel Studio 
6) nutze:

#include <avr/io.h
#include <avr/wdt.h>

dann kann ich z.B. mit Rechtsklick "Goto Implementation" auf die wdt.h 
zugreifen (öffnet sich also). Bei der io.h funktioniert das nicht.

Der Compiler scheint sie zwar zu finden, denn er meckert nicht, aber es 
scheint trotzdem irgendwas nicht zu stimmen, denn sämtliche Zugriffe auf 
Register verursachen einen Fehler beim kompilieren - "xxx undeclared"

Die beiden haben ja aber den gleichen Includepfad, wdt.h findet er auch, 
also müssten die Includepfade doch schon mal stimmen, oder?

Bin für jeden Tipp dankbar!
#2864288
Lesenswert?

<avr/io.h>

ist nur ein Sammelbecken, aus dem je nach eingestelltem Controller in 
das tatsächlich zu benutzenden ioxxx.h verzweigt wird. Wenn also die 
Registernamen nicht gefunden werden, dann ist höchst wahrscheinlich in 
den Project-Settings der falsche Controller eingestellt.
Gast #2864289
Lesenswert?

P.S.: Was Atmel angeht, bin ich noch relativ am Anfang, habe also nicht 
viel Erfahrung, auch nicht mit der Entwicklungsumgebung. Dies ist mein 
erster Versuch, Code wirklich komplett selbst zu schreiben, habe bisher 
eben einige Beispiele durchgearbeitet. (Habe vorher nur mit 
PICs/Microchip gearbeitet)
Gast #2864291
Lesenswert?

Hallo und danke für die schnelle Antwort!

In den Projekteigenschaften unter "Device" steht der richtige uC drin, 
habe das gerade eben nochmal überprüft.

Hatte auch schon versucht, direkt die passende Header-Datei für den uC 
zu includieren (also die, die mittels io.h includiert wird) das brachte 
aber leider auch keinen Erfolg.
Gast #2864894
Lesenswert?

Stefan Ernst schrieb:
> Dann rücke mal konkrete Details raus:
> welcher Controller ist das, und für welche Register kommen die
> Fehlermeldungen (am besten Copy&Paste von ein paar der Fehlermeldungen).

Ich nutze einen AT90USB1287 (auf AT90USBKEY).

Nun ist mir gerade noch was aufgefallen...die Registernamen werden im 
Editor lila (oder was auch immer das für eine Farbe ist) eingefärbt. 
Heißt, er erkennt sie ja doch irgendwie als richtig...oder? Wenn ich 
nämlich z.B. irgendeinen Namen erfinde, den es nicht wirklich als 
Register gibt, färbt er nicht ein, bleibt also schwarz.

Fehlermeldung wäre z.B.:

C:\Users\...\Test.c(139,23): 'UBRR' undeclared (first use in this 
function)
C:\Users\...\Test.c(149,11): 'TXEN' undeclared (first use in this 
function)
C:\Users\...\Test.c(149,23): 'RXEN' undeclared (first use in this 
function)




Oliver S. schrieb:
> In deiner Entwicklunsgumgebung sollte während es Kompilierens auch der
> Compileraufruf angezeigt werden (fängt mit "avr-gcc" an):

Meinst du das hier?:
C:\Program Files\Atmel\Atmel Studio 6.0\make\make.exe "Test.o"
    Building file: .././Test.c
    Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 
4.6.2
    "C:\Program Files\Atmel\Atmel Studio 
6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe" 
-funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 
-Wall -c -std=gnu99 -MD -MP -MF "Test.d" -MT"Test.d" -MT"Test.o" 
-mmcu=at90usb1287   -o"Test.o" ".././Test.c"
Gast #2865026
Lesenswert?

g457 schrieb:
> ..kleine Korrektur: ist sogar UBRR1, TXEN1 und RXEN1 - warum fangen die
> nicht bei 0 an?
>
> </ingrid>

Keine Ahnung warum das so ist. Sind aber korrekt im Code...der Compiler 
scheint nur "allgemein" am nicht bekannten(?) Register zu meckern.

Habe dort z.B. so etwas:
1
out((uint8_t)baud, UBRR1);

Keine Ahnung was da nicht passt...wahrscheinlich habe ich nur irgendwo 
eine Kleinigkeit übersehen/nicht beachtet.

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