2007年3月12日星期一

[新手上路]在你的WinCE应用程序中映射硬件物理地址

在你的WinCE应用程序中映射硬件物理地址,下面是个例子

void * MapPhys(UINT32 addr,int size)
{
BYTE * Buffer=NULL;

//分配size大小虚拟地址空间
Buffer = (BYTE *)VirtualAlloc(0, size, MEM_RESERVE, PAGE_NOACCESS);
if(!Buffer)
{
MessageBox(NULL, _T("mem map error"), _T("Error"), MB_OK|MB_TOPMOST);
goto cleanup;
}
//映射物理地址(传给内核的地址总是要右移8位)
if (!VirtualCopy(Buffer, (void *)(addr>>8),size,PAGE_READWRITE | PAGE_PHYSICAL | PAGE_NOCACHE))
{
MessageBox(NULL, _T("mem copy error"), _T("Error"), MB_OK|MB_TOPMOST);
goto cleanup;
}
cleanup:
return (void*)Buffer;
}


这个函数返回的地址你就可以用了。Good luck!

没有评论: