困惑已久的地址问题

xiangbing   2010-4-22 17:00 楼主
刚上手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?

回复评论 (4)

没人帮忙哪,自己顶下
点赞  2010-4-22 17:28
pPhytSrcAddr是物理地址还是虚拟地址?

他是堆内存指针了,也不是直接的虚拟地址。
点赞  2010-4-22 18:55
这个我也比较模糊.需要向大家学习
点赞  2010-4-22 20:10
多谢校友了,不过还是弄不明白,能推荐几本介绍内存方面的好书,或者这方面的文章吗,我现在估计我的程序就是卡在这里了。应用程序的数据没有传到驱动申请的地址空间里面,在传的过程中可能要地址映射的什么的,还没弄明白,得继续学习。哪位大侠对这方面比较清楚,指点一下啊
点赞  2010-4-23 16:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复