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