首页 新闻 会员 周边

串口读取数据很慢,怎么解决

0
悬赏园豆:10 [已解决问题] 解决于 2014-07-11 16:27

byte[] reb = new byte[0x400];
reb = myCom.Read(0x400);

就是这个读取串口数据的函数

public byte[] Read(int NumBytes)
{
byte[] lpBuffer = new byte[NumBytes];
if (this.hComm == -1)
{
throw new ApplicationException("串口没有打开");
}
OVERLAPPED lpOverlapped = new OVERLAPPED();
int lpNumberOfBytesRead = 0;
ReadFile(this.hComm, lpBuffer, NumBytes, ref lpNumberOfBytesRead, ref lpOverlapped);
byte[] destinationArray = new byte[lpNumberOfBytesRead];
Array.Copy(lpBuffer, destinationArray, lpNumberOfBytesRead);
return destinationArray;
}

做了个计时,差不多每次读取数据都要4秒,不管数据长短,需要怎么处理下能缩短读取时间?

我串口的通讯速率是2400,用的winapi操作串口

Dranched的主页 Dranched | 初学一级 | 园豆:23
提问于:2014-07-11 11:56
< >
分享
最佳答案
0

你是说这条语句 ReadFile(this.hComm, lpBuffer, NumBytes, ref lpNumberOfBytesRead, ref lpOverlapped); 阻塞了 4 秒?

收获园豆:8
Launcher | 高人七级 |园豆:45045 | 2014-07-11 13:10

我也不清楚啊,还得好好找找

Dranched | 园豆:23 (初学一级) | 2014-07-11 13:33

我看了下,就是这句4秒,有什么办法解决么?

Dranched | 园豆:23 (初学一级) | 2014-07-11 14:11

@Dranched: ReadFile(this.hComm, lpBuffer, NumBytes, ref lpNumberOfBytesRead, NULL);

Launcher | 园豆:45045 (高人七级) | 2014-07-11 15:04

@Launcher: 谢谢你,已经解决了,是设置的超时时间引起的阻塞,现在好了

Dranched | 园豆:23 (初学一级) | 2014-07-11 16:27
其他回答(1)
0

2400波特率1秒钟传输2400位,除以8等于300字节你4秒钟也就传1k数据

你先看下串口波形,是不是传输就是要花那么多时间,还是前后会有多余的空闲时间,我之前用串口的时候都是直接发送直接接受的

收获园豆:2
吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-11 12:24

传输很快,只是在读取时候用时长,程序都挂在上边了,我找不到问题所在啊。

串口监视软件很快就读到了,但是我这程序中读出来就很慢

支持(0) 反对(0) Dranched | 园豆:23 (初学一级) | 2014-07-11 12:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册