crc8 problem

Gast #2902871
Lesenswert?
• ▲
▼
Seit Stunden habe ich ein Problem mit crc8.

Initialwert: 0x00
Polynom:     0x07   /    (x^8 + x^2 + x^1 + x^0)

daten: uint8_t crc_data[5] = {0x00, 0x00, 0x34, 0x13, 0x00};

Mehrere Online-Rechner sowie die Java-Klasse, die ich mir 
heruntergeladen habe (diese arbeitet mit einer vorgegebenen Tabelle) 
bringen folgendes ergebnis:

crc8 = 34dez   bzw.  0x22


///

Ich habe nun 3 verschiedene crc8 codes hier aus dem Forum ausprobiert 
(und natürlich das polynom angepasst), es kommt aber einfach immer was 
anderes raus (197dez bzw. c5) hex.


Hier der c-code (von "avr-code" auf google code):
1
#include <inttypes.h>
2

3
#define CRC8INIT  0x00
4
#define CRC8POLY  0x07              //0X18 = X^8+X^5+X^4+X^0
5
                                    //0x07 = x^8+x^2+x^1+x^0
6

7
uint8_t crc8 ( uint8_t *data_in, uint16_t number_of_bytes_to_read )
8
{
9
  uint8_t  crc;
10
  uint16_t loop_count;
11
  uint8_t  bit_counter;
12
  uint8_t  data;
13
  uint8_t  feedback_bit;
14
  
15
  crc = CRC8INIT;
16

17
  for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
18
  {
19
    data = data_in[loop_count];
20
    
21
    bit_counter = 8;
22
    do {
23
      feedback_bit = (crc ^ data) & 0x01;
24
  
25
      if ( feedback_bit == 0x01 ) {
26
        crc = crc ^ CRC8POLY;
27
      }
28
      crc = (crc >> 1) & 0x7F;
29
      if ( feedback_bit == 0x01 ) {
30
        crc = crc | 0x80;
31
      }
32
    
33
      data = data >> 1;
34
      bit_counter--;
35
    
36
    } while (bit_counter > 0);
37
  }
38
  
39
  return crc;
40
}

aufgerufen mit:
1
uint8_t crc_data[5] = {0x00, 0x00, 0x34, 0x13, 0x00};
2
crc = crc8 ( ccc,5 );


Ich verstehs wirklich garnicht... Sieht da jemand einen Fehler?

Danke!!!
Gast #2902885
Lesenswert?
• ▲
▼
Die Procedur ist deklariert als : uint8_t crc8 ( uint8_t *data_in, ..

data als pointer.  Gebraucht als

uint8_t crc_data[5] = {0x00, 0x00, 0x34, 0x13, 0x00};
crc = crc8 ( ccc,5 );

Ich wuerd's mal mit

crc = crc8 ( &ccc,5 );

probieren.
Gast #2902894
Lesenswert?
• ▲
▼
ob crc_data oder &crc_data macht beim Ergebnis keinen Unterschied.

Ich meine mich auch aus einer Vorlesung drann zu erinnern, dass crc_data 
== &crc_data[0]  ist.


Habe mir innerhalb der crc routine schonmal jedes byte einzeln ausgeben 
lassen und es kommt auch der richtige Eingangswert raus.

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.