www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC Berechnung


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann mir bitte jemand erklären, wie ein CRC funktioniert?

Offenbar sind meine Stichwörter, mit denen ich GOOGLE gefüttert habe,
falsch gewählt, denn ich habe nichts brauchbares gefunden. Ich suche
eine möglichst einfache Beschreibung zu CRC.

Gruß Ralf

Autor: Johannes M. Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan Dressler (keyman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alban (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den Links nichts dabei gewesen was dir gefällt?:

http://www.mikrocontroller.net/forum/4?filter=crc*

Autor: Weisnix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal bei www.wikipedia.de vorbeigeschaut?

Autor: Uli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.