我在使用VB.net和.NET Framework 4.0的Windows 7上遇到以下问题。我必须通过串行端口发送字节缓冲区。 PC充当主机,而连接为从机的设备接收缓冲区。每个字节与下一个字节之间必须间隔一定的时间(以微秒为单位)。
这是我的代码段
Dim t1 As New Stopwatch
Dim WatchTotal As New Stopwatch
WatchTotal.Reset()
WatchTotal.Start()
t1.Stop()
For i As Integer = 0 To _buffer.Length - 1
SerialPort1.Write(_buffer, i, 1)
t1.Reset()
t1.Start()
While ((1000000000 * t1.ElapsedTicks / Stopwatch.Frequency) < 50000) ' wait 50us
End While
t1.Stop()
Next
WatchTotal.Stop()
Debug.Print(WatchTotal.ElapsedMilliseconds)
线程内的所有循环。
一切正常,但是在装有Windows 7的计算机上,1字节的Serial.write占用1ms,因此,如果我们必须发送1024字节,则需要1024ms。
通过打印经过时间来确认
Debug.Print(WatchTotal.ElapsedMilliseconds)
问题似乎出在SerialPort.Write方法中。在装有Windows 10的计算机上,相同的代码不到1毫秒。
当我们必须发送许多字节缓冲区时,这个问题更加明显,在这种情况下,我们发送了16个1027字节缓冲区。在Win 7上,它花费不到20秒,在Win10中,它花费了一半或更短的时间(发送1个1027字节的缓冲区大约需要120-150ms,而发送16个数据缓冲区则不到5秒)。
有人知道可能依赖什么吗?
谢谢
一件事,您的等待代码似乎很麻烦,请尝试一下。
'one tick is 100ns, 10 ticks is as microsecond
Const wait As Long = 50L * 10L ' wait 50us as ticks
While t1.ElapsedTicks < wait
End While
忙循环是有问题的,并且因机器而异。我记得在Win7上串行端口处理不是很好,但是我可能会误会。
很难相信接收器是时间敏感的。