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
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
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
Bei den Links nichts dabei gewesen was dir gefällt?: http://www.mikrocontroller.net/forum/4?filter=crc*
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
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.