Forum: Mikrocontroller und Digitale Elektronik Hilfe bei CRC Check, Fehler in der Funktion.


von Moe (Gast)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.