Forum: Mikrocontroller und Digitale Elektronik CRC8 mit vorgegebenen Tabelle


von Kaiser K. (kingkong_18)


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;

von ChristophS (Gast)


Lesenswert?

Google einfach nach CRC8 Tutorial da gibts gute Tutorials dafür

von Falk B. (falk)


Lesenswert?

@Kaiser K. (kingkong_18)

>wie könnte ich denn die Kommunikation initialisieren

Kommt auf die Kommunikation an. Sinnvoll ist meist ein "Hallo, jemand Zu 
Hause?"

>und kann mir einer
>bei der Berchnubg der CRC checksumme mit hilfe einer vorgegebenen
>tabelle helfen;

Siehe CRC, vor allem die Links.

http://www.ross.net/crc/download/crc_v3.txt

von Nop (Gast)


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
}

von Uwe (Gast)


Lesenswert?

> mit einer vorgegebenen Lookup- tabelle

Wenn die Tabelle schon vorgegeben ist (Datenblatt?), dann doch bestimmt 
auch der Algorithmus, wie die zu benutzen ist.

von georg (Gast)


Lesenswert?

Uwe schrieb:
> dann doch bestimmt
> auch der Algorithmus, wie die zu benutzen ist.

Seit wann braucht man zum Auslesen einer Tabelle einen Algorithmus?

Georg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.