{ crc <<= 1; } } crc8Table[i] = crc; } } //这里是生成离线表格的过程,当离线生成好表格数据,这段循环代码就可以直接被表格crc8Table[256]代替 uint8_t calculateCRC8Table(const uint8_t *data, size_t length, uint8_t initialCrc) { uint8_t crc = initialCrc; for (size_t i = 0;...
crc8校验查表法实现方法——查表法 生成多项式X^8+X^6+X^4+X^3+X^2+X^1 const uchar crctable[] = { 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65, 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220, 35,125,159,193, 66, 28,254,...
我们可以在generate_crc8_table函数之后添加代码来打印CRC8校验表。 c void print_crc8_table() { for (uint8_t i = 0; i < 256; i++) { printf("0x%02X: 0x%02X ", i, crc8_table[i]); } } int main() { // 生成CRC8校验表 generate_crc8_table(); // 打印CRC8校验表 print_cr...
unsigned char CRC8_Table(unsigned char *p, char counter) { unsigned char crc8 = 0; for( ; counter > 0; counter--) { crc8 = CRC8Table[crc8^*p]; //查表得到CRC码 p++; } return crc8; } DS18B20的两种校验CRC码的方法本质上都是一样的。查表法是对0x00~0xff这256个数依次生成与每一...
unsigned char CRC8_Table(unsigned char *p, char counter) { unsigned char crc8 = 0; for( ; counter > 0; counter--) { crc8 = CRC8Table[crc8^*p]; //查表得到CRC码 p++; } return crc8; } 1. 2. 3. 4. 5. 6. 7. 8. ...
unsigned char cal_table_low_first(unsigned char value) { unsigned char i, crc; crc = value; /* 同样需要计算8次 */ for (i=8; i>0; --i) { if (crc & 0x01) /* 反序异或变成判断最低位是否为1 */ /* 数据变成往右移位了 */ /* 计算的多项式从0x31(0011 0001)变成了0x8C (1000...
CRC8CAL和CRC8Table程序如下: .2.1直接计算求出CRC-8校验码(CRC8CAL) CRC DATA 28H ;CRC为可位寻址的单元,存放CRC-8检验码。 ;入口参数:ACC存放需要进行CRC校验的数据。R2作为CRC临时值存放单元。系统晶振取12MHz。 ;出口参数:CRC输出新的CRC-8校验码。 ;说明:根据XOR运算规则有: x xor 0 =x ; ;若...
/* CRC Info: Name Polynomial Initial FinalXor InputReflected ResultReflected CRC8_EBU 0x1D 0xFF 0x00 true true */ unsigned int crc8_ebu(unsigned int crc, const unsigned char* buf, unsigned int len) { for(unsigned int i = 0; i < len; i++) { crc = crc8_ebu_reversed_table[crc ...
; counter > 0; counter--) { crc8 = CRC8Table[crc8^*p]; /查得到CRC码 p++; } returncrc8; } DS18B20的两种校验的方法本质上都是一样的。查表法是对0x00~0x这256依次生成与每个对应的CRC码所组合成的表,每次算一字节数据的CRC不用经过calcrc_1byte(uchar abyte)这个函数对每个数据...
//以CRC-8/ITU为例,生成数组查表void creatTable(void){unsignedchari,init;unsigned short j;for(j=0;j<=255;j++){if(j%16==0){printf("\r\n");}init=j;for( i = 0;i < 8;i++){if(init & 0x80){init = (init << 1) ^ 0x07;//以实际poly为准;}else{init = init << 1;}}...