CRC-Neuling

Gast #37065
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.