Hallo,
ich weiß es wurde schon oft CRC16 durchgekaut, aber ich kann die Lösung
nicht rauslesen.
Ich möchte mit der avr-lib crc16.h aus einem char-Array die Checksumme
berechnen, und diese dann mittels 2 bytes an das Array drannhängen.
1 | /* Berechnet den CRC16-Wert aus einem ganzen Array */
|
2 | uint16_t calculate_crc16(uint8_t* data, uint8_t number)
|
3 | {
|
4 | uint16_t crc = 0xffff;
|
5 | uint8_t i;
|
6 | for(i=0; i<number; i++)
|
7 | {
|
8 | crc = _crc16_update(crc, *data++);
|
9 | }
|
10 | return crc;
|
11 | }
|
Aufrufen tu ich die Funktion folgendermaßen:
1 | crc16 = calculate_crc16(frame, number+3);
|
2 | frame[number+3] = crc16 >> 8;
|
3 | frame[number+4] = crc16 & 0x00ff;
|
Das Rückrechnen mit der Funktion stimmt nicht, ich bin mir auch
unsicher, wie ich den Startwert nicht mit 0x000 sondern 0xffff mache,
und was dann bei der Prüfung rauskommen muss... auch 0x0000?
Danke an alle konstruktive Beiträge!