阅读:690回复:0
过年了,高手们怎么还没回来?
各位大虾,小弟最近在调一块老ISA板的驱动,那板上有一双口RAM,提供给PC机的地址是0xE000,即要求用内存映射访问.我用的是NT式非即插即用驱动,没用DriverWorks写,我认为就那么一个卡,直接用DDK写简单些.但现在在内存映射方面出问题了,我在驱动入口例程中用MmMapIoSpace函数将0xE000地址映射成了可以使用的指针,打印出来是0xF09E4000,我也可以用应用程序在这个地址上读写,但我把卡拔掉后还是能在这个地址上读写,就是说PC机没把数据写到板上的双口RAM中,我用示波器观察ISA接口的MEMW引脚也没看到低电平,就是说PC机跟本没往卡上写数据.
我在其它参考书上看到实例是这样做的:在驱动入口例程中先构造一个资源列表,然后用ReportResourceUsage函数通知内核要用哪些资源,这一步我没做,我认为没必要.然后用TrancelateBusAddress函数转换总线地址,它说看返因的AddSpace变量的值看是否有必要再进行内存映射,这一点不大明白,是IO地址还是内存地址是编写驱动的人自己决定的,怎么还要看内核的某个返回值再动态决定是否要再进行内存映射呢?有谁能帮我解释一下那个TrancelateBusAddress函数的用法吗? 哪位好心人帮我回答一下上面的问题,可送200分,不胜感激! |
|
|