串口数据处理的问题

wangjijian 2009-06-16 01:15:33
目的是把串口发过来的数据,提取出来,数据帧头已知是EB90,把通过校验的数据存下来,但是发送的数据有可能不足一帧长度,这种扔掉不处理。程序执行2次就不能正常的提取出数据了,再执行几次就自己退出了,请大家指教下啊,谢谢了。
void CTTYReceiveMSCommDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT input1; //定义VARIANT类型变量
BYTE rxdata[2048]; //定义存放二进制数据的数组
BYTE databuf[1024]={0};
BYTE datasend[32]={0};
BYTE *phead[10];
int headflagct=0;
int totallenth;
long flenth,k;
COleSafeArray safearray1; //定义COleSafeArray类的实例
CString strDis;
switch(myComm.GetCommEvent())
{
case 2:
//收到 RThreshold 个字符
//添加接收处理代码
input1=myComm.GetInput();
//将VARAIANT变量赋值给COleSafeArray类的实例
safearray1=input1;
//使用COleSafeArray类的成员函数获取数据长度
flenth=safearray1.GetOneDimSize();
for(k=0;k<flenth;k++)
//使用COleSafeArray类的成员函数将数据写入数组
safearray1.GetElement(&k,rxdata+k);

{
for(int i=0;i<tempct;i++)
{
databuf[i]=datatemp[i];
}
}

{
for(int i=0;i<flenth;i++)
{
databuf[tempct+i]=rxdata[i];
}
}
totallenth=tempct+flenth;
{
for(int i=0;i<totallenth;i++)
{

if(databuf[i]==235&&databuf[i+1]==144)
{
phead[headflagct]=&databuf[i];
headflagct++;
}
}
}
switch(headflagct)
{
case 0:
break;
case 1:
{
for(int i=0;phead[0]<=&databuf[totallenth-1];i++)
{
datatemp[i]=*(phead[i]+i);
}
break;
}

default:
{
for(int i=0;i<headflagct-1;i++)
{
if(phead[i+1]-phead[i]==32)
{
int m=0;
//此处添加CRC校验代码
while(phead[i]<phead[i+1])
{

datasend[m]=*(phead[i]++);
m++;
}
}
}
while(phead[headflagct-1]<=&databuf[totallenth-1])
{

datatemp[tempct]=*phead[headflagct-1]++;
tempct++;
}
break;
}
}

for(int i=0;i<32;i++)
{
itoa(datasend[i],myChar,16);
strDis+=CString(myChar);
if(datasend[i]==0)
{
strDis+='0';
}

m_Edit1.SetSel(-1,0);
m_Edit1.ReplaceSel(strDis);
strDis="";
UpdateData(false);
}
}

}
...全文
145 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjijian 2009-06-16
  • 打赏
  • 举报
回复
tempct 是统计 在datatemp中存放的数据的个数
datasend 是把数据存到文件或则数据库的临时数组,暂时没写
wangjijian 2009-06-16
  • 打赏
  • 举报
回复
其中 datatemp 用来存放上次所接收的数据中一帧内容未完的数据,接着后面的发送数据凑够一帧一起处理

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧