楼主的代码与stm32的crc32结果一致。但是代码看了感觉还是有点迷糊,也可能是习惯不同吧,在楼主代码基础上修改如下,不知道是不是更好理解些,欢迎大家指正!
uint32_t CalCrc32(uint32_t *ptr, uint16_t len)
{
uint16_t bits;
uint32_t data;
uint32_t CRC ;
uint32_t 标志寄存器;
CRC = 0xFFFFFFFF;
while (len--)
{
data = *ptr++;
for (bits = 0; bits < 32; bits++)
{
标志寄存器 = ((data ^ CRC) & 0x80000000);
CRC <<= 1;
if (标志寄存器 != 0)
{
CRC ^= dwPolynomial;
}
data <<= 1;
}
}
return CRC;
}
另外还有个问题: 生成多项式与权值的对应关系是什么?如何根据多项式得出权值?
|