在一些关键的通信在,对数据一致性要求很高的数据通信(如温度控制通信)需要加CRC来进行保证。如是本人在一个项目中用到一段精简的程序:
/*******************************************
函数原型:unsigned int cal_crc(unsigned char *ptr, unsigned char len)
函数功能:CRC校验
******************************************/
unsigned int cal_crc(unsigned char *ptr, unsigned char len)
{
unsigned char i;
unsigned int crc="0";
while(len--!=0)
{
for(i=0x80; i!=0; i/=2)
{
if((crc&0x8000)!=0) {crc*=2; crc^=0x1021;}
else crc*=2;
if((*ptr&i)!=0) crc^=0x1021;
}
ptr++;
}
return(crc);
}
在发送端将要发送的数据放入ptr堆栈中计算值加在后面发送,接受端同样计算收到的信息的CRC码,如果计算的CRC与接受的一致,通信正确,否则要求重发。
文章评论(0条评论)
登录后参与讨论