【发布时间】:2011-06-09 20:59:44
【问题描述】:
我正在尝试使用 SerialPort 类处理串行端口。
应用要求我们先接收一个命令,然后在20ms内回复;问题是,我们读取的命令和实际命令之间存在延迟(最多 15ms),我们没有时间发回回复。
我们需要读取的命令长度固定为20字节,每次从输入缓冲区中轮询一个字节。
serialPort.Read(input, 0, 1).
我不知道这个过程有什么问题。
【问题讨论】:
标签: c#
我正在尝试使用 SerialPort 类处理串行端口。
应用要求我们先接收一个命令,然后在20ms内回复;问题是,我们读取的命令和实际命令之间存在延迟(最多 15ms),我们没有时间发回回复。
我们需要读取的命令长度固定为20字节,每次从输入缓冲区中轮询一个字节。
serialPort.Read(input, 0, 1).
我不知道这个过程有什么问题。
【问题讨论】:
标签: c#
为什么一次读取一个字节?如果你期望 20 个字节,你可以写:
byte[] buffer = new byte[20];
int bytesRead;
int totalBytesRead = 0;
while ((bytesRead = serialPort.Read(buffer, totalBytesRead, buffer.Length - totalBytesRead)) != 0
&& totalBytesRead < buffer.Length)
{
totalBytesRead += bytesRead;
}
此时,您已拥有全部 20 个字节,或者您已到达流的末尾。
“我们读取的命令与实际命令之间存在延迟(最多 15 毫秒)”是什么意思?
【讨论】:
您是否在使用 DataRecieved 事件?前段时间我也遇到过类似的错误,显然有些功能在不使用事件处理程序的情况下是不会被调用的。
【讨论】: