1、 CRC8标准生成多项式
CRC-8 x8+x5+x4+1 0x31(0x131)
CRC-8 x8+x2+x1+1 0x07(0x107)
CRC-8 x8+x6+x4+x3+x2+x1 0x5E(0x15E
2.以下都以x8+x5+x4+1为例
先计算第一个字节的crc结果,然后把第一个字节的crc结果与第二个字节进行异或,
异或后的值再进行一次crc计算就可以了,多个字节也是反复这过程就好,如下为多个字节
的crc校验代码:
unsigned char crc_high_first(unsigned char ptr, unsigned char len)
{
unsigned char i;
unsigned char crc=0x00; / 计算的初始crc值 */
while(len--)
{
crc ^= *ptr++; /* 每次先与需要计算的数据异或,计算完指向下一数据 */
for (i=8; i>0; --i) /* 下面这段计算过程与计算一个字节crc一样 */
{
if (crc & 0x80)
crc = (crc << 1) ^ 0x31;
else
crc = (crc << 1);
}
}
return (crc);
}
上面的crc计算是纯采用逻辑运行的方式,可以看到,需要的运行量也是不少的,每一个字节
都需要进行8次判断、移位、或异或操作。可以采用查表法,大大减少计算量,先计算出
0x00~0xFF每一个字节的crc校验结果,后面就可以通过表来查出每个字节的crc结果,大大
减少计算量。
下面是一个表生成程序:
(生成表对应多项式:0x31(多项式:x8+x5+x4+1,100110001))
void create_crc_table(void)

本文介绍了CRC8校验的两种标准生成多项式,并以x8+x5+x4+1为例详细阐述了CRC计算过程。通过逻辑运算和查表法减少计算量,同时提供了反序异或的计算方法,强调了多项式选择、校验顺序和初始值对CRC计算的重要性。
最低0.47元/天 解锁文章
1万+

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



