最近开始接触Vxworks,得知Vx中不可对物理地址直接操作,需要先转为虚拟地址。
本文则将介绍此实现方法。
1. 物理地址映射为虚拟地址
采用pmapGlobalMap
接口,对从0xf0000000
开始,大小为0x1000
的地址空间进行映射,得到Virtual_Base
开始的虚拟地址。
/*初始化变量*/
UINT32 Virtual_Base;
UINT32 mmuAttr = MMU_ATTR_SUP_RW | MMU_ATTR_CACHE_OFF;
/*对物理地址映射*/
Virtual_Base = pmapGlobalMap((PHYS_ADDR)0xf0000000, (size_t)0x1000, mmuAttr);
2. 获取某地址存放的值
根据1.转换为虚拟地址后,就要以这个虚拟地址为基址,从而获取其他地址的表示。
如下面例子中,(Virtual_Base + 0x0004)
表示 实际物理地址为 (0xf0000000 + 0x0004)
的地址,对这个地址进行UINT32
类型转换、并取值,即可得到该地址所存值。
res = *(UINT32 *)(Virtual_Base + 0x0004);