wince6.0内存管理-地址问题
PRIVATE volatile S3C2440A_MCX_REG * v_MCXPregs[color=#000000];//已定义了32字节的结构体[/color]
//地址匹配
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)??