PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verwendung von crc16.h



izaseba
18.07.2008, 17:43
Hallo,

Hat jemand schon mit crc16.h gearbeitet ?

Ich möchte ein Dattensatz per Funk vom µC 1 zu µC 2 schicken und das ganze mit einer crc Prüfsumme versehen.
Nur wie nutze ich die crc16.h Funktionen ?
Irgendwie werde ich daraus nicht schlau :-(

Gruß Sebastian

sternst
18.07.2008, 17:57
int i;
uint8_t data[SIZE_OF_DATA];
...
uint16_t crc = 0xffff;
for (i=0;i<SIZE_OF_DATA;i++)
crc = crc16_update(crc,data[i]);

Ich denke, das macht es klarer, als irgendwelche langen Erklärungen.
Die anderen Funktionen in crc.h gehen genau so, es sind nur unterschiedliche CRC-Algorithmen.

izaseba
18.07.2008, 18:35
Hallo,
Danke für die Antwort,eigentlich verständlich.

Zwei Fragen hätte ich doch noch,

der Anfangswert 0xffff für die Prüfsumme ist beliebig, oder zwingend 0xffff ?

und wie geht man auf der Empfangsseite vor ?
Klar kann ich die gleiche Funktion nutzen und den Endwert mit dem Wert vom Sender vergleichen.

Kann ich aber die Prüfsumme vom Sender als Anfangswert beim Empfänger einsetzen ?
Kommt dann bei Übereinstimmung 0 raus ?

Danke und Gruß Sebastian

sternst
18.07.2008, 19:20
der Anfangswert 0xffff für die Prüfsumme ist beliebig, oder zwingend 0xffff ?
Jeder CRC-Algorithmus hat einen optimalen Startwert, bei diesem ist es eben 0xffff. Was ist das Problem daran, 0xffff zu nehmen?


und wie geht man auf der Empfangsseite vor ?
Klar kann ich die gleiche Funktion nutzen und den Endwert mit dem Wert vom Sender vergleichen.

Genau so.


Kann ich aber die Prüfsumme vom Sender als Anfangswert beim Empfänger einsetzen ?
Kommt dann bei Übereinstimmung 0 raus ?
Nein.
Und auch hier wieder: welches Problem hast du mit der "normalen" Vorgehensweise?


Zwei Fragen hätte ich doch noch,...
Das Zählen üben wir aber noch mal. ;-)

izaseba
18.07.2008, 19:44
Was ist das Problem daran, 0xffff zu nehmen?



welches Problem hast du mit der "normalen" Vorgehensweise?


Ich habe keine Probleme damit, habe lediglich gefragt, wieso und warum, mehr nicht.

Naja, danke für Deine Mühe...

sternst
18.07.2008, 19:53
Ich habe keine Probleme damit, habe lediglich gefragt, wieso und warum, mehr nicht.
Sorry, für mich klang es nach:
"Ich möchte es nicht so machen, geht es nicht auch anders?"

izaseba
18.07.2008, 20:48
Sorry, für mich klang es nach:
"Ich möchte es nicht so machen, geht es nicht auch anders?"


Nein,nein ich habe mich ja schon etwas über crc informiert, bevor ich diese Frage gestellt habe und ich dachte daß der Anfangswert irgendwas mit Generatorpolynom zu tun hat, aber nachdem ich in der avr-libc nachgeschaut habe ist der Polynom für diese Funktion 0xa001 und der Anfangswert 0xffff.

Für mich als nicht Mathematiker böhmische Dörfer, ich habe das ganze zwischendurch getestet, klappt einwandfrei :-)

Danke nochmals
Sebastian