Hallo,
ich Suche nach ner bereits implementierten Lösung für WinAVR C, die eine 16bit CRC Prüfsumme berechnet.
Ich muss ganz ehrlich sagen, so richtig hab ich das Verfahren mit der Polynomdivision nicht verstanden. Ist eigendlich auch nicht Teil meiner Aufgabe.
Hat jemand von euch schon mal mit CRC-Prüfsummen bei der Seriellen kommunikation gearbeitet?
Ich habe auch von einem Algorithmus gelesen, bei dem nicht dividiert wird wo nur Verschiebeoperationen eingesetzt weren. (in meinen Augen besser für den AVR geeignet)
Danke schon im Voraus
MFG
Bomb
Danke Robert,
jetzt muss ich das nur noch verstehen... und für ne Zeichenfolge adaptieren.Diese ganzen shiftereien zu kapieren ist nicht so einfach..
MFG
Bomb
Schau doch einfach mal in den bei WinAVR mitgelieferten Bibiliotheken.
Mit der crc16.h solltest du glücklich werden . Viel fertiger implementiert wirst du es nicht mehr bekommen ...
Man muss einfach nur noch die Funktion _crc16_update(); aufrufen. Schau dir am besten mal die Doku dazu an...
MfG Kjion
Hallo danke
habs gefunden, aber das scheint auch wieder 'nur' ne crc über ein ein byte zu legen. Ich möchte aber, sagen wir mal 64 bytes, nacheinander übertragen und zum Schluss ne crc über das gesendete Paket mitgeben.
Das ist erforderlich für das modbus Protokoll.
edit: oder bedeutet das Update immer, dass die Methode mit dem letzten crc Stand für das neue Zeichen aufgerufen wird?
MFG
Bomb
Ja, das geht immer so weiter mfg
hehe dann ist ja gut
Wo ihr schon soviel zu CRC'S wisst. Habt Ihr zufällig das gleiche auch noch für C#?
Wo findet Ihr denn die Beispiele? Ich bin bei WinAVR überhaupt nicht auf CRC's gestoßen.
MFG
Bomb
Hallo,
ich bin auf der Suche nach dem Source zum Bilden des 16 Bit-CRC (CRC16) mit unterschiedlichen Polynomen. Die Polynome sollten vorgebbar sein (z.B. X16+X15+X2+1, X16+X12+X5+1 ....).
Der Einsatz einer Tabelle oder Teil-Tabelle ist dafür wohl nicht so
geeignet. Es sei denn sie wird auch generiert.
Hat jemand ein solches Programm parat oder weis wo ein solches zu
finden ist. Ich benötige dies in einer Microcontroller-Anwendung mit
dem 8051 und zur Überprüfung mit dem PC.
Danke für die Hilfe
Klaus
0x1021 ist das polynom theoretisch müsstest du für deinen fall nur dein polynom anpassenCode:uint16_t crc_xmodem_update (uint16_t crc, int8_t daten){ crc = crc ^ ((uint16_t)daten << 8); for (int i=0; i<8; i++) { if (crc & 0x8000) crc = (crc << 1) ^ 0x1021; else crc <<= 1; } return crc; }
0xc003 wäre X16+X15+X2+1 bzw. 1100000000000011
für den exponenten einfach das entsprechende bit. in dem 16bit hexwert setzen. das müsste man automatisieren können. über die eingabe der hexzahl könntest du dann halt das zu grunde liegende polynom ändern.
MFG
Bomb
Lesezeichen