GCC kennt plötzlich UBRR nicht mehr?

Gast #666200
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!
Gast #666245
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

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