首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

关于物理地址映射有关问题

2012-03-01 
关于物理地址映射问题我看到介绍的驱动例程有两种形式的映射一种是利用MmMapIoSpace,另外一种是用VirtualA

关于物理地址映射问题
我看到介绍的驱动例程有两种形式的映射
一种是利用MmMapIoSpace,另外一种是用VirtualAlloc
如:ELECTROMOTOR_GPACON=(ULONG)MmMapIoSpace(GPACON,4,FALSE);

v_pIOPregs = (volatile S3C2410X_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2410X_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);

这两种方式有什么相同点和不同点,各都可以用在什么情况下呢

谢谢大家!

[解决办法]
This function maps a physical address space to a nonpaged, process-dependent address space. It provides a virtual address, which is directly mapped, to the device.

PVOID MmMapIoSpace( 
PHYSICAL_ADDRESS PhysicalAddress, 
ULONG NumberOfBytes, 
BOOLEAN CacheEnable 
);


-----------------------------
This function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by VirtualAlloc is initialized to zero. 


[解决办法]
其实,MmMapIoSpace函数内部就是通过VirtualAlloc和VirtualCopy函数来实现物理地址到虚拟地址映射的,MmMapIoSpace的原型代码在下面目录:
%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\CEDDK\DDK_MAP\ddk_map.c

看一下你就都明白了
[解决办法]
VirtualAlloc貌似只针对内核空间。

MmMapIoSpace提供给用户空间。

所以在用户空间希望获得内核空间的权限,必须用VirtualAlloc + VirtualCopy来配合使用。

热点排行