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

standstone   2007-7-2 10:44 楼主
如提:
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。这个是否对采集有影响,
望大侠赐教。

回复评论 (6)

ziji 顶先
:《《《《《
点赞  2007-7-2 17:29
帮顶
点赞  2007-7-3 11:11
先不管你的串口程序如何.
首先你在debug或者release下版本数据通讯经常出错,那说明你自己本身有问题,或者下位机有问题.我可以这么告诉你,串口通信,在wince下没有出错的,我们使用的频率57.6k都没有问题,更何况是48000.
点赞  2007-7-4 11:31
这几天一直在弄,还是出错;《

to kevincec:
请教一下那么高的频率,还没有问题 怎么解决的?
是不是下位机发送速度快,上位机采集处理的速度慢
或者延时参数设置
干脆是波特率没有设置好?

高手帮下忙。

我用的是模拟器,感觉在模拟器 在debug模式下,运行速度很慢
点赞  2007-7-4 15:21
程序有问题,和debug,release版本没问题
点赞  2007-7-6 23:10
首先不要用模拟器了。这个东西对串口支持不好

我想最主要的问题是,你对串口数据进行控制的顺序不对。。你要保证上位机在读取串口数据的时候,你不能改写其中的数据,就是不能够收。

如果要做到边收边发的话,必须要有存放缓冲区,收到一帧数据存放在缓冲区1中,然后通知上位机读取缓冲区1中数据;同时,你再一次接收的数据存放再缓冲区2当中,等缓冲区2收满一帧,然后再通知。
根据实际情况,分配多个缓冲区就可以解决你的问题了。
点赞  2007-8-14 08:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复