CRC-Neuling

Gast #37065
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich benoetige, fuer eine Datenuebertragung nach DIN EN 60870-5-1 eine
CRC-Pruefsummenberechnung fuer folgendes Polynom:
X^7 + X^6 + X^5 + X^2 + 1
Hat jemand fuer die zugehoerige CRC-Berechnung einen passenden
Quell-Code? Oder kann mir jemand erklaeren, wie soetwas berechnet
wird?

Schon mal vielen Dank

Gruß
Johannes
Gast #37066
Lesenswert?
• ▲
▼
Hi,

ich hab den hier genommen


unsigned char crc(unsigned char size, unsigned int * mem, unsigned char
crc)
{
   #define poly 0x1021 // g(x) = x^16+ x^12 + x^5 + 1
   unsigned int i;
   unsigned char j, b, m;

   // While (more message bits)
   for (i=0; i < size; i++)
   {
      m = mem[i];
      for( j = 8; j; j-- )
      {
         b = 0;
         if(crc & 0x80)//00)
            b++;
         crc <<= 1;           // Shift the register left by one bit,
         if ((m & 0x80) != 0)
           crc |= 1;
         m <<= 1;
         if (b != 0)  // If (a 1 bit popped out during step 3)
           crc ^= poly;          // Register = Register XOR Poly.
       }
   }
   return crc;
}

musst halt nur das Polynom anpassen.

Ob der deiner Norm entspricht weis ich allerdings nicht.

MfG
GT
Gast #37068
Lesenswert?
• ▲
▼
Hallo,
@MichaelS: Vielen Dank fuer die hilfreichen Links.

@Gerd T.: Anhand des CRCGUIDE.HTM (s. Links von MichaelS) habe ich
heraus gefunden, das aus dem Polynom X^16+X^12+X^5+1 der Hex-Wert des
Polynoms so ermittelt wird, in dem die fuehrende 1 (X^16 = 17.Bit)
einfach weggelassen wird.

Muss ich beim Polynom X^7+X^6+X^5+X^2+1 auch die fuehrende 1 (X^7 =
8.Bit) weglassen (ergibt 0x65) oder bleibt die fuehrende 1, da es ja
nur 8 bits sind (ergibt 0xE5)?

Waere gut wenn Du (oder irgend jemand) mir da weiter helfen koennte.

Gruß

Johannes
Gast #37069
Lesenswert?
• ▲
▼
Hallo Johannes,

Dein Polynom heißt 0xE5. x^7 entspricht 2^7, x^6 entspricht 2^6. Paßt
also alles in Dein Byte.

@Gert: Was ist das denn für eine CRC-Berechnung? Du rechnest mit einem
16-Bit CCITT-Polynom und gibts nur einen 8-Bit Wert zurück???


Grüße
Oliver

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