本文计算方法均参考他人文档:
参考一: 关于部颁CDT规约中校验码的算法
参考二: 无线通信协议与设计
算法1:
void crc8_CDT_init(uint32_t poly) {
uint16_t crc;
for (int i = 0, j; i < 256; i++) {
crc = 0x00FF & i;
for (j = 0; j < 8; j++) {
crc =
0x00FF & (((crc & 0x80) == 0x80) ? (poly ^ (crc << 1)) : (crc << 1));
}
table[i] = crc;
if ((i + 1) % 8 == 0) {
printf(" 0x%02x\n", crc);
} else {
printf(" 0x%02x", crc);
}
}
}
uint8_t crc8_CDT(uint8_t crc, void* input, int len) {
int i;
uint8_t index;
uint8_t* p;
p = (uint8_t*)input;
for (i = 0; i < len; i++) {
index = (*p ^ crc);
crc = table[index];
p++;
}
return crc ^ 0xFF;
}
算法2:
unsigned c

本文详细介绍了两种CRC8校验算法,包括CDT规约中的crc8_CDT函数和通用的CRC_8_Byte函数,展示了生成校验码的步骤,并通过实例展示了算法在实际通信中的应用。
最低0.47元/天 解锁文章
7460

被折叠的 条评论
为什么被折叠?



