以下这段代码验证包头| 长度|和值 对和值理解不是很清楚,另外测试的时候也很麻烦,我就把这段校验去掉了,但是无论我怎么调试,好像都是不能得到正确的数据,但是如果我把revbuff[RevPtr++]=SBUF;
放到这段代码的前面忽略校验,是可以得到我发送的数据的
请问各位这个问题出在哪里switch(RevState)
{
//等待接收第一个同步头0xAA
case revhead1:
if (SBUF==0xAA)
{
RevState=revhead2;
}
break;
//等待接收第二个同步头0x55
case revhead2:
if (SBUF==0x55)
{
RevState=revpakagelen;
}
else
{
RevState=revhead1;//状态机复位
}
break;
//等待接收数据包长度
case revpakagelen:
revlen=SBUF;
if (revlen>revbufflen)
{
RevState=revhead1;//状态机复位
}
else
{
// checkSum+=SBUF;
RevPtr=0; //接收指针复位
reved=0; //准备接收数据
RevState=revpakage;
}
break;
//等待接收数据内容
case revpakage:
revbuff[RevPtr++]=SBUF;
// checkSum+=SBUF;
if (RevPtr==revlen)
{
RevState=revcrc;
}
// break;
/* //等待接收校验和
case revcrc:
if(checkSum==SBUF)
{
revok=1;//接收正确
}
else
{
revok=0;//接收正确
} */
revok=1;
reved=1;//接收到数据
RevState=revhead1;//状态机复位
}
|