Aktuelle Zeit: 12:17:03 19.05.2013
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 → | |||
|---|---|---|---|
| &h00 | &h01 | &h02 | &h03 |
| byte0 | byte1 | byte2 | byte3 |
Bei Big-Endian-Byteorder liegen sie in umgedrehter Richtung:
| Speicher → | |||
|---|---|---|---|
| &h00 | &h01 | &h02 | &h03 |
| byte3 | byte2 | byte1 | byte0 |
Die Bit-Order eines Wertes ist jedoch beim AVR, Big-Endian. D.h. das Niederwertigste Bit steht an höherer Stelle im Speicher.
Beispiel anhand eines 8-Bit-Wertes:
7:6:5:4:3:2:1:0
Ein 16-Bit-Wert:
7:6:5:4:3:2:1:0: 15:14:13:12:11:10:9:8
Wichtiger Hinweis: Hexadezimal und dual (binär) geschriebene Werte (als Konstanten im Quelltext) sind in Big-Endian-Schreibweise standardisiert (sie sind damit besser für Menschen lesbar). Im Source werden sie automatisch korrekt umgesetzt. Die Zuweisung des hexadezimal geschriebenen Wortes „UNIX“ (&h554e4958) liegt daher rückwärts im Speicher aufgrund der Little-Endian-Byteorder:
| Speicher → | |||
|---|---|---|---|
| &h00 | &h01 | &h02 | &h03 |
| &h58 | &h49 | &h4e | &h55 |
| „X“ | „I“ | „N“ | „U“ |
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)