关于串口通信包头的校验

[复制链接]
2617|5
 楼主| aimie 发表于 2013-8-9 00:12 | 显示全部楼层 |阅读模式
以下这段代码验证包头| 长度|和值   对和值理解不是很清楚,另外测试的时候也很麻烦,我就把这段校验去掉了,但是无论我怎么调试,好像都是不能得到正确的数据,但是如果我把revbuff[RevPtr++]=SBUF;
放到这段代码的前面忽略校验,是可以得到我发送的数据的

请问各位这个问题出在哪里
  1. switch(RevState)
  2.       {
  3.     //等待接收第一个同步头0xAA
  4.       case  revhead1:
  5.            if (SBUF==0xAA)
  6.            {
  7.             RevState=revhead2;
  8.            }
  9.            break;
  10.    
  11.      //等待接收第二个同步头0x55
  12.        case  revhead2:
  13.            if (SBUF==0x55)
  14.            {
  15.             RevState=revpakagelen;
  16.            }
  17.            else
  18.            {
  19.              RevState=revhead1;//状态机复位
  20.            }
  21.            break;
  22.    
  23.     //等待接收数据包长度
  24.        case  revpakagelen:      
  25.            revlen=SBUF;
  26.            if (revlen>revbufflen)
  27.            {
  28.              RevState=revhead1;//状态机复位               
  29.            }
  30.            else
  31.            {
  32. //               checkSum+=SBUF;
  33.                RevPtr=0;  //接收指针复位
  34.                reved=0; //准备接收数据      
  35.                RevState=revpakage;
  36.            }
  37.            break;
  38.    
  39.      //等待接收数据内容
  40.        case revpakage:     
  41.           revbuff[RevPtr++]=SBUF;
  42. //         checkSum+=SBUF;
  43.           if (RevPtr==revlen)
  44.           {
  45.            RevState=revcrc;   
  46.           }
  47. //          break;
  48.    
  49. /*   //等待接收校验和
  50.        case revcrc:
  51.            if(checkSum==SBUF)
  52.            {
  53.              revok=1;//接收正确
  54.            }
  55.            else
  56.            {
  57.              revok=0;//接收正确
  58.            } */
  59.                    revok=1;
  60.            reved=1;//接收到数据
  61.            RevState=revhead1;//状态机复位                    
  62.       }
 楼主| aimie 发表于 2013-8-9 09:15 | 显示全部楼层
前辈们看到了  帮忙解答下

就以上代码 我在电脑上
发送
aa 55 03 3f 66 7f
包头|包头|长度|3个数据

这样发送是正确的吧?
 楼主| aimie 发表于 2013-8-9 09:26 | 显示全部楼层
问题解决了,怪自己不够细心,坑爹啊,为此浪费 了好多时间

下面代码调整的时候继续跳到和验证去了

//等待接收数据内容

40.       case revpakage:     

41.          revbuff[RevPtr++]=SBUF;

42.//         checkSum+=SBUF;

43.          if (RevPtr==revlen)

44.          {

45.           RevState=revcrc;   
46.          }

47.//          break;

dirtwillfly 发表于 2013-8-9 11:33 | 显示全部楼层
aimie 发表于 2013-8-9 09:26
问题解决了,怪自己不够细心,坑爹啊,为此浪费 了好多时间

下面代码调整的时候继续跳到和验证去了

很赞
上官紫虞 发表于 2014-10-13 13:56 | 显示全部楼层
楼主,请问一下我如果要在接收端去掉包头,该如何去啊?
coody 发表于 2014-10-13 17:49 | 显示全部楼层
这种格式,我就定3个:包头、包尾、转义字符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

123

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部