Hallo,
ich versuche gerade eine CRC Auswertung in C zu schreiben.
Empfangen wird ein Byte-Array der Länge X, das Generatorpolynom ist mit
x^8+x^2+x+1 festgelegt.
Folgende Funktion habe ich mir überlegt irgendwo ist aber noch der Wurm
drin. ???
1 | ...
|
2 | #define GENERATOR_POLYNOM 0b100000111
|
3 | ...
|
4 |
|
5 | unsigned char CRC_Check(unsigned char* data, unsigned char length)
|
6 | {
|
7 | unsigned short rest;
|
8 | unsigned short gpolynom=GENERATOR_POLYNOM;
|
9 | unsigned char i, byte;
|
10 |
|
11 | rest = *data<<1; //1.Byte holen und um eins nach links schieben
|
12 | data++;
|
13 | rest |= *data>>7; //MSB vom 2.Byte ist LSB von rest
|
14 | rest = rest^gpolynom;
|
15 | for( byte=1; byte<length; byte++)
|
16 | {
|
17 | for( i=1; i<=7; i++)
|
18 | {
|
19 | rest = (rest<<1);
|
20 | if( (*data<<i) & 0b10000000 ) //nächstes Bit anhängen
|
21 | rest |= 1;
|
22 | if( rest & 0b100000000 ) //ist rest durch gpolynom teilbar?
|
23 | rest = rest^gpolynom;
|
24 | }
|
25 | data++;
|
26 | }
|
27 | return (unsigned char)rest;
|
28 | }
|