www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Big to Little Endian (AVR32)


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin grade dabei eine funktion zu schreiben die mir von Big in Little 
Endian umwandelt d.h:
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?

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
uint8_t be2le (uint8_t in)
{
   uint8_t out = 0;

   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; out <<= 1; in >>= 1;
   out |= in & 1; 

   return out;
}

Oder Inline Assembler...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs nie probiert, ist irgendwo aus der Codesammlung (von peda)
unsigned char mirror( unsigned char n )
{
  n = ((n >> 1) & 0x55) | ((n << 1) & 0xaa);
  n = ((n >> 2) & 0x33) | ((n << 2) & 0xcc);
  n = ((n >> 4) & 0x0f) | ((n << 4) & 0xf0);
  return n;
}

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steh ich grad aufm Schlauch?

Ich dachte das Zeugs mit dem Little-Big-Endian bezieht sich nur auf die
Bytefolge, und nicht auf die Bitfolge!?

Autor: SoLaLa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Freizeitbastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja! Danke!

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ja! Danke!

Bedeutet das "Ja", dass du die Umkehr der Bitreihenfolge gar nicht
benötigst? Wenn doch, hier sind auch noch ein paar Varianten und eine
intensive Diskussion dazu:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein! Ich brauche genau das!  das MSB zu LSB wird und so weiter!

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist aber dann bit-reversing und hat nichts mit endianess zu tun.

Autor: SoLaLa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's damit:
unsigned __inline bitreverse(unsigned x)
{
    asm("brev %0" : "+r"(x));
    return x;
}

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.