Zitat Zitat von ReSeT
_SFR_IO_ADDR scheint ein Makro zu sein, was die tatsächliche Port Adresse ermittelt.
Ein SFR im I/O-Bereich hat zwei Adressen: Seine Adresse im RAM, also die ADresse, wo es hingemappt ist, und seine I/O-Adresse.

Die beiden Adressen unterscheiden sich um einen Offset von 0x20.

RAM-Adressen werden verwendet zusammen mit LDS, STS, ...
I/O-Adressen werden verwendet mit IN, OUT, CBI, SBIS, ...

Die Header der avr-libc stellen nur die RAM-Adresse zur Verfügung, für die I/O-Adresse muss diese also angepasst werden. Das macht das Makro.

Steht aber alles in der Doku zur avr-libc...

http://www.nongnu.org/avr-libc/user-...assembler.html
http://www.nongnu.org/avr-libc/user-...fr__notes.html

Wenn man Software einsetzt/einzusetzen gedenkt, sollte man in Betracht ziehen, auch ihre Doku zu lesen...