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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.