www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC8 bei mehreren Bytes? Denkfehler?


Autor: Alexander I. (daedalus)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

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

Autor: Alexander I. (daedalus)
Datum:

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

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

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

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.