mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Little Endian oder Big Endian Format?


Autor: Owen Senmeis (senmeis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Es gibt eine Option in manchen Protokollstack: Little Endian (Intel) 
oder Big Endian (Motorola) Format. Ich denke, diese ist sinnvoll für 16- 
oder 32-Bit uC wegen mehreren Bytes. Hat diese Bedeutungen für 8-Bit uC?

MfG
Senmeis

Autor: Fabio S. (codehamster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/Byte-Reihenfolge

Kommt auf den Prozessor an! Schau in deinem UserGuide dort steht 
sicherlich auch wie die Bit's der Bytes organisiert sind! hatte auch 
schon Prozessoren wo die Bitreihenfolge gedreht war!

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Owen Senmeis wrote:

> Hat diese Bedeutungen für 8-Bit uC?

Ja, denn auch 8bit Micros pflegen mit Daten grösser als 8 Bits zu 
arbeiten. Und dann werden die irgendwie im Speicher angelegt.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat diese Bedeutungen für 8-Bit uC?
Eine Bedeutung hat Little/Big-Endian für einen Prozessor nur, wenn er 
mit anderen (externen) Teilnehmern kommuniziert, und dabei andere Daten 
als nur Zeichen (chars) überträgt.

Wie der uP intern seine Daten ablegt, ist an sich egal, solange man 
nicht z.B. ein char-Array auf long castet. Und das passiert am ehesten, 
wenn von aussen byteweise irgendwelche Daten hereinkommen.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int x = 0x1234;

*(char *)&x liefert bei little- und big-endian unterschiedliche 
Ergebnisse, ganz egal ob der Prozessor 8/16/32/64bittig ist.

Bei sauberer Programmierung ist das kein Problem. Aber manche Leute 
verwenden auch gern mal unions in denen Typen verschiedener Grösse 
zwecks Umwandlung übereinander liegen - und finden das ok.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mal eine Frage zwischen rein, wenn ich vom motorolla-format ausgehe und 
dann auf intel umwandle, muss ich dann alle bits spiegeln oder nur 
jeweils die Bits von einem Byte, also die Reihenfolge der Bytes bleibt 
gleich, nur die Bits in den Bytes werden gedreht, oder wird alle 
gedreht?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur die Bytes. Die Bits werden zwar manchmal anders numeriert, aber 
deren Wertigkeit im Byte ändet sich nicht.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es werden KEINE Bits gespiegelt.
Es geht beim Thema Endianness lediglich um die Reihenfolge der BYTES.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@lkmiller: Formal korrekt aber ein bischen krass formuliert. Es spielt 
ja auch dann eine Rolle, wenn man einfach nur mit vorgegebenen 
Datenstrukturen umgeht. Beispielsweise einer bei Controllern recht 
verbreiteten SD-Card mit FAT Filesystem.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es bei nem 8-Bit Controller wie z. B. Atmel AVR nicht nur Sache des 
Compiler, ob big oder little endian verwendet wird?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz. Es gibt ein paar Stellen die das nahelegen:

- 16bit-Werte in I/O-Registern sind little-endian, soweit diese Register 
überhaupt direkt hintereinander stehen.

- Ebenso die Anordnung in Prozessor-Registern, zumal Register in den 
RAM-Bereich gemappt werden.

- Und die Return-Adressen auf dem Stack sind daher konsequenterweise bei 
AVRs big endian.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne nur einen 8bit Prozessor, bei dem hardwareseitig die Anordnung 
von 16bit Werten nirgends vorkommt, nicht in den Befehlen, nicht den 
Vektoren, nicht auf dem Stack, einfach nirgends: SC/MP.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas
Von wann ist der 8Bitter? 1943?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fast. Aus den 70ern, vorrangig auf Embedded Systems (sic) und günstigen 
Preis optimiert. Anfangs in PMOS gebaut war er wohl einer der 
langsamsten Micros überhaupt (12-46µs pro Befehl).

Hierzulande eigentlich nur deshalb in grösseren Kreisen bekannt, weil 
Elektor damals recht ernsthaft daran rumbaute. Ein 8080 war damals für 
Bastlerkreise prohibitiv teuer.

Zu den interessanten Eigenschaften gehörte, dass es keinen direkten 
Sprungbefehl gab, der sich weiter als 128 Bytes wegbewegte (und auch 
keinen Unterprogrammaufruf). Schon in einem einem kleinen 2KB Tiny-Basic 
wimmelte es infolgedessen von Sprungkaskaden von einem Ende zum anderen.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das würde ich dann aber nicht "interessante Eigenschaft" nennen, eher 
mangelnde Realitätsnähe des Chipddesigners :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.