Bikky
驱动牛犊
驱动牛犊
  • 注册日期2003-12-01
  • 最后登录2017-02-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望11点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:685回复:0

过年了,高手们怎么还没回来?

楼主#
更多 发布于:2004-02-03 14:46
  各位大虾,小弟最近在调一块老ISA板的驱动,那板上有一双口RAM,提供给PC机的地址是0xE000,即要求用内存映射访问.我用的是NT式非即插即用驱动,没用DriverWorks写,我认为就那么一个卡,直接用DDK写简单些.但现在在内存映射方面出问题了,我在驱动入口例程中用MmMapIoSpace函数将0xE000地址映射成了可以使用的指针,打印出来是0xF09E4000,我也可以用应用程序在这个地址上读写,但我把卡拔掉后还是能在这个地址上读写,就是说PC机没把数据写到板上的双口RAM中,我用示波器观察ISA接口的MEMW引脚也没看到低电平,就是说PC机跟本没往卡上写数据.

我在其它参考书上看到实例是这样做的:在驱动入口例程中先构造一个资源列表,然后用ReportResourceUsage函数通知内核要用哪些资源,这一步我没做,我认为没必要.然后用TrancelateBusAddress函数转换总线地址,它说看返因的AddSpace变量的值看是否有必要再进行内存映射,这一点不大明白,是IO地址还是内存地址是编写驱动的人自己决定的,怎么还要看内核的某个返回值再动态决定是否要再进行内存映射呢?有谁能帮我解释一下那个TrancelateBusAddress函数的用法吗?

哪位好心人帮我回答一下上面的问题,可送200分,不胜感激!
百克
游客

返回顶部