Folgender Code (CRC32) basiert auf dem entsprechenden Wikipedia-Artikel
und nun möchte ihn für den AVR möglichst platzsparend vereinfachen. Es
soll einfach eine CRC32 über eine 32-Bit-Zahl berechnet werden.
1 | uint32_t crc32(uint32_t x) {
|
2 | static const uint32_t CRC32MASK = 0x04C11DB7;
|
3 | uint32_t c = 0;
|
4 | for (uint8_t i = 0; i < 32; i++) {
|
5 | if ((c >> 31) ^ (x & 1)) c = (c << 1) ^ CRC32MASK;
|
6 | else c <<= 1;
|
7 | x >>= 1;
|
8 | }
|
9 | return c;
|
10 | }
|
Leider habe ich so meine Probleme, zu erkennen, welche Umformung es dem
Compiler einfacher macht... Erfahrungsgemäß ist das Ganze nämlich noch
nicht optimal. ;)