访问物理内存CEDDK.ppt

访问物理内存CEDDK.ppt

ID:51629627

大小:825.36 KB

页数:12页

时间:2020-03-26

访问物理内存CEDDK.ppt_第1页
访问物理内存CEDDK.ppt_第2页
访问物理内存CEDDK.ppt_第3页
访问物理内存CEDDK.ppt_第4页
访问物理内存CEDDK.ppt_第5页
资源描述:

《访问物理内存CEDDK.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、访问物理内存访问物理内存嵌入式设备与桌面PC的一个显著不同是应用程序中可以直接访问某一段物理内存与桌面版本Windows相比,WindowsCE提供了相对简单的物理内存访问方式无论是驱动程序还是应用程序都可通过API访问某一段物理内存访问物理内存物理内存结构体PHYSICAL_ADDRESStypedefLARGE_INTEGERPHYSICAL_ADDRESS,*PPHYSICAL_ADDRESS;typedefunion_LARGE_INTEGER{struct{ DWORDLowPart; LONGHighPart; };

2、LONGLONGQuadPart;}LARGE_INTEGER;WindowsCE用64位来代表物理地址。对于大多数32位的CPU而言,只需把它的HighPart设置为0即可。内存管理函数设备驱动程序是用户态模块必须将物理内存映射成虚拟内存内存管理函数VirtualAlloc用于在当前进程的虚拟地址空间中保留或者提交一段虚拟内存空间LPVOIDVirtualAlloc(LPVOIDlpAddress,//希望分配的虚拟内存起始地址SIZE_TdwSize,//大小,以字节为单位DWORDflAllocationType,//申请类

3、型,分为MEM_COMMIT和MEM_RESERVEDWORDflProtect);//访问权限MEM_RESERVE:只是在进程的虚拟地址空间内保留一段,并不分配实际的物理内存。MEM_COMMIT:真正为虚拟内存分配物理内存。内存管理函数VirtualCopy用来绑定一段物理内存和虚拟内存BOOLVirtualCopy(LPVOIDlpvDest,//虚拟目的地址指针,接受VirtualAlloc的返回值LPVOIDlpvSrc,//源物理地址指针DWORDcbSize,//要绑定的大小,大小必须与虚拟地址相同DWORDfdw

4、Protect//访问权限);这里需要注意的是fdwProtect参数。如果是驱动程序访问,需要设置为PAGE_NOCACHE,以访问无缓存段虚拟地址。如果映射的物理地址范围在0x1FFFFFFF之上,必须使用PAGE_PHYSICAL,此时必须把lpvSrc右移八位,实现地址对齐。(这是由内核中VirtualCopy的实现决定的,在那个函数中会判断如果是PAGE_PHYSICAL就将PHYSADDR左移8位移回来)内存管理函数使用VirtualAlloc+VirtualCopy来访问物理内存VirtualAlloc只需对内存保留

5、,VirtualCopy负责把一段物理内存和虚拟内存绑定内存管理函数MmMapIoSpace用来把物理地址直接映射到与进程无关的虚拟地址上;MmMapIoSpace申请的内存要用MmUnMapIoSpace释放。PVOIDMmMapIoSpace(PHYSICAL_ADDRESSPhysicalAddress,//起始物理地址ULONGNumberOfBytes,//要映射的字节数BOOLEANCacheEnable//是否缓存);MmUnmapIoSpace(  PVOIDBaseAddress,//MmMapIoSpace返回

6、的起始虚拟地址ULONGNumberOfBytes//MmMapIoSpace映射的字节数);CEDDKCEDDK.dllexposesfunctionstypicallyusedbydriversforhandlingbusaddresstranslations,allocatingandmappingdevicememory,settingupdirectmemoryaccess(DMA)buffers,performingI/O,andsoon.——MSDNCEDDK.DLL:是一个动态链接库,提供大量的函数来完成驱动程序的

7、一些常用操作。总线管理内存管理I/O管理CEDDK简介设备驱动使用CEDDK设备管理器设备驱动CEDDK.DLL硬件CEDDK内容部分函示例总线管理HalGetBusDataByOffset()HalGetBusData()HalSetBusDataByOffset()HalSetBusData()HalTranslateBusAddress()TranslateSystemAddress()内存管理MmMapIOSpace–MmUnmapIOSpaceHalAllocateCommonBufferI/O存取XXXX=>UCHAR

8、/USHORT/ULONGREAD_REGISTER_XXXXWRITE_REGISTER_XXXXREAD_PORT_XXXXWRITE_PORT_XXXXCEDDKCEDDK.dll源代码位置%_WINCEROOT%PublicCommon

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。