CRC8 mit vorgegebenen Tabelle

OP #5473601
Lesenswert?
• ▲
▼
Hallo Freunde,
ich möchte mit Eclipse in einem C-Programm über eine
serielle Schnittstelle (RS232) Daten von einem Messgerät zu meinen 
Rechner empfangen bzw. senden. Dafür muss ich  muss ich die 
Kommunikation initialisieren, Buffer anlegen und dies mit nachrichten 
füllen, und die CRC prüfung. es handelt sich um ein 8-bit CRC: 
polynomial = x8 + x5 + x4 + 1 = 0x8C (reverse bit order), start value = 
0 mit einer vorgegebenen Lookup- tabelle.

wie könnte ich denn die Kommunikation initialisieren und kann mir einer 
bei der Berchnubg der CRC checksumme mit hilfe einer vorgegebenen 
tabelle helfen;
Gast #5473853
Lesenswert?
• ▲
▼
Ich würd's mal so versuchen:
1
uint8_t crc8_table[256];
2

3
void Gen_Crc8_Table(uint8_t *table)
4
{
5
    for (unsigned i = 0; i <= 0xFFU; i++) {
6
        uint8_t crc = (uint8_t) i;
7
        
8
        for (unsigned j = 0; j < 8U; j++)
9
            crc = (crc >> 1) ^ (-(int8_t)(crc & 1) & 0x8CU);
10
        
11
        table[i] = crc;
12
    }
13
}
14

15

16
uint8_t Get_Crc8(const void *buffer, size_t len, const uint8_t *table) {
17
    uint8_t crc = 0;
18
    const uint8_t* byteptr = (const uint8_t*) buffer;
19

20
    while (len--)
21
        crc = table[crc ^ (*byteptr++)];
22

23
    return(~crc);
24
}

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.