如提:
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。这个是否对采集有影响,
望大侠赐教。
先不管你的串口程序如何.
首先你在debug或者release下版本数据通讯经常出错,那说明你自己本身有问题,或者下位机有问题.我可以这么告诉你,串口通信,在wince下没有出错的,我们使用的频率57.6k都没有问题,更何况是48000.
这几天一直在弄,还是出错;《
to kevincec:
请教一下那么高的频率,还没有问题 怎么解决的?
是不是下位机发送速度快,上位机采集处理的速度慢
或者延时参数设置
干脆是波特率没有设置好?
高手帮下忙。
我用的是模拟器,感觉在模拟器 在debug模式下,运行速度很慢
程序有问题,和debug,release版本没问题
首先不要用模拟器了。这个东西对串口支持不好
我想最主要的问题是,你对串口数据进行控制的顺序不对。。你要保证上位机在读取串口数据的时候,你不能改写其中的数据,就是不能够收。
如果要做到边收边发的话,必须要有存放缓冲区,收到一帧数据存放在缓冲区1中,然后通知上位机读取缓冲区1中数据;同时,你再一次接收的数据存放再缓冲区2当中,等缓冲区2收满一帧,然后再通知。
根据实际情况,分配多个缓冲区就可以解决你的问题了。