如何在wince中将虚地址转为实地址
来源:互联网 发布:阿里云应用发布平台 编辑:程序博客网 时间:2024/05/24 22:41
在WinCE开发中,尤其是驱动程序开发中,有时候我们需要得到某个buffer的真实物理地址,用于些寄存器,但是通常我们只有它在当前段中的虚地址。这就对程序的操作造成了麻烦。
下面就是将虚地址转为实地址的方法。
输入:PVOID p, DWORD size //其中p为buffer的虚地址
输出:DWORD[] m_PhysAddrArray, DWORD pageSize //m_PhysAddrArray为一个数组,该数组中存放有buffer各个page的起始实地址。
DWORD pageSize = UserKInfo[KINX_PAGESIZE]; //UserKInfo是一个WinCE predefined的数组,它存放一些关于内存分配的信息。
//取得buffer所涉及的最后一个page的起始虚地址
DWORD alignMask = ~(pageSize-1);
DWORD dwEndPageAddress = ((DWORD) p + size) & alignMask;
//取得buffer开始地址所在的page的起始虚地址
DWORD dwStartPageAddress = ((DWORD) p) & alignMask;
//buffer所涉及的全部page的数目
m_dwNbElement = 1 + ((dwEndPageAddress - dwStartPageAddress) / pageSize);
//存放各page起始实地址的数组
m_PhysAddrArray = new DWORD[m_dwNbElement];
DWORD flags = LOCKFLAG_WRITE|LOCKFLAG_READ;
//Lock 所有涉及的page,并且获得page的编号,0 based
LockPages(p,size,m_PhysAddrArray,flags);
//将page的编号乘以page的大小,就得到了page的起始物理地址
DWORD dwPageShift= UserKInfo[KINX_PFN_SHIFT];
for (DWORD i=0;i<m_dwNbElement;i++)
{
m_PhysAddrArray[i] = m_PhysAddrArray[i] << dwPageShift;
}
- 如何在wince中将虚地址转为实地址
- 在C#中将.bmp转为.jpg格式的函数
- 在C#中将.bmp转为.jpg格式的方法
- 在web中将oad相对路径转为绝对路径(sping)
- 在ECLIPSE中将java项目转为WEB项目
- 在ECLIPSE中将java项目转为WEB项目
- Linux开发--不编写驱动前提下应用层如何直接访问实地址
- 如何修改wince(s3c2410)的MAC地址?
- 如何修改wince(s3c2410)的MAC地址?
- 如何修改wince(s3c2410)的MAC地址?
- 如何修改wince(s3c2410)的MAC地址
- 如何修改wince(s3c2410)的MAC地址?
- 如何在 EXCEL 中将行列转置
- 如何在WEBI中将空变为零
- Java中将字符串转为日期
- java中将汉字转为拼音
- android中将汉字转为拼音
- ios中将pcm转为wav
- 什么是云计算 你了解多少云计算
- 多用于清除页面缓存
- [JS]详尽解析window.event对象 --javascript 教程及特效
- 寻找所缺的数
- 防止程序多开的方法
- 如何在wince中将虚地址转为实地址
- PPT打包成EXE常用方法
- poj 1480 如何用程序实现m^n
- 动态导航脚本
- 下拉式导航菜单
- 目录式导航菜单
- 滚动链接导航
- 在VS2005/2008中字符串编码问题的解决及字符串和数值类型常用的转换方法
- C++跨平台应用程序库JUCE