【Vxworks】映射物理地址为虚拟地址,并获取此地址的存放值

最近开始接触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);

你可能感兴趣的:(c语言,Vxworks,嵌入式硬件,操作系统,arm开发)