Salve a tutti apro un nuovo post sull'argomento.
Qualcuno di voi potrebbe suggerirmi come applicare questo codice ad una lettura seriale.
static unsigned char crcTable[256];
void buildTable (void) {
int i;
unsigned char table[8];
table[0] = 0x31;
for (i = 1; i < 8; i++) {
int n = 2 * table[i - 1];
table[i] = (n >= 256) ? n ^ 0x31 : n;
}
for (i = 0; i < 256; i++) {
crcTable[i] = 0;
if (i & 1) crcTable[i] ^= table[0];
if (i & 2) crcTable[i] ^= table[1];
if (i & 4) crcTable[i] ^= table[2];
if (i & 8) crcTable[i] ^= table[3];
if (i & 16) crcTable[i] ^= table[4];
if (i & 32) crcTable[i] ^= table[5];
if (i & 64) crcTable[i] ^= table[6];
if (i & 128) crcTable[i] ^= table[7];
}
}
unsigned char crc (unsigned char* buffer, int count) {
int i;
unsigned char result = 0;
for (i = 0; i < count - 1; i++) {
unsigned char idx = buffer[i] ^ result;
result = crcTable[idx];
}
return result ^ 0xBB;
}
Qualsiasi suggerimento mi sarebbe di grande aiuto.
Grazie
quello che hai pubblicato sono funzioni per il calcolo del CRC, ossia il cyclic redundancy check (controllo a ridondanza ciclica) che permette il controllo dell'integrita' dei dati ricevuti sotto forma di "pacchetti".
Da quel che intuisco lo vuoi applicare perche' hai un qualche protocollo di trasmissione dati da implementare.
Per applicarlo utilizzando la seriale devi individuare fra i caratteri ricevuti l'inizio del "pacchetto", il suo contenuto, il CRC ed la fine del "pacchetto". Devi pertando conoscere il protocollo della trasmissione dati e come e' composto il "pacchetto".
Puoi per sempio utilizzare un buffer per immaganizzare l'intero pacchetto, oppure solo quello su cui si calcola il CRC.
Alla funzione CRC che hai pubblicato devi passare il buffer contenti i caratteri su cui calcolare il CRC ed il numero dei caratteri.
Il risultato va confrontato col CRC presente nel pacchetto ricevuto nella seriale, che avrai estratto dai caratteri che compongono l'intero pacchetto.
Se poi, oltre che nella ricezione, devi generare tu i "pacchetti" allora dovrai creare ogni pacchetto secondo le regole definite dal protocollo di trasmissione che utilizzi e dovrai pertanto calcolare anche il CRC.
Un esempio di implementazione lo trovi nella libreria XBee per la tramissioni dati in modalita' API.