VxWorks的映射6.8物理到虚拟存储器(vxWorks 6.8 mapping physical

2019-10-28 19:56发布

这是我的第一个问题在这里:)。

我一直在努力的同时,我们的物理内存在VxWorks的6.8,但没有成功映射到虚拟内存,我试图用“的VMMap”功能,但不知何故,保持与回归:

错误号= 0x30065 S_taskLib_NAME_NOT_FOUND。

我的代码是:

int page_size=0;
PHYS_ADDR GPIO_BASE_VIRTUAL_ADDR = 0x40E00000;
VIRT_ADDR VIRTUAL_ADDR=0;

page_size =vmPageSizeGet();
if((VIRTUAL_ADDR = (VIRT_ADDR)memalign(page_size,page_size*2))==NULL)// allocate 2 pages 
{
    printf("error in memalign() errno = 0x%x\n",errnoGet());
}

if(vmMap(NULL,VIRTUAL_ADDR,GPIO_BASE_VIRTUAL_ADDR,(page_size*2))== ERROR )
{
    printf("Error mapping memory errno = 0x%x%\n",errnoGet());
}

任何帮助会非常感激,感谢,

卡察夫。

Answer 1:

我看你已经解决了这个很久以前,但认为我会离开一些面包屑的不管是谁可能绊倒这种方式在昏暗和遥远的未来..

除非你正在做的RTP有一个很好的机会,你的MMU甚至没有翻译地址。 即,如果事情在说,0x7fc00400在物理地址空间出现时,你可以简单地将该值转换为指针,并使用它。

*((short *) 0x7fc00400) = foo; // write 16 bits!

是的,使用指针这种方式,但我想指出的是,如果你正在做VxWorks内核空间的代码,你几乎在裸机上,无论如何,那么为什么这些天几乎是亵渎建议(AB)呢?



文章来源: vxWorks 6.8 mapping physical to virtual memory