gpt4 book ai didi

c# - 串口数据丢失 - C#

转载 作者:行者123 更新时间:2023-11-30 19:04:00 24 4
gpt4 key购买 nike

我正在开发一个 SerialPort 应用程序,其中一个非常简单的部分给我带来了问题。我只是想从端口读取恒定的数据流,并在它进入时将其写入二进制文件。问题似乎是速度:我的代码在我的 9600 波特测试设备上运行良好,但是当转移到115200bps 直播设备,我似乎正在丢失数据。发生的事情是在一段可变的时间之后,我错过了 1 个字节,这会丢弃其余数据。我已经尝试了一些事情:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
bwLogger.Write((byte)serialPort1.ReadByte());
}

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] inc = new byte[serialPort1.BytesToRead];
serialPort1.Read(inc, 0, inc.Length);

bwLogger.Write(inc);
}

和一些变化。我不能使用 ReadLine(),因为我正在处理恒定的数据流(对吗?)。我试过摆弄缓冲区大小(serialPort1.ReadBufferSize 和硬件 FIFO 缓冲区)。理想情况下,出于可用性目的,我会在软件方面处理此问题,而不是让用户必须更改 Windows 驱动程序设置。

有什么想法吗?

最佳答案

如果问题似乎是您无法足够快地处理数据,您可以尝试对数据进行双缓冲。

1) 允许一个线程将串口读入一个缓冲区。这可能涉及将数据从端口复制到缓冲区(我对 .NET 不是很熟悉)。

2) 当您准备好处理传入的数据时,(在不同的线程上)让您的程序读入第二个缓冲区,同时您应该将第一个缓冲区写入磁盘。

3) 当第一个缓冲区写入磁盘后,将其换回串口缓冲区,并将第二个缓冲区写入磁盘。重复过程,不断交换缓冲区。

关于c# - 串口数据丢失 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1595325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com