Forum: Mikrocontroller und Digitale Elektronik CRC-8 Code erklärung


von Bibo (Gast)


Lesenswert?

Hallo zusammen,

hat mir jemand einen Simplen C-Code für einen CRC8?
Vielleicht nen Pseudocode der Step by Step ausführlich erklärt?

Das ganze muss nicht sehr schnell sein oder Optimiert. Hab da nun schon
einiges drüber gelesen, jedoch bin ich relativ neu bei der uController
Programmierung und bin noch nicht so versiert was das Bitshiften angeht.


Wenn mir jemand die einzelnen Schritte erklären kann wär ich sogar noch
dankbarer, da ich es lieber verstehen will, anstatt einfach nen Code
von jemand anderem zu benutzen.


Gibt ja viele CRC8 versionen mit unterschiedlichen Initialisierungen,
Inverse oder sonswas... ich habe den Code von dem CRC8 (siehe Link)
angeschaut und verstehe da nicht so ganz was da passiert und warum.

Beitrag "CRC8 und CRC32 in C"

Wäre über ne Aufklärung sehr Dankbar!


Herzliche Grüße
Bibo

: Gesperrt durch Moderator
von Peter (Gast)


Lesenswert?

Ich verstehe dein Problem da nicht. Auf Wikipedia findest du doch 
wahrlich das gaze perfekt auf Deutsch erklärt. Dann such mal nach CRC8 
code und das zweite Ergebnis ist 
https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/d96b25d0c0a739d351b8f09b128782ca12b7b0e1/firmware/lib/crc8.c

Diese Funktion kannst du entweder verwenden oder du zeichnest dir mal 
das Ablaufdiagramm davon auf und vergleichst es mit dem was auf 
Wikipedia beschrieben ist. Wenn du nicht verstehst was Bitshifting ist, 
dann solltest du dir eine normale C Referenz nehmen und schauen was da 
gemeint ist. Es ist ziemlich schwer "alles" zu erklären. Versuch selbst 
zu verstehen.

von Andreas H. (ahz)


Lesenswert?

Bibo schrieb:
> Wäre über ne Aufklärung sehr Dankbar!

Wenn es Dir um das Verständnis geht, dann sollte das hier schon helfen:
http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung

Sind auch Codebeispiele dabei.

Grüße
Andreas

von Michael (Gast)


Lesenswert?


von Bibo (Gast)


Lesenswert?

Hallo Andreas,

danke erstma für die schnelle Antwort. Ich verstehe schon wie das 
Prinzip funktioniert! Von Hand auch kein Problem. Nur die Beispielcodes 
mit dem  Bitshifting verunden und verodern da steigt mein Hirn aus :(

Wie gesgat ware sehr net wenn mir jemand den gegebenen Algorithmus step 
by step erklären könnte oder einen aufschlussreichen Pseudocode liefern 
könnte.


Herzliche Grüße
Bibo

von Stephan B. (matrixstorm)


Lesenswert?


von Andreas H. (ahz)


Lesenswert?

Bibo schrieb:
> Nur die Beispielcodes
> mit dem  Bitshifting verunden und verodern da steigt mein Hirn aus :(

Das mit dem step-by-step kann ich leider im Moment nicht bieten.

Aber wenn Du mit dem verunden/verodern nicht klar kommst, dann die kurze 
Anmerkung, das hier in F_2 gerechnet wird.
Da wirkt ein OR wie eine Addition, ein AND wie eine Division (wenn ich 
das noch richtig in Erinnerung habe).

Grüße
Andreas

von oli (Gast)


Lesenswert?

Ich hänge auch an dem Problem, das nachzuvollziehen:

Ich versuche, einen CRC nachzurechnen, habe aber ein Verständnisproblem, 
wie Ich den Codegenerator bedienen soll:

https://de.scribd.com/document/77545011/crc-gen


Example:    05 : x5 + x2 + 1
          8005 : x16 + x15 + x2 + 1


Angeblich beinhaltet diese Polynomdarstellung das jeweils höchste Bit 
nicht.
Warum ist das so und wie ist das zu interpretieren?

Wenn Ich das höchste weglassen, komme Ich auch nicht auf die Binärzahl 5 
sondern 3


Ich habe auch versucht aus dem VHDL die Berechnung nachzuvollziehen, 
komme aber nicht auf die Werte.

In meinem Fall benötige Ich das Polynom X8 + X6 + X4 + 1

Wenn Ich das auf http://outputlogic.com/?page_id=321  einsetze und 
eintippe:

1x   x4x x6x und die anderen frei, bekomme Ich einen Code, der laut 
Kommentar auch zu dem Polynom passt:

-- CRC module for data(7:0)
--   lfsr(7:0)=1+x^4+x^6+x^8;

Der stimmt aber nicht. Wie muss Ich die Daten einsetzen?

CRC wird mit 0 inititalisiert und geht schon beim ersten Zykluis falsch.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

oli schrieb:
> Ich hänge auch an dem Problem, das nachzuvollziehen:

Nein.  Du kaperst einen Thread, der mit deinem Problem gerade mal
„CRC“ gemeinsam hat.

Das ist nicht sinnvoll.  Lass die Threadleiche im Keller, und öffne
für dein Problem einen neuen Thread.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.