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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren