您的位置:首页 > 其它

Labview中CRC校验

2015-06-16 15:00 393 查看
CRC生成多项式G(x)= x^16 + x^15 + x^13 + 1   根据该多项式系数,就可以判断CRC值为16位两字节数。从bit0位 到 bit15位 ,可知系数为1010 0000 0000 0001,所以简记为OxAOO1。

//uc_p_Fst:校验的起始数据指针
//uc_p_End:指向校验结束数据的下一个数据的指针
//ui_CRC:初始数据(注意有些网上给出的程序习惯初始值为0 或初始值为0xffff,这两种情况下校验时的方向不同,前者校验位左移,后者右移,具体原因我也解释不清楚。)

uint16 CheckCRC(uint8* uc_p_Fst,uint8* uc_p_End,uint16 ui_CRC)
{
uint16 ui_Reg,i;
while(uc_p_Fst < uc_p_End)
{
ui_CRC = ui_CRC ^ (((uint16)(*uc_p_Fst))<<8);
for(i=0;i<8;i++)
{
ui_Reg = ui_CRC & 0x8000;
if(ui_Reg)
{
ui_CRC <<=1;   //注意左移
ui_CRC = ui_CRC ^ 0xA001;  // 这个地方就是用到不同的CRC生成多项式,做相应的修改
}
else  ui_CRC <<=1;
}
uc_p_Fst ++;
}
return(ui_CRC);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Labview