mikrocontroller.net

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


Autor: Axel (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Voilà:

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

:-)

Autor: Axel (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

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

Autor: Axel (Gast)
Datum:

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

Autor: Kai_ (Gast)
Datum:

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

Autor: Ein Profi (Gast)
Datum:

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

Autor: ---- (Gast)
Datum:

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

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


Profis lesen erstmal bevor sie posten  ;-)


Gruß
Axel Höhmann


P.S. Hat der Profi auch einen Namen?

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.