Forum: Compiler & IDEs Bitreverse elegant programmieren


von Peter Z. (Gast)


Lesenswert?

Hallo, es geht um Bitreverse elegant programmieren.
Ich hab mir gedacht:
1
bla = ((bla >> 4) & 0x0F)|((bla << 4) & 0xF0);
2
bla = ((bla >> 2) & 0x33)|((bla << 2) & 0xCC);
3
bla = ((bla >> 1) & 0x55)|((bla << 1) & 0xAA);
oder wär
1
asm("rol r24");
2
asm("ror r25");
3
asm("rol r24");
4
asm("ror r25");
5
asm("rol r24");
6
asm("ror r25");
7
asm("rol r24");
8
asm("ror r25");
9
asm("rol r24");
10
asm("ror r25");
11
asm("rol r24");
12
asm("ror r25");
13
asm("rol r24");
14
asm("ror r25");
15
asm("rol r24");
16
asm("ror r25");
das in ASM so besser?

von Martin (Gast)


Lesenswert?

Aus der Hüfte geschossen: schneller & besser ist eine Tabelle.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bemüh mal die Forensuche, das Thema wurde schon mal ausgiebig
diskutiert (ist aber ein Weilchen her).

von Michael W. (Gast)


Lesenswert?

Martin schrieb:
> Aus der Hüfte geschossen: schneller & besser ist eine Tabelle.
Und übersichtlicher!

von Martin (Gast)


Lesenswert?

Markus Wagner schrieb:

> Martin schrieb:
>> Aus der Hüfte geschossen: schneller & besser ist eine Tabelle.
> Und übersichtlicher!

Das sehe ich nicht so. Und im übrigen ist es so, dass es häufig auf die 
Geschwindigkeit ankommt (z. B. FFT).

von Εrnst B. (ernst)


Lesenswert?

sowas hier?

_builtin_avr_insert_bits (0x087654321, bla , 0);

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Εrnst B✶ schrieb:
> sowas hier?
>
> _builtin_avr_insert_bits (0x087654321, bla , 0);

Eher mit 0x01234567

von Nicolas S. (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> _builtin_avr_insert_bits

Schade, diese Funktion hat genau 2 Google-Treffer. Einer davon ist 
dieser Thread. Im anderen kommt das Wort gar nicht vor.

von Εrnst B. (ernst)


Lesenswert?

Johann L. schrieb:
> Eher mit 0x01234567

Stimmt.
Ermm... "War nur ein Test ob ihr auch aufmerksam seid"  :)

Nicolas S. schrieb:
> Schade, diese Funktion hat genau 2 Google-Treffer

versuchs hier:

http://gcc.gnu.org/onlinedocs/gcc/AVR-Built_002din-Functions.html

(ich hatte ausserdem vorne noch einen Unterstrich vergessen...:
1
__builtin_avr_insert_bits
findet gleich mehr...)

von Mike (Gast)


Lesenswert?


von Martin (Gast)


Lesenswert?

Nicolas S. schrieb:
> Εrnst B✶ schrieb:
>> _builtin_avr_insert_bits
>
> Schade, diese Funktion hat genau 2 Google-Treffer. Einer davon ist
> dieser Thread. Im anderen kommt das Wort gar nicht vor.

Wieso schade? Ernst hat gar nicht verstanden worum es geht.

von Nicolas S. (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> http://gcc.gnu.org/onlinedocs/gcc/AVR-Built_002din...

Klasse! Danke! Wieder eine sinnvolle neue Funktion gelernt.

von Εrnst B. (ernst)


Lesenswert?

Martin schrieb:
> Ernst hat gar nicht verstanden worum es geht.

Bitreihenfolge in einem Byte umdrehen, möglichst elegant, oder nicht?

"elegant" ist es für mich, vorgefertigte Intrinics, Lib-funktionen usw. 
zu verwenden, anstatt das Rad zum X-ten mal neu zu erfinden. Egal ob per 
XOR-Magie oder inline-ASM.

von Mr.T (Gast)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Sehr elegant und sehr schnell, belegt aber zwei 8-Bit-Ports:
1
  PORTC = bla;
2
  bla   = PIND;

Die Pins von Port C und D sind dabei extern überkreuz verdrahtet.

von Martin (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> Martin schrieb:
>> Ernst hat gar nicht verstanden worum es geht.
>
> Bitreihenfolge in einem Byte umdrehen, möglichst elegant, oder nicht?
>
> "elegant" ist es für mich, vorgefertigte Intrinics, Lib-funktionen usw.
> zu verwenden, anstatt das Rad zum X-ten mal neu zu erfinden. Egal ob per
> XOR-Magie oder inline-ASM.

Sehe ich auch so.

von ./. (Gast)


Lesenswert?

Auf einem richtigen Controller:

asm(" flip");

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.