| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 377 人关注过本帖
标题:对数据帧处理
只看楼主 加入收藏
wohenniu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-11-14
收藏
 问题点数:0 回复次数:0 
对数据帧处理
void ComCallback(int COMport,int eventMask,void *callbackdata)  

{  
   static int currentsize=0;      //accord the quenelength //
   int back=0;                    //accord the last element of the Rece
   int front=0;                   //accord the first element of Rece  
   int index;
   unsigned char Rece[64];
   unsigned char test[128];    //测试为何用两倍的数组????????????
   unsigned char ReceFrame[64];
   unsigned char type=0X55;   //定义遥测信息类型
   int errID=1;
   int j=0;
   int i=0;
   int ii;
   //float xxcount;
   char xxcount=0x00;
   char k0[10];

   /*初始化初始缓冲数组*/  
   for(j=0;j<128;j++)
   test[j]=0;
  
   /*从指定串口读入数据*/
   ComRd(comnum,Rece,64);  //从指定串行口的输入队列读入64字节数据
   FlushInQ(comnum);       //清空指定串行口输出队列
   
   for(ii=0;ii<64;ii++)
           Recieve[ii]=Rece[ii]; //读入数据放入全局数组
   
   /*填冲缓冲数组*/
     //test中的数据是Rece[64]接一个Rece[64]的128个字节数组
     while(currentsize<2)
     {  for(i=0;i<64;i++)
      {
         test[back++]=Rece[i];
      }
      currentsize++;
      ComRd (comnum, Rece, 64);
      FlushInQ (comnum);
   
      back=back%128;
     }   
  
    /*数组填满后?????????为什么currentsize--*/
   if(currentsize=2)
   {
      index=front;
      while(!((test[index%128]==0x55)&&(test[(index+1)%128]==0x55)&&(test[(index+2)%128]==0x55)&&(test[(index+3)%128]==0x55)
      &&(test[(index+4)%128]==0x12)&&(test[(index+5)%128]==0x34)&&(test[(index+6)%128]==0x56)&&(test[(index+7)%128]==0xab)
      &&(test[(index+8)%128]==0xcd)&&(test[(index+9)%128]==0xef)&&((index-front)<118)))         //根据遥测协议而定
      {index++;
      if((index-front)>=118&&(index-front)<128)
          for(i=0;i<64;i++)
      {
         test[back++]=Rece[i];
      }
           
       front=index%128;
      }
      if((index-front)<64)
      {for(i=0;i<64;i++)
         ReceFrame[i]=test[(index+i)%128];
         type=ReceFrame[13];         //遥测信息类型
         errID=0;
         flag=SelecttoDo(errID,type,ReceFrame);
      }
      if((index-front)>64&&(index-front)<118)
        {front=index%128;
      currentsize--;
      }
     //选择去执行  
      
    }  错在不能循环  急!
搜索更多相关主题的帖子: 数据 
2010-11-14 20:58
快速回复:对数据帧处理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018952 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved