Hallo, mangels C-Kenntnis komm ich nicht dahinter wie hier (siehe Bild) die Checksumme von zwei Bytes berechnet wird?
Moin, Es gibt hier: https://reveng.sourceforge.io/ eine Software, die ich fuer solche "CRC-Sauereien" recht gut geeignet finde. Damit kann ich zumindest das Beispiel links auf deinem Foddo so nachvollziehen:
1 | reveng -m "CRC-8/NRSC-5" -c beef |
2 | 92 |
Unn nu? Gruss WK
ich hatte das mal für einen CAN Nachricht hier aufklabustert, vielleicht hilft dir das ja, das Ganze zu verstehen. https://www.mikrocontroller.net/articles/CAN_CRC_Berechnung
Dergute W. schrieb: > Unn nu? Ja ganz nett nur hätte ich gern die konkrete Berechnungsverschrift in diesem Fall. Und sehr gerne würde ich verstehen was nun der Vorteil so berechneter Checksummen (im Vergleich zur einfachen Summe) ist.
Dergute W. schrieb: > Vielleicht hilft dir der "painless guide": Ja danke, dort ist immerhin erklärt welche Schwächen die einfache Summe mod 256 hat...
Moin, Jan V. schrieb: > Sonst niemand hier der das dekodieren könnte? Was willst du denn dekodieren? Gruss WK
Dergute W. schrieb: > Was willst du denn dekodieren? Den C-Code. Wie die Checksumme nun genau berechnet wird. Dank Dergute W. schrieb: > Es gibt hier: > https://reveng.sourceforge.io/ > eine Software kann ich die nun wenigstens berechnen lassen (wenn 92 kein Zufallsergebnis war)
:
Bearbeitet durch User
Moin, Axo, Jan V. == Michi. Jan V. schrieb: > Dergute W. schrieb: >> Was willst du denn dekodieren? > > Den C-Code. Wie die Checksumme nun genau berechnet wird. Puh, das ist halt etwas schwierig, wenn du kein C kannst. Kannst du irgendeine andere Programmiersprache? CRC ist in jeder Sprache immer ein lustiges Geschiebe und ver-xordern. Manchmal mit Tabelle (auf mehr als 1bit Basis), manchmal ohne, so wie hier auf 1bit Basis. Mal ganz unter uns: Ich kann zwar C und weiss ungefaehr was es mit CRC auf sich hat, aber ich koennte ausm Stegreif so ein Programm eher nicht schreiben. Wenn ich wirklich die Innereien von sowas selber verstehen will/muss, muss ich mich jedesmal neu durch den ollen "Painless Guide" quaelen. Danach vergesse ich das immer ziemlich schnell. Aber nicht weitersagen ;-) Gruss WK
Jan V. schrieb: > Den C-Code. Wie die Checksumme nun genau berechnet wird. https://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung#Berechnung_einer_CRC-Pr%C3%BCfsumme_in_C_und_Pascal_bzw._Delphi
Welche Programmiersprachen kannst du denn? Mit der Info könnte jemand den C Code in was übersetzten was du verstehst. Wenn gar keine Programmiersprache, dann geht das auch, ist aber aufwändiger.
asd schrieb: > Mit der Info könnte jemand > den C Code in was übersetzten was du verstehst. Der Aufwand wär ja gar nicht nötig, eine einfache Rechenvoschrift genügt mir schon. Das sollte doch kein Problem sein wenn man C kennt?
Setze den crc wert auf 255. Fuer jedes datenbyte, ueber das du den CRC berechnen willst, beginnend mit dem ersten Byte und hier aufhoerend mit dem 2.Byte tust du: Verknuepfe den crc wert mittels xor mit dem aktuellen Byte. Und jetzt genau 8mal: wenn das MSB von crc gesetzt ist, dann wird der neue Wert von crc so berechnet: der alte wert von crc wird um eine binaerstelle nach links geschoben, dann mit der Konstanten 0x31u, die da auf dezimal heissen wuerde: 49, exclusiv oder verknuepft. sollte das MSB von crc nicht gesetzt sein, dann wird der neue Wert von crc so berechnet: der alte wert von crc wird um eine binaerstelle nach links geschoben so, wenn das jetzt 8mal passiert ist, und alle (hier beiden) datenbytes zur Berechnung herangezogen wurden, dann und nur dann ist crc der wert und der wert ist crc. Gepriesen sind die Skifahrer. (Mann, muss mir fade sein) Gruss WK
1. Du füllst 8 Flip-Flops mit 1-en. 2. Dann verXORst Du den Inhalt mit dem nächsten zu verarbeitenden Datenbyte. (Beim 1. Durchlauf natürlich das 1. Byte!) 3. Dann stellst Du Dir die Flip-Flops wie im Bild verschaltet mit den XORs vor und gibst allen FFs gleichzeitig hintereinander 8 Takte. 4. Dann gehst Du zu 2, sofern Du noch Daten hast. 5. In den 8 Registern steht nun Deine CRC. Gruß Jobst
:
Bearbeitet durch User
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.