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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren