急!evc下串口同步采集的数据有时候多有时候少有时候正确

czxooo 2007-07-02 10:47:22
如提:
evc环境 串口通信, 同步。
方法:单片机中已经采集的48000直接的数据,存在一个rom中,上位机从中读取。

在release版本下,数据一般正确,有时候不正确
在debug版本下,数据一直不正确

代码执行过程:
先发送一个字符0x03,然后开始读取数据 采集,

采集代码是:

do
{
if(!ClearCommError(hPort,&dwErrorFlags,&ComStat))//清除串口状态标志,并返回当前状态

if (ComStat.cbInQue == 0)
{

str3=_T("缓冲区中已无数据, 退出循环");
break;
}
if(ComStat.cbInQue>=1000)
dwLength=1000;
else
dwLength=ComStat.cbInQue;
//读入数据,并返回数据长度,采用同步方式
dwReturnLength=0;
fReadState=ReadFile(hPort,RXBuff,dwLength,&dwReturnLength,NULL);
。。。其他处理
Wwhile(true)

通过循环一直读取rom中数据,但是数据本来应该是48000,有时候数据还没有读到48000,但是ComStat.cbInQue == 0,就跳出循环了。
修改了超时参数,在单片机中没发一个直接的数据然后延时都没有用。

顺便说一下:资料中说ComStat.cbOutQue 在进行非重叠操作时,此值为0,但是我发送了开始字符0x03后,发现该参数就变成1了,调用PurgeComm还是1。这个是否对采集有影响,
望大侠赐教
...全文
204 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
icper 2007-07-05
  • 打赏
  • 举报
回复
fReadState=ReadFile(hPort,RXBuff,dwLength,&dwReturnLength,NULL);
你这里一次读了最多1000个字符

试试将dwLength设为1,即每次只读一个字符

我碰到过一种情况是外设一次性发送2000多字符,我在一次读多个字符的情况下
经常不能读到所有字符,等多长时间都没用,后来改成每次读一个字符问题解决了
也许你的情况和这一样. -_-
czxooo 2007-07-04
  • 打赏
  • 举报
回复
有道理
不过试了一下
还是不行
continue后
我的进度条一直不动,
应该是缓冲区的确没有数据了,但是采集到的数据却不是48000

在分析:
数据通讯问题:是不是波特率设置不精确,延时参数有没有影响

to icper
高手帮忙啊

期待中。。。
icper 2007-07-03
  • 打赏
  • 举报
回复
ComStat.cbInQue = 0仅表示缓冲中无数据
单片机发送完所有数据是要花时间的
ComStat.cbInQue == 0 时要continue,
通过判断数据是否都收到了来使用break
czxooo 2007-07-02
  • 打赏
  • 举报
回复
自己顶先
每人
:<

2,640

社区成员

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

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