04-02-2015, 02:48 PM
(Seda postitust muudeti viimati: 04-02-2015, 06:51 PM ja muutjaks oli admin.)
(30-01-2015, 09:40 PM)felch Kirjutas: static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum)
{
/*Accumulate one byte of data into the CRC*/
uint8_t tmp;
tmp=data ^ (uint8_t)(*crcAccum &0xff);
tmp^= (tmp<<4);
*crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4);
}
[/code]
Mingi näide konkreetse baidi ja aku sisuga ehk ? Siin on kuidagi 16 ja 8-bitised muutujad segi ja neid käsitletakse lõdvalt läbisegi !?
data on järgmine bait buffrist, *crcAccum on hetke crc väärtus ja uus väärtus kirjutatakse sinna ka tagasi.
Sinu postitatud buffri crc tuleb 0x7F1C.
crc = 0xFFFF;
crc_accumulate(buffer[0], crc); // 0x09, crc=0x9246
crc_accumulate(buffer[1], crc); // 0x4E, crc=0x8CDA
...
crc_accumulate(buffer[14], crc); // 0x32, crc = 0x7F1C,
edit: index 15 oli vale, 14 on õige