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;
@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
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 | }
|
> mit einer vorgegebenen Lookup- tabelle
Wenn die Tabelle schon vorgegeben ist (Datenblatt?), dann doch bestimmt
auch der Algorithmus, wie die zu benutzen ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.