Hallo, grundsätzlich ist mir klar wie CRC funktioniert und ich krieg es auch für ein Byte auf dem Papier hin. Und bevor die schlauen "Frag doch <Wissensdatenbank bzw. Suchmaschine deiner Wahl>"-Posts kommen möchte ich meine Frage doch konkretisieren: Ich habe einen CRC8 (0x99) und 8 Bytes Nutzdaten. Ich fange also an das erste Byte zu nehmen und an diesem den CRC-Algorithmus anzuwenden. Hänge ich dann an jedes Byte für die Berechnung separat erstmal die 7 Nullen an (Anzahl Bits in Generatorpolynom - 1) oder nehme ich statt der Nullen die 7 Bits des nachfolgenden Bytes und hangle mich bis zum 8. Byte durch und füge diese 7 Nullen erst am Ende des 8. Nutzdaten-Bytes an? Oder wird die CRC für jedes Byte seperat durchgeführt und die jeweiligen Divisionsreste irgendwie aufaddiert? Zwar steht in der Wikipedia eine C-Referenz-Implementierung, doch auch diese beantwortet mir nicht meine Frage, da wiedermal nur 8 Bits genommen werden grr. Ich hoffe ihr könnt mir kurz auf die Sprünge helfen ... Vielen Dank!
@ Alex Wurst (daedalus) >ich dann an jedes Byte für die Berechnung separat erstmal die 7 Nullen >an NEIN! > (Anzahl Bits in Generatorpolynom - 1) oder nehme ich statt der Nullen >die 7 Bits des nachfolgenden Bytes und hangle mich bis zum 8. Byte JA! > durch >und füge diese 7 Nullen erst am Ende des 8. Nutzdaten-Bytes an? ja, dort steht im allgemeinen die CRC, welche bei der Berechnung mit Null gefüllt ist. >Oder wird die CRC für jedes Byte seperat durchgeführt NEIN. Siehe CRC und http://www.employees.org/~surendra/asic/crc.html MfG Falk
Super, das war sehr hilfreich! Nun noch eine Frage: Wäre es sinnvoll die 8 Bytes in EINEN Datentyp zu packen? z.B. uint64_t oder gibt es eine hübsche Methode wie ich mich z.B. durch einen char-Array hangeln kann? Ich kann ja nicht ohne "<<" und ">>"-Kunststücken bit-genau adressieren? Also quasi nach dem Motto "das Bit was du jetzt hinten anhängst, ist das 5. Bit vom 2. Byte im Datenstrom der aus 8 Bytes besteht". Wie gehe ich dann vor wenn ich z.B. über 256 Bytes eine CRC8-Prüfsumme durchführen will die möglichst effizient arbeitet? (z.B. auf einem 8-Bit µC mit wenig RAM und Rechenleistung).
@ Alex Wurst (daedalus) >Wäre es sinnvoll die 8 Bytes in EINEN Datentyp zu packen? z.B. >uint64_t Nein. > oder gibt es eine hübsche Methode wie ich mich z.B. durch einen >char-Array hangeln kann? Ne For Schleife? >Ich kann ja nicht ohne "<<" und ">>"-Kunststücken bit-genau adressieren? Abse sicher, Schiebeoperatioen sind die Grundlage der CRC. >Wie gehe ich dann vor wenn ich z.B. über 256 Bytes eine CRC8-Prüfsumme >durchführen will die möglichst effizient arbeitet? Möglichst Clever. > (z.B. auf einem 8-Bit >µC mit wenig RAM und Rechenleistung). Hab ich mal in ASM in verschiedensten Variabten durchgespielt, siehe Anhang. Such dir deine Lieblingsroutine aus und konvertier sie in C. MFG Falk
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.