代码改变世界

征询关于虚拟串口问题的解决方法

2009-04-04 12:32  ilclr  阅读(3057)  评论(12编辑  收藏  举报

最近在为公司开发一套系统,其中用到了一个串口设备,暂且不论具体设备是什么用途。但与此设备的通讯不是通过物理串口,而是通过虚拟串口进行的----要在机器A上调试串口通信,就必须先安装虚拟串口软件(驱动),然后创建一个新的虚拟串口,最后通过此串口与实际的串口设备通信。

目前,所有指令封装完毕且运行正常,但有个问题不是很好解决:系统在运行的时候总是有时不时的蓝屏,显示错误标志是IRQ_NOT_LESS_OR_EQUAL

网上查找了半天,也偶尔看到有人碰到过类似情况,原因说是虚拟串口的驱动导致----我个人的估计也是于此,因为一般的C# SDK开发不太可能导致蓝屏,导致蓝屏的一般都是针对RING 0级的指令调用,而SDK是不支持对RING 0级指令的访问的。目前还没有好的解决办法。

不知道园子里面有朋友碰到过类似的问题没有,如果有最后是如何解决的?

另外:我们使用的串口设备的每个单独指令都是一个子指令序列集,例如

针对设置串口设备时间指令,详细步骤如下

第一步:向串口发送字节流05 30 69

第二步:串口返回06

第三步:继续向串口发送02 30 39 30 34 30 35 31 34 32 32 35 33 03 01,设置串口时间为2009年4月5日下午14点22分53秒

第四步:串口返回06

最后一步:向串口发送04,表示指令结束执行

因为每个指令都是子指令序列集,所以后台为了将发送指令动作与数据接收动作同步,使用了AutoResetEvent进行了事件线程与主线程的同步。同时在每个子指令执行完后都会通过DiscardInBuffer()和DiscardOutBuffer()释放虚拟串口驱动中的进出缓冲,最后Close()关闭串口。