阅读:984回复:2
io 端口的访问 ― luo 大侠及其他大侠帮忙
请教各位大侠,在对 io 端口读写的时候,有没有加锁(lock)、开锁(unlock)之说? 如果有,能找到相关书籍或资料吗?
我所遇到问题如下: 用 9052 实现从 pci 转 isa , 仅仅使用了 io 资源。 在对 io 端口进行读写的时候,发现出现数据丢失的情况。往端口写 1、0、1 的时候(分三次写),如果时间间隔较长,则数据均正常;但如果间隔很短(均为手工操作),第三次的 1 就可能写不过去。已经折腾了一周了,还是没明白。今天用 plx 厂家提供的 plxmon 程序写端口,好像不存在这个问题。而且在 ice 中可观测到调试信息: locking 。。。 send irp 。。。 unlocking。。。 我怀疑跟操作系统的调度有关,但是又没法确认。请各位大侠帮帮忙!我在 win98 下操作,vxd 格式。 plxmon 用的是 wdm 格式。 [编辑 - 1/25/02 作者: lvwj] |
|
|
沙发#
发布于:2002-01-26 18:20
对io端口的读写时,并没有硬性规定必须加锁后才能访问。
如果你需要,可是使用VTOOLSD中的KEvent类设置互斥。 当然98DDK也有相应的函数。 |
|
|
板凳#
发布于:2002-01-28 17:42
我已经找到问题的原因了。我在每次写操作之后均进行了两次读操作。如果将读操作注释掉而单独进行写操作,就不会出现上述问题。
问题基本上可认定为 读操作占用了太多的系统开销,系统来不及响应。但是,为什么读操作会占用那么大的系统开销? 我是在 win98 下写的 vxd, ring3 的应用程序通过 deviceiocontrol 通知 vxd 去 read/write io port。 原来的插卡在 仿真 dos 下,访问 isa 槽时,也没有存在端口访问延迟的现象。isa 槽是通过主板上的 bridge 转接的。我使用 9052 的 isa 方式进行转接,问什么会出现这种现象呢?请大家帮帮忙。 感谢 littleSW。 |
|
|