Hallo, für ein Hausbusprojekt habe ich heute meinen CRC-Check fertiggestellt und wollte ihn hier mal veröffentlichen. Vielleicht kann der eine oder andere damit etwas anfangen. Mein Augenmerk lag sowohl auf der Ausführungsgeschwindigkeit als auch auf der Codegröße. Im Mittel braucht er etwa 170-210 Takte und hat eine Codegröße von 38 Bytes. Falls noch jemand was zum optimieren entdeckt, gerne um Feedback. Viel Spaß damit
Thomas O. schrieb: > Falls noch jemand was zum optimieren entdeckt Das hier
1 | sbrc temp, 7 ;Prüfen ob höherwertigstes Bit = 1 |
2 | rjmp XOR ;wenn ja Exclusive OR |
müsste sich zu einem brns XOR ersetzen lassen wenn man dafür sorgt, dass nur Operationen auf temp das SREG verändern. Mit ein bisschen umstellen von Operationen spart man noch einen Befehl. Ungetestet:
1 | tst temp |
2 | brns XOR ;wenn bit7 == 1: Exclusive OR schieben: |
3 | |
4 | schieben: |
5 | lsl temp3 ;Die 3 Datenbytes werden jeweils |
6 | rol temp2 ;um 1 nach links geschoben |
7 | rol temp |
8 | test: |
9 | brnc schieben ;wenn bit7 == 1: Exclusive OR schieben: |
10 | |
11 | XOR: |
12 | eor temp, polynom |
13 | cpse temp3, zero |
14 | rjmp test |
15 | cpse temp2, zero |
16 | rjmp test |
17 | |
18 | end: rjmp end |
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.