gpt4 book ai didi

c# - 串行端口和 BSOD

转载 作者:行者123 更新时间:2023-11-30 21:26:12 25 4
gpt4 key购买 nike

我编写了一些 C# 代码,通过在端口上发出命令并监听回复来检查设备是否存在于任何 SerialPort 上。当我只是设置端口速度、打开端口、获取串行流并开始处理时,它 100% 的时间都在工作。但是,我们的一些设备以不同的速度工作,我正在尝试以不同的速度探测设备以自动协商连接并检测设备是否存在。

当我在一个线程中完成所有这些时,没有任何问题。但是十速下3s超时是每个串口30s,可能有好几个。因此希望同时探测所有端口。

有时这行得通。有时 Vista 蓝屏。当我使用线程同时探测所有端口时,它几乎总是蓝屏。当我强制一切都在一个线程中运行时,它永远不会发生。

USB 串行 Prolific PL-2303 适配器与 x64 驱动程序一起使用。


@Vinko - 感谢阅读小型转储的提示。

据我所知,问题的症结在于通过从不同的线程开始一个新的异步 I/O 操作,可以赋予重叠 I/O,在驱动程序内部引发竞争条件。由于驱动程序在内核模式下执行,BLAM!

结语

除了开始之外,不要在回调处理程序之外使用 BeginXxx,并且在调用 EndXxx 之前不要调用 BeginXxx,因为您会在以内核模式运行的驱动程序代码中引发竞争条件。

后记

我发现这也适用于套接字流。

最佳答案

曾经为其中一种设备编写过 Windows 驱动程序,我的建议是不要将时间浪费在 WinDbg 上,试图证明您已经知道的东西 - 即您使用的驱动程序有问题。

如果您能从 PL2302 找到更新的驱动程序,那么试试看,但我的建议是,如果您必须使用 USB-> 串行适配器,那么基于 FTDI 的是最好的。 (它们也不是我为其编写驱动程序的那个...)

关于c# - 串行端口和 BSOD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/256893/

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