//通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0XFF00 ) 来获取高字节;
//通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-1 ) && 0X00FF ) 来获取低字节;
//现在遇到的问题是:获取不到正确的CRC值,请各路大神帮忙分析下,是获取方式不对,还是CRC校验程序不对,谢谢!
//CRC查表校验函数
//puchMsgg为待校验数据的首地址DataLen为待校验数据个数,返回值为校验结果
u16 CRC16( u8 puchMsgg, u8 DataLen )
{
u8 uchCRCHi=0xFF; //CRC高字节初始化
u8 uchCRCLo=0xFF; //CRC低字节初始化
u8 uIndex; //CRC循环中的索引
crc16_Base_address=0;
while( DataLen-- ) //传输消息缓冲区
{
// uIndex=uchCRCHi^puchMsgg++; //计算CRC
uIndex=uchCRCHi^puchMsgg;
crc16_Base_address+=1;
uchCRCHi=uchCRCLo^auchCRCHi[uIndex];
uchCRCLo=auchCRCLo[uIndex];
}
return( (uchCRCHi<<8) | uchCRCLo );
}
//CRC高低字节顺序为,高字节在前,低字节在后;
//通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0XFF00 ) 来获取高字节;
//通过CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-1 ) && 0X00FF ) 来获取低字节。
//如果接收到的高字节校验码,与计算出来的高字节校验码一致
if( rcv_bufferfer_temp[rcv_num_temp-2]== CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0XFF00 )
{
//如果接收到的低字节校验码,与计算出来的低字节校验码一致
if( rcv_bufferfer_temp[rcv_num_temp-1]== CRC16( rcv_bufferfer_temp[crc16_Base_address], rcv_num_temp-2 ) && 0X00FF )
{
rcv_data_correct= 1; //接收到了一帧正确的数据
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
不知道你的rcv_bufferfer_temp是U8还是U16,如果是U8,那么这个代码就不对了。==后面的部分应该右移8位
看着你的代码意思rcv_bufferfer_temp是U8的。
你看看
rcv_bufferfer_temp是U8的,请指教,谢谢
没有开时钟,我研究下,谢谢
一周热门 更多>