地址映射的右移8位是什么意思啊该如何解决
地址映射的右移8位是什么意思啊。
看代码都会有如下:
#define PHYSADDR ((PVOID)0x10000000)
// PHYSADDR is the physical address of the peripheral
// registers
#define SIZE (4800*4)
LPVOID lpv;
BOOL bRet;
lpv = VirtualAlloc(0, SIZE, MEM_RESERVE, PAGE_NOACCESS);
bRet = VirtualCopy(lpv, PHYSADDR> > 8, SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);
为什么PHYSADDR要右移8位呀?已经是物理实际地址了嘛,右移不是偏了?
------解决方案--------------------
相当于除于256
0x10000000 就变成 0x100000了
------解决方案--------------------
lpv = VirtualAlloc(0, SIZE, MEM_RESERVE, PAGE_NOACCESS);//lpv是申请的虚拟内存地址
bRet = VirtualCopy(lpv, PHYSADDR> > 8, SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);//把lpv拷贝到PHYSADDR> > 8(PHYSADDR ((PVOID)0x10000000),位移8就等于0x1000000)的位置。
看代码都会有如下:
#define PHYSADDR ((PVOID)0x10000000)
// PHYSADDR is the physical address of the peripheral
// registers
#define SIZE (4800*4)
LPVOID lpv;
BOOL bRet;
lpv = VirtualAlloc(0, SIZE, MEM_RESERVE, PAGE_NOACCESS);
bRet = VirtualCopy(lpv, PHYSADDR> > 8, SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);
为什么PHYSADDR要右移8位呀?已经是物理实际地址了嘛,右移不是偏了?
------解决方案--------------------
相当于除于256
0x10000000 就变成 0x100000了
------解决方案--------------------
lpv = VirtualAlloc(0, SIZE, MEM_RESERVE, PAGE_NOACCESS);//lpv是申请的虚拟内存地址
bRet = VirtualCopy(lpv, PHYSADDR> > 8, SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);//把lpv拷贝到PHYSADDR> > 8(PHYSADDR ((PVOID)0x10000000),位移8就等于0x1000000)的位置。