Hilfe bei CRC Check, Fehler in der Funktion.

Gast #1243250
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren