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操作串口
你是说这条语句 ReadFile(this.hComm, lpBuffer, NumBytes, ref lpNumberOfBytesRead, ref lpOverlapped); 阻塞了 4 秒?
我也不清楚啊,还得好好找找
我看了下,就是这句4秒,有什么办法解决么?
@Dranched: ReadFile(this.hComm, lpBuffer, NumBytes, ref lpNumberOfBytesRead, NULL);
@Launcher: 谢谢你,已经解决了,是设置的超时时间引起的阻塞,现在好了
2400波特率1秒钟传输2400位,除以8等于300字节你4秒钟也就传1k数据
你先看下串口波形,是不是传输就是要花那么多时间,还是前后会有多余的空闲时间,我之前用串口的时候都是直接发送直接接受的
传输很快,只是在读取时候用时长,程序都挂在上边了,我找不到问题所在啊。
串口监视软件很快就读到了,但是我这程序中读出来就很慢