我使用C#
串口库与传感器和PC通信。
我经常使用SerialPort.Read()
方法获得超时,即使有数据存在。我使用串口嗅探器来检查我是否收到了端口上的所有数据包,但有些.NET如何不选择所有数据包并超时。我正在读取字节,我收到的字节比串行端口缓冲区大小少2112。我尝试了多种方法,现在考虑使用原生C/C++
并在C#
中调用它。有人可以在C/C++
中分享更多想法或使用原生C#
代码。
答案 0 :(得分:1)
以波特率460800至921600
运行
这些是非常奇怪的波特率,相当高。显然,您没有使用DataReceived事件,因此调用Read()方法的频率非常关键。花一些时间做其他事情,包括Windows认为需要做更重要的事情并且上下文切换离开你的线程,接收缓冲区将很快溢出。没有实现SerialPort.ErrorReceived事件是一个标准错误,所以你只是看不到那些溢出,你看到的只是缺少数据。
用C ++编写这段代码不太可能带来缓解。串口只有一个api,SerialPort只是一个瘦的包装器,使用像你的C ++代码那样的winapi函数。
所以请采取以下所有步骤: