刚上手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是物理地址还是虚拟地址?
他是堆内存指针了,也不是直接的虚拟地址。
多谢校友了,不过还是弄不明白,能推荐几本介绍内存方面的好书,或者这方面的文章吗,我现在估计我的程序就是卡在这里了。应用程序的数据没有传到驱动申请的地址空间里面,在传的过程中可能要地址映射的什么的,还没弄明白,得继续学习。哪位大侠对这方面比较清楚,指点一下啊