Forum: Compiler & IDEs GCC kennt plötzlich UBRR nicht mehr?


von Fred (Gast)


Lesenswert?

Hallo!
Habe heute ein Projekt kompilieren wollen, das vor dem Wochenende noch 
super funktionierte. Heute bekomm ich plötzlich diese Fehlermeldung:

../os_Serial.c: In function 'com_init':
../os_Serial.c:41: error: 'UBRR' undeclared (first use in this function)
../os_Serial.c:41: error: (Each undeclared identifier is reported only 
once
../os_Serial.c:41: error: for each function it appears in.)

Es geht um das Baudraten Register meines ATMega16, das ich gerne setzen 
würde um über den USART Daten auszutauschen...

Hat Jemand eine Idee was da los ist?
Danke!

von Falk B. (falk)


Lesenswert?

@ Fred (Gast)

>Es geht um das Baudraten Register meines ATMega16, das ich gerne setzen
>würde um über den USART Daten auszutauschen...

Das heisst ja auch UBRRL und UBRRH ;-)

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#UART_initialisieren

MFG
Falk

von mthomas (Gast)


Lesenswert?

Möglicherweise wurde "vor dem Wochenende" noch für einen anderen AVR 
kompiliert, also anderer mmcu-Parameter und damit indirekt auch eine 
andere io*.h-Datei der avr-libc. Nicht für alle AVR (auch nicht für 
ATmega16) kann in den Registerdefinitionen der avr-libc ein "16bit" UBRR 
definiert werden, da die Addressen von UBRRL und UBRRH nicht 
aufeinandernfolgen. Für diese ist die von Falk genannte Vorgehensweise 
erforderlich. Ein paar Schnippsel aus avr-libc io*.h-Dateien zur 
Veranschaulichung.
1
// aus iom16.h fuer ATmega16
2
[...]
3
#define UBRRL   _SFR_IO8(0x09)
4
[...]
5
#define UBRRH   _SFR_IO8(0x20)
6
7
// aus iom169.h fuer ATmega169
8
[...]
9
#define UBRR   _SFR_MEM16(0xC4)
10
#define UBRRL  _SFR_MEM8(0xC4)
11
#define UBRRH  _SFR_MEM8(0xC5)
12
[...]

Martin Thomas

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.