0
这是我的第一个问题:)。vxWorks 6.8将物理映射到虚拟内存
我一直试图趁现在身体内存在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());
}
任何帮助会非常感激,感谢 ,
卡察夫。
你知道了吗?某些vxWorks函数在失败时不会设置errno,因此您可以在调用函数来检查errno是否确实来自vmMap之前将其设置为0。 – 2011-04-01 20:12:38
嗨, 是的,我在BSP \t {/ * MAP GPIO */ 的sysLib.c中的文件解决它, 以同样的方式对两个地址(0x160 ...和0x40E ....) \t(到virt_addr_size)0x40E00000,/ *虚拟地址*/ \t(PHYS_ADDR)0x40E00000,/ *物理地址*/ \t为0x1000,\t \t \t \t \t \t/*长度,则初始状态:*/ \t VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | VM_STATE_MASK_CACHEABLE, \t VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT \t}, 和虚拟与需要“的分配大小”和, 所使用的指针所请求的地址为“平坦”,就像是与所需要的偏移量。 – 2011-04-12 14:56:53