Big to Little Endian (AVR32)

Gast #911833
Lesenswert?
• ▲
▼
Bin grade dabei eine funktion zu schreiben die mir von Big in Little 
Endian umwandelt d.h:
1
char Data =0x02;

wird beim Avr ja Big Endian
MSB 6 5 4 3 2 1 LSB

bräuchte aber:
LSB 1 2 3 4 5 6 MSB

nur ich kann nicht direkt auf die Bits zugreifen. Wäre dann am 
einfachsten mit einer Schleife drüber und vertauschen. Gibt es sonst 
noch irgendwelche "einfachen" und schnellen Möglichkeiten?
Gast #911857
Lesenswert?
• ▲
▼
Sowas? Falls es schneller sein soll geht evtl. ne 256 Byte große 
Lookup-Table, hängt dann aber von der Geschwindigkeit Deines Speichers 
ab ob das signifikant schneller ist.
1
uint8_t be2le (uint8_t in)
2
{
3
   uint8_t out = 0;
4

5
   out |= in & 1; out <<= 1; in >>= 1;
6
   out |= in & 1; out <<= 1; in >>= 1;
7
   out |= in & 1; out <<= 1; in >>= 1;
8
   out |= in & 1; out <<= 1; in >>= 1;
9
   out |= in & 1; out <<= 1; in >>= 1;
10
   out |= in & 1; out <<= 1; in >>= 1;
11
   out |= in & 1; out <<= 1; in >>= 1;
12
   out |= in & 1; 
13

14
   return out;
15
}

Oder Inline Assembler...
Gast #911866
Lesenswert?
• ▲
▼
Habs nie probiert, ist irgendwo aus der Codesammlung (von peda)
1
unsigned char mirror( unsigned char n )
2
{
3
  n = ((n >> 1) & 0x55) | ((n << 1) & 0xaa);
4
  n = ((n >> 2) & 0x33) | ((n << 2) & 0xcc);
5
  n = ((n >> 4) & 0x0f) | ((n << 4) & 0xf0);
6
  return n;
7
}
Gast #911875
Lesenswert?
• ▲
▼
ich als Neuling mal wieder... in Assembler müßte
LSL Rn
ROR Rm
LSL Rn
ROR Rm
LSL Rn
ROR Rm
LSL Rn
ROR Rm
LSL Rn
ROR Rm
LSL Rn
ROR Rm
LSL Rn
ROR Rm
LSL Rn
ROR Rm

in 16 Takten das Ergebnis der Wandlung von Rn in Rm zurückgeben da das 
CarryFlag dazwischen nicht beeinflußt wird
Gast #911877
Lesenswert?
• ▲
▼
Ich verstehe die Frage nicht. Big/Little Endian legen die physikalische 
Reihenfolge der Bytes von Zahlen oder Zeigern fest, die mehr als ein 
Byte belegen. In der Frage taucht nur ein "char", also ein Byte auf. Die 
Bitreihenfolge in einem Byte bzw. char ist in C immer dieselbe. Als 
einziger unterschied kann "char" "signed char" oder "unsigned char" 
bedeuten, aber das war ja wohl nicht gemeint.

http://de.wikipedia.org/wiki/Byte-Reihenfolge
Gast #911920
Lesenswert?
• ▲
▼
hmmm... wir wissen ja jetzt nicht, wozu das gut sein soll,
aber:
beim PPC ist es jedenfalls oft so, daß schaltungstechnisch D31 bis D0 an 
Flashbausteine D0 bis D31 verdrahtet werden. Und damit eben reversed 
order.
Die Tools, die man dann aufm PC benutzt um das ganze anzuzeigen "biegen" 
das ganze dann ja wieder in eine lesbare Form

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.