阅读:2744回复:21
请问:如何在VC++6.0中锁定内存和给寄存器赋值
我在编写PCI的驱动时用到了内存映射和内存锁定,我想请问如何能锁定内存使在系统自己换页时不要修改我的驱动占用的内存呢?有函数可以直接实现吗?另外,有给PCI卡的寄存器赋值的函数吗?
|
|
沙发#
发布于:2003-04-18 03:18
如果你是用wdm方法,那么你说的那些工作都由系统完成。你不需要也不可以做这些工作。
|
|
板凳#
发布于:2003-04-18 08:26
我做的是VxD的驱动
|
|
地板#
发布于:2003-04-18 12:50
我在编写PCI的驱动时用到了内存映射和内存锁定,我想请问如何能锁定内存使在系统自己换页时不要修改我的驱动占用的内存呢?有函数可以直接实现吗?
你向系统申请的内存系统不会再用它,除非你释放了。 另外,有给PCI卡的寄存器赋值的函数吗? 可以调用PCI-BIOS。通常只读不写,除非你的卡不是PnP的。 |
|
地下室#
发布于:2003-04-19 08:07
谢谢您的帮助,系统在页面换入换出时候会对内存改动啊,否则WINDOWS就不能多线程工作了吧?
如果不能给寄存器赋值,那么怎么给PCI卡初始话呢? |
|
5楼#
发布于:2003-04-19 12:08
谢谢您的帮助,系统在页面换入换出时候会对内存改动啊,否则WINDOWS就不能多线程工作了吧? 第1个问题OS考虑的问题,你只要用就可以了。 第2个问题是PnP管理器的问题,你也只管用。只有在非PnP卡时你才可以对寄存器赋值,否则你写了也会被PnP管理器改写。 |
|
6楼#
发布于:2003-04-19 14:28
我在编写PCI的驱动时用到了内存映射和内存锁定,我想请问如何能锁定内存使在系统自己换页时不要修改我的驱动占用的内存呢?有函数可以直接实现吗?另外,有给PCI卡的寄存器赋值的函数吗? 1、有个函数,LinePageLock,这样就一直在RAM了。 2、知道PCI卡的I/O base address,在98下可以直接write、read呀 |
|
7楼#
发布于:2003-04-20 13:14
谢谢,我的问题基本解决了,非常感谢
|
|
8楼#
发布于:2003-04-20 14:54
再请问下,LinePageLock是C++的函数吗?我的帮助文档里面怎么找不到呢?
|
|
9楼#
发布于:2003-04-21 17:04
再请问下,LinePageLock是C++的函数吗?我的帮助文档里面怎么找不到呢? 当然不是C++的函数。看看VToolsD的帮助吧。 |
|
10楼#
发布于:2003-04-21 19:35
我看了VTOOLSD的帮助,可是还是没有呀。搜索不到
|
|
11楼#
发布于:2003-04-21 20:18
sorry,写错了,是linpagelock,不是line...
|
|
12楼#
发布于:2003-04-22 08:10
找到了,呵呵,谢谢,不过似乎是一个structure不是函数,可以实现的吗?
|
|
13楼#
发布于:2003-04-22 08:14
哦,是我看错了,呵呵。现在明白了,非常感谢
|
|
14楼#
发布于:2003-04-22 08:26
还有个小问题,它在定义锁定的页面的数目时用的是DWORD定义的(比如说是DWORD nPAGE),我可以这样给它赋值吗?(nPAGE=100)
|
|
15楼#
发布于:2003-04-22 12:14
我都是有个函数封装一下。
lpMem为要lock的变量的地址。 DWORD MyPageLock(DWORD lpMem, DWORD cbSize) { DWORD LinPageNum = 0, LinOffset = 0, nPages = 0; LinOffset = (DWORD)lpMem & 0xfff;// page offset of memory to be mapped LinPageNum = (DWORD)lpMem >> 12; // generate page number // Calculate # of pages to map globally nPages = (((DWORD)lpMem + cbSize) >> 12) - LinPageNum + 1; //check if the pages are valid if(PageCheckLinRange(LinPageNum,nPages,0) < nPages) { return 0; } // // Return global mapping of passed in pointer, as this new pointer // is how the memory must be accessed out of context. // return (LinPageLock(LinPageNum, nPages, PAGEMAPGLOBAL) + LinOffset); } 再写个相应的UnLock函数。 |
|
16楼#
发布于:2003-04-22 12:20
非常感谢,这次完全明白了。THANK YOU!
|
|
17楼#
发布于:2003-04-22 19:51
知道PCI卡的I/O base address,在98下可以直接write、read呀
一个傻傻的问题:怎么在VC++里面实现呀? |
|
18楼#
发布于:2003-04-22 20:35
ft
inp()啊什么的函数,直接读写IO地址 |
|
19楼#
发布于:2003-04-23 09:59
有实现相同功能但是是读写内存地址的函数吗?
|
|
上一页
下一页