Messages in this thread | | | Date | 23 May 2011 19:38:35 -0400 | From | "George Spelvin" <> | Subject | Re: [RFC] lib: crc8: add new library module providing crc8 |
| |
>> Thanks. However, your code example is confusing.
>>> You can fill in a CRC table for an arbitrary polynomial with >>> >>> #define POLY 0xAB /* 1 + x^2 + x^4 + x^6 + x^7 (+ x^8) */ >>> typedef uint8_t crc_type; /* Must be an unsigned type */ >>> >>> void >>> crc_le(crc_type const table[256], crc_type crc, u8 const *buf, size_t len) >>> { >>> while (len--) >>> crc = (crc>> 8) ^ table[(crc ^ *buf++)& 0xff]; > >> Here is where my confusion starts. Shifting crc by 8 bits basically >> means 0 ^ table[], right?
> I think I understand the code a bit better. Your code is generic for any > given crc_type.
Yes, exactly. The crc_type has to be at least as wide as the CRC being computed. If the crc_type is only 8 bits, the shift by 8 does indeed get optimized away.
| |