Fehler mit assembler-code mega88: Error: number must be positive and less than 64

Persönliche Seite #800238
Lesenswert?

Seit dem Update auf gcc-4.3 und dem Wechsel von atmega8 auf atmega88 
meckert der assembler in Zeilen wie:
"out _SFR_IO_ADDR(UBRRH), r31" die Fehlermeldung
"flash.S:12: Error: constant value required"
"flash.S:12: Error: number must be positive and less than 64"

"out _SFR_IO_ADDR(DDRB), r31" wird nicht angemeckert.

Aus dem Makefile wird "/opt/cross/bin/avr-gcc -c -mmcu=atmega88 -I. -x 
assembler-with-cpp -Wa,-adhlns=flash.lst,-gstabs  -DF_CPU=7372800 
flash.S -o flash.o" aufgerufen.

Der Grund dürfte hier liegen:
Mega8:  UBRRH 0x20 (0x40) == 32/64
Mega88: UBRR0H (0xC5)     == 197

Was mache ich falsch?

Gruß,
Falk
Persönliche Seite #800259
Lesenswert?

Johannes M. wrote:
> in und out können nur die unteren 64 I/O-Register ansprechen. Alles
> was darüber hinausgeht muss mit lds und sts gemacht werden. Und da
> UBRR0H nunmal außerhalb dieses Bereichs liegt, gehts nicht. Schau Dir
> mal die Migration Note von ATMega8 auf ATMega88 an. Da steht alles drin,
> was man beim Wechsel beachten und ändern muss.

Danke. Lesen sollte man können. Es steht natürlich drin!

Falk,
der sich jetzt in die Ecke stellt und schämt ;-)

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