困惑已久的地址问题
刚上手WINCE,做一个CAMERA方面的驱动,主要是将inputbuffer中的数据通过驱动转换为outputbuffer,而且inputbu和outputbu都需要和应用程序交互,中间就有一些地址的映射转换。现在是被这些地址搞糊涂了。向各位大侠请教:
首先程序里用
pPhytSrcAddr/*pVirtSrcAddr*/ = (PBYTE)HalAllocateCommonBuffer(&Adapter1, 0x71000, &g_PhysSrcAddr, FALSE);
申请了块连续的物理地址g_PhysSrcAddr,大小是320*240*12=112.5K,即0x71000。
但这个程序返回的pPhytSrcAddr是物理地址还是虚拟地址,帮助里说返回的是虚拟地址,但下面又用函数
VirtualCopy((PVOID)pVirtSrcAddr,(PVOID)(((DWORD)pPhytSrcAddr)>>8),0x100000,PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL)
VirtualCopy帮助里说是将物理地址绑定到虚拟地址上,也就是说把物理地址pPhytSrcAddr绑定到虚拟地址pVirtSrcAddr上。这里我就比较糊涂了。
打印出来
g_PhysSrcAddr=0x30cf4000,
pPhytSrcAddr=0x640000
pVirtSrcAddr=ox760000
不知道这些地址我们自己可以计算出来吗,为什么地址的前8位没有显示,是默认的80640000?
[解决办法]
pPhytSrcAddr是物理地址还是虚拟地址?
他是堆内存指针了,也不是直接的虚拟地址。
[解决办法]
这个我也比较模糊.需要向大家学习