[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