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.