对数据帧处理
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--;
}
//选择去执行
} 错在不能循环 急!