4404|9

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问怎么得到虚拟地址对应的物理地址? [复制链接]

我在evc程序里malloc了1.5MB的数据块,想得到它的物理地址然后扔给显示硬件的寄存器,请问有什么办法吗?

最新回复

HalAllocateCommonBuffer能用,谢谢paul_chao和seu_dust  详情 回复 发表于 2009-6-22 13:23
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
MmMapIoSpace
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
wince编程--对物理地址的访问
  
(1)IO接口是XSCale处理器的外部设备,对于一般的单片机,可以直接操作硬件,即通过直接读写IO端口来访问硬件.而对于WICNE操作系统,它屏蔽了用户应用程序对硬件访问的权限,只有内核应用程序才可以访问硬件资源.如果要直接访问某一址的物理内存(对于ARM核的MCU,IO端口地址通常被映射到物理内存中,内存和IO统一编址)可以采用内存映射方法,将该硬件寄存器映射到普通的内存空间,像操作内存地址一样操作硬件寄存器.WINCE提供了VirtualAlloc()和VirtualCopy()函数, VirtualAlloc()负责在虚拟内存空间内保留一段虚拟内存,而VirtualCopy()负责把一段物理内存和虚拟内在绑定,这样最终对物理内存的访问就可以通过虚拟地址来进行了.
(2)

首先使用VirtualAlloc 分配出一个虚拟的地址空间,代码如下:pLightReg=(char*)VirtualAlloc(0,0x400,MEM_RESERVE,PAGE_READWRITE)这样就分配出一个MEM_RESERVE类型的存储器空间,但它并没有占用实际内存空间,而是虚拟的地址空间.接着将实际的硬件地址(例如LED的片选控制信号地址)映射到前面分配的虚拟地址空间,使用VirtualCopy函数建立起两个地址间的映射关系.代码如下:VirtualCopy((PVOID)pLightReg,(PVOID)(pLightIoBaseAddress>>8),0x400,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL)这里pLightReg是前面分配的虚拟地址空间,而pLightIoBaseAddress为实际的硬件地址,需要将它右移8位,因为在函数中存储器分配是以256位为单位的.而后面的选项则是指定了映射地址的属性—可读.不缓冲以及硬件物理地址.现在就可以使用虚拟地址访问原来不能直接访问的硬件地址了.  
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
LZ 应用 HalAllocateCommonBuffer or AllocPhysMem API 来同时获得 PA & VA, 而不是要到了 VA, 想去再转出 PA.

Paul, Chao @ Techware
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
可能需要使用VirtualAlloc 而不是malloc
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
MmMapIoSpace我已经用过了,能顺利访问寄存器,
我是想用malloc得到的数据块替换我原先的显存,
所以想知道虚拟地址对应的物理地址.
我用下来感觉MmMapIoSpace只能由物理地址得到对应的虚拟地址,不能实现我的功能啊
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 paul_chao 的回复:
LZ 应用 HalAllocateCommonBuffer or AllocPhysMem API 来同时获得 PA & VA, 而不是要到了 VA, 想去再转出 PA.

Paul, Chao @ Techware


malloc貌似不行,以前遇到过相似问题,3楼的方法应该可以
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
试了一下,感觉HalAllocateCommonBuffer可能有用,我的显示硬件的使用方式和DMA类似,稍微有些差别
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

9
 
还要看看虚拟映射表,g_oalAddressTable,一般位于BSP目录下的inc目录中。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
HalAllocateCommonBuffer能用,谢谢paul_chao和seu_dust
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表