以下这段代码验证包头| 长度|和值 对和值理解不是很清楚,另外测试的时候也很麻烦,我就把这段校验去掉了,但是无论我怎么调试,好像都是不能得到正确的数据,但是如果我把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;//状态机复位
- }
|