主题 : micro2440+wince6.0内存管理-地址问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 16327
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2010-03-16
最后登录: 2010-09-05
楼主  发表于: 2010-07-18 14:36

 micro2440+wince6.0内存管理-地址问题

PRIVATE volatile S3C2440A_MCX_REG * v_MCXPregs//已定义了32字节的结构体
//地址匹配
v_MCXPregs = (volatile S3C2440A_MCX_REG *)VirtualAlloc(0, sizeof(S3C2440A_MCX_REG), MEM_RESERVE, PAGE_NOACCESS);
if (v_MCXPregs == NULL)  
{
ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc failed!\r\n")));
RetValue = FALSE;
}
else  
{
if (!VirtualCopy((PVOID)v_MCXPregs, (PVOID)(0X18000000 >> 8), sizeof(S3C2440A_MCX_REG),  

PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))  
{
ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy failed!\r\n")));
RetValue = FALSE;
}
}

问题出现了:
RETAILMSG(1, (TEXT("Outpw::: SetWR2dizhi..set..%x\r\n"),v_MCXPregs)); //打印地址d3620000
RETAILMSG(1, (TEXT("Outpw::: SetWR2dizhis2440MCX+1..set..%x\r\n"),(DWORD*)(v_MCXPregs+1)));//打印地址d3620020
RETAILMSG(1, (TEXT("Outpw::: SetWR2dizhis2440MCX+2..set..%x\r\n"),(DWORD*)(v_MCXPregs+2)));//打印地址d3620040
RETAILMSG(1, (TEXT("Outpw::: SetWR2dizhis2440MCX+3..set..%x\r\n"),(DWORD*)(v_MCXPregs+3)));//打印地址d3620080
RETAILMSG(1, (TEXT("Outpw::: SetWR2dizhis2440MCX+3..set..%x\r\n"),&v_MCXPregs->rMCXWR2));//打印地址d3620004

rMCXWR2地址是d3620004,和定义的偏移量一样,(DWORD*)(v_MCXPregs+1)怎么是d3620020,而不是我想要的d3d20001??
如果我想访问d3620004,应该怎么偏移(不用v_MCXPregs->rMCXWR2)??