Forum: Mikrocontroller und Digitale Elektronik Bits elegant spiegeln, wie?


von Axel (Gast)


Lesenswert?

Hallo,

wie spiegelt man am schnellsten ein Byte, also
wie vertauscht man Bit 7 und 0, 6 und 1, 5 und 2, 4 und 3?

Gibt's etwas schnelles, als einzelne Bits in T-Flag und wieder
raus?


Gruß
Axel

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Voilà:

ldi temp, 8
loop:
rol quelle
ror ziel
dec temp
cpi temp, 0
brne loop

:-)

von Axel (Gast)


Lesenswert?

Hallo,

danke für die Version, aber die Betonung lag auf schnell ;-)
Deine Version benötigt 48Takte.

Die folgende 16 Takte:
  bst r1, 7
  bld r2, 0
  bst r1, 6
  bld r2, 1
  bst r1, 5
  bld r2, 2
  bst r1, 4
  bld r2, 3
  bst r1, 3
  bld r2, 4
  bst r1, 2
  bld r2, 5
  bst r1, 1
  bld r2, 6
  bst r1, 0
  bld r2, 7


Geht's nicht noch schneller?


Gruß
Axel

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ach so... ich habe auf Codegröße optimiert.
Ich kann mir nicht vorstellen dass es schneller geht. Deine Version 
braucht nur 2 Befehle pro Bit, um das schneller zu machen müsste der AVR 
einen Befehl können der ein Bit direkt von einem Register in ein anderes 
kopieren kann... und das gibt es nicht.
Wozu brauchst du so eine Funktion? FFT?

von Axel (Gast)


Lesenswert?

Hallo Andreas.

deine Version wird übrigens ähnlich schnell, wenn man die
Schleife abrollt.

FFT? Nein viel trivialer. Ich will einen Graphik-LCD-Controller
ansteuern, der seine Row-Leitungen nicht schön der Reihe nach an
das Display legt sondern pro 8 Leitungen entweder komplett
gespiegelt oder nur im HighNibble oder nur im LowNibble.

Entweder mache lege ich mehrere Bitmaps für jedes Zeichen oder
ich schüttele die Bits zur Laufzeit.

Ich hatte die Hoffnung, daß es vielleicht einen kleinen
Trick gibt, so wie z.B. die drei XORs zum Vertauschen, halt
irgendetwas, daß die Bits gleichzeitig bearbeitet.

Gruß
Axel

von Kai_ (Gast)


Lesenswert?

Hallo Axel,


wenn Du im Flash noch genug Platz (256 bytes) hast,
kannst Du dort ein lookup table anlegen.
LPM verbraucht 3 Cycles.

Ist schnell, aber nicht elegant...



Gruss,
Kai

von Ein Profi (Gast)


Lesenswert?

Hallo,

Ein Byte negiert man, in dem man es Exclusiv-Oder mit FF (hex) verknüpft 
!!!

Als Anfänger darf man noch solche schlechten Lösungen wie eure posten 
...!

von ---- (Gast)


Lesenswert?

Leider die Frage nicht genau gelesen!
Es wurde nach spiegeln nicht negieren gefragt.

von Axel (Gast)


Lesenswert?

Hallo,


Profis lesen erstmal bevor sie posten  ;-)


Gruß
Axel Höhmann


P.S. Hat der Profi auch einen Namen?

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.