CRC Berechnung

Gast #123043
Lesenswert?

Okay,

ich hab mir mal die Appnote 27 von Dallas/Maxim durchgelesen und mir
dann eine Routine gebastelt:

uchar CRC_8(uchar DATA, uchar CRC, uchar MASK) {
  uchar i;            //Zähler

  for(i = 8; i; i--) {
    if((CRC & 0x01) ^ (DATA & 0x01)) {
      CRC ^= MASK;
      CRC >>= 1;
      CRC |= 0x80;
    }
    else CRC >>= 1;

    DATA >>= 1;
  }

  return(CRC);
}

Parameter 1 ist das Datenbyte, für das der CRC berechnet werden soll,
Parameter 2 kann einen CRC-Wert eines vorangegangenen Bytes enthalten
(ansonsten 0x00) und Parameter 3 ist die Maske, mit der der CRC
berechnet wird.

Bitte nicht lachen, bin noch C-Anfänger!!!!

Verbesserungsvorschläge sind erwünscht, ansonsten würde ich diesen Code
in den Code-Bereich des Forums posten.

Gruß Ralf
#521000
Lesenswert?

Hallo.
Ich muss diesen mehr als alten Post mal ausgraben, weil ich eigentlich 
genau die gleiche frage habe.
und zwar sind alle codebeispiele die ich gefunden habe für bestimmte 
generatorpolynome oder ähnliches gemüntzt.
ich hab aber eine funkübertragung welche crc-geprüft übermittelt wird
(standard sind 5 nutzbyte)
meine CRC vorgabe ist ein generatorwert von 1100 0101 also 0xC5

hat jemand einen c-code welcher das problemlos kann, und das ohne 
vorbelegungen?

grundsätzlich wäre es nötig da auch mehr byte umzusetzen (können auch 
mehr sein).
habe im www leider nur code für crc-16 usw gefunden, und dieser war 
nicht anpassbar, mangels verständnis; oder eben crc-8 code, welcher 
schon firmendefinierte standarts inne hatte (da gibts wohl von 
dallas/maxim ne anwendung, siehe oben).
ich weiß das wurde hier schon viele male besprochen aber ich finde 
einfach absolut nichts passendes...
vielen dank für eure hile!!
MfG
jan
Gast #521226
Lesenswert?

Ein CRC ist ein Polynom ueber ein einen Bitstrom. Mit einem 16bit CRC 
kann man 2^16 bit, oder 8 kByte gegen 1 bit Fehler schuetzen, mit einem 
8 bit CRC kann man 2^8 bit, resp 32 Bytes. Der einfache Ansatz ist ein 
Schieberegister und estwas XOR. Dh der Aufwand ist Schieben und XOR pro 
bit. Der etwas schnellere Ansatz, bedarf einer Tabelle, und kann mit der 
Tabelle zusammen ein Byte aufs Mal machen.

Uli

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