[elektro] C kerdes
Palasik Sandor
palasik at mail.datanet.hu
Wed Jun 10 09:35:02 CEST 2009
> short, int helyett unsigned char lett mindenhol
>
> asm betet helyett:
>
Mi lenne, ha a kész kódot írnád le és nem a kiindulópontot szerkesztési
utasításokkal? :-)
Amúgy ez egy sima CRC-nek látszik, és ha az összes bájtra elvégzed, azaz az
utolsó kettőt is beleszámolod, akkor konstanst kell kapnod.
Mindazonáltal én inkább így csinálnám:
fcslo=fcshi=0xFF;
for (i=0; i<numbyte-2; i++) {
inbyte = bte[i];
for (k=0; k<8; k++) {
status = inbyte^fcslo;
inbyte >>= 1;
fcslo >>= 1;
if (fcshi & 1)
fcslo |= 0x80;
fcshi >>= 1;
if (status & 1) {
fcshi ^= 0x84;
fcslo ^= 0x08;
}
}
}
Pl. semmi szükség az inbyte rotálására, elég a shift is, nem kellenek
többször a bitek. Szintén fölösleges összerakni és szétszedni egy "16 bites
regisztert" egy amúgy 8 bites processzoron egy sima shift kedvéért.
Érdemes áramkörként elképzelni, végül is ez nem más, csak egy rakás D
flipflop és XOR kapu.
Palasik Sándor
More information about the Elektro
mailing list