Ich sehe gerade, dass ich im falschen Abschnitt der Datei geguckt habe.
Korrektur:
1 | #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
|
2 |
|
3 | #ifndef __SFR_OFFSET
|
4 | # if __AVR_ARCH__ >= 100
|
5 | # define __SFR_OFFSET 0x00
|
6 | # else
|
7 | # define __SFR_OFFSET 0x20
|
8 | # endif
|
9 | #endif
|
10 |
|
11 | #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
|
Zusätzlich zu dem Offset wird das Argument wohl noch als "volatile
uint8_t *" gekennzeichnet, was Sinn ergibt, denn es sind ja Zeiger auf 8
Bit Register. Volatile deswegen, weil der Compiler Zugriffe nicht weg
optimieren soll. Wenn jemand im Programmcode dreimal schreibt, soll das
auch dreimal im Register ankommen, nicht nur der letzte Wert. Und wer
dreimal liest, will wirklich dreimal aus dem Register/Port lesen, nicht
nur einmal und dann den selben Wert 2x wieder verwenden.