CRC16 von einem char-Array errechnen

Gast #2256063
Lesenswert?
• ▲
▼
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!
Gast #2257695
Lesenswert?
• ▲
▼
Hab den Fehler gefunden! Hab das in einem Thread an irgendeiner Stelle 
mal gelesen! Damit nicht jemand anders noch genauso lange sucht:

Den Nutzdaten müssen die 2 CRC bytes in umgekerter Reihenfolge angehängt 
werden, damit die Überprüfung des gesammten Frame 0x0000 ergibt.
Also erst Low-Byte und dann High-Byte:
1
  crc16 = calculate_crc16(frame, number+3);
2
  frame[number+4] = crc16 >> 8;
3
  frame[number+3] = crc16 & 0x00ff;

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.