Schneller kleiner CRC-Check AVR .ASM

OP #3566768
Lesenswert?

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
Angehängte Dateien:
#3567138
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren