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)