Nils schrieb:> Bis auf das zweite Byte sind das alles Bit-Reverse Operationen.
Genau. Die Funktion
y = bitrev(x);
dreht dir ein einzelnes Byte entsprechend um.
Nils schrieb:> Bis auf das zweite Byte sind das alles Bit-Reverse Operationen.
Das zweite Byte ist bereits im Quellstring falsch in der
Bit-Darstellung.
Wenn man 48h richtig als 01001000b darstellt, stimmt auch das Ziel-Byte
12h (00010010b).
spess53 schrieb:> Geht einfacher:
Einfacher liegt hier im Auge des Betrachters. Einfacher finde ich meine
Version, deine könnte dafür aber schneller sein.
spess53 schrieb:> Ist nicht meine. Ich wusste nur das es das Problem hier schon mal gab.
Stimmt, is von PeDa. Aber er scheint bekannt dafür, dass sein Code nicht
auf Anhieb ersichtlich is ;)
Hatte mich schon gewundert das du C programmierst, du bist doch ASM
Spezi nicht wahr?
Hi
>Hatte mich schon gewundert das du C programmierst, du bist doch ASM>Spezi nicht wahr?
Na ja. Manchmal kommt auch C-Spezies etwas brauchbares. Eine
ASM-Umsetzung dieses Codes habe ich in meiner Mathe Lib.
MfG Spess
Michael R. schrieb:> ja hast recht verhauen aber scheint ja klar zu sein was ich vor habe> bitrev ist in keinster weise verfügbar leider. grrrr
Dann solltest du darüber nachdenken, selber eine solche Funktion
verfügbar zu machen.
Hast du schon mal an selber programmieren gedacht? ;-)
Ingo L. schrieb:> Hatte mich schon gewundert das du C programmierst, du bist doch ASM> Spezi nicht wahr?
In ASM ist das Problem ja so trivial lösbar...
8mal ROL und ROR in einer Schleife geht rasend schnell.
Hi
>In ASM ist das Problem ja so trivial lösbar...>8mal ROL und ROR in einer Schleife geht rasend schnell.
Also mindestens 24 Befehle + Kleinkram.
Da ist PeDas Routine kürzer und schneller
[avrasm]
mirror_fast: push r17
swap r16
mov r17,r16
lsr r16
lsr r16
lsl r17
lsl r17
andi r16,$33
andi r17,$CC
or r16,r17
mov r17,r16
lsr r16
lsl r17
andi r16,$55
andi r17,$AA
or r16,r17
pop r17
ret
[{avrasm]
MfG Spess
Man betrachte den Titel: Arduino Bit Shifting Problem
- Es stellt sich heraus dass das Anliegen nichts mit
Bit shiften zu tun hat.
- es darf gefragt werden was denn Arduino mit Bit
Shifting zu tun hat (klingt nach: "der Arduino kann
nicht Bit shiften").
- der TO ist nicht fähig die Hinweise zum Posten von
Quelltext zu lesen und umzusetzen.
Da geht es in einem Thread drunter und drüber, was für
eine verquere Welt .....
Hi
Über den Dingen (Gast) schrieb
>- Es stellt sich heraus dass das Anliegen nichts mit> Bit shiften zu tun hat.
Wieso nicht? In allen vorgestellten Lösungen wird 'geshiftet'.
Der Rest von dir ist genauso daneben.
MfG Spess
spess53 schrieb:> Also mindestens 24 Befehle + Kleinkram.>> Da ist PeDas Routine kürzer und schneller
Beides Erstere bezweifele ich.
Zu "schneller" muss ich mal die Takte zählen!
Route_66 H. schrieb:> Zu "schneller" muss ich mal die Takte zählen!
Und dafür müsstest du die tatsächliche Zielhardware kennen... Dein
AVR-ASM funktioniert auf nem AVR, es mag aber auch sein das er einen
Arduino mit nem 32-Bitter verwendet. Daher wäre hier eine Lösung in C
angesagt, wie von mir oder Spess, dein ASM hilft hier unter Umständen
dem TE nicht weiter...
O.K.
Pedas Variante ist schneller, egal auf welcher Hardware!
Drei Vertauschungen sind effektiver als 8 mal Hin- und Herschieben.
Der TE sollte das Prinzip verstehen, und selbst für seine Hardware und
Softwareumgebung umsetzen.
Ingo L. schrieb:> Oder er erschlägt das Problem "Brute-Force":
Da möchte ich gern mal den ASM-Output des so genialen Compilers sehen!
(c-hater sicher auch?)
Ingo L. schrieb:> Frank M. schrieb:> Eigentlich ist das nix anderes als eine ausgerollte Schleife.>> Eben, die eingerollte Schleife dazu schrieb ich bereits weiter oben
Der Witz ist: Die eingerollte braucht mehr Bytes an Code als die
ausgerollte.
Aus Deiner LSS lese ich: 50 Bytes, aus meiner LSS lese ich: 42 Bytes.
Die Schleife lohnt sich also erst bei größeren Bitbreiten als 8. Aber
auch da gibt es für 16Bit und 32 Bits Alternativen, zum Beispiel diese
hier:
Zu diesem Thema gabs hier auch schon einen ausführlichen Thread - inkl.
Lösungsvorschläge über Lookup-Tables (für Nibbles), um so schnell wie
möglich zu sein.
Geh ich recht in der Annahme, dass du Route_66 H, überrascht bist, dass
das, was der Compiler generiert, doch ganz ok ist, sodass du nun auf C
umgestiegen bist?
SCNR