Byteorder

Auf dem AVR wird Little-Endian-Byteorder verwendet, d.h. das niederwertige Byte liegt an niederer Speicheradresse. Nimmt man einen 32-Bit-Wert (4 Bytes), liegen die einzelnen Bytewerte in folgender Richtung im Speicher:

Speicher →
0x00 0x01 0x02 0x03
byte0 byte1 byte2 byte3

Wichtiger Hinweis

Als Konstanten im Quelltext hexadezimal oder binär geschriebene Werte sind in Big-Endian-Schreibweise standardisiert (sie sind damit besser für Menschen lesbar). Dies ist unabhängig von der darunterliegenden Architektur bzw. der Zielarchitektur. Beispiel: Das geschriebene Wort „MOON“ in falscher Notation liegt dann rückwärts (falsch) im Speicher:

Geschrieben: 0x4c4f4f41 (falsch)
0x4d 0x4f 0x4f 0x4e
„M“ „O“ „O“ „N“
Geschrieben: 0x414f4f4e (richtig)
0x4d 0x4f 0x4f 0x4e
„N“ „O“ „O“ „M“
Speicher →
0x00 0x01 0x02 0x03
0x4e 0x4f 0x4f 0x4d
„M“ „O“ „O“ „N“

Für die AVR-Controller hat Little-Endian-Byteorder gewisse Vorteile. Um eine Zwei-Byte-Zahl in eine 4-byte-Zahl zu wandeln, muss man nur zwei mit Null gefüllte Bytes am Ende einfügen, ohne das sich dabei die Adresse verändert. Bei Big-Endian-Byteorder muss der Wert zuvor um zwei Bytes im Speicher verschoben werden.

Siehe auch: Byte-Reihenfolge (Wikipedia)