wince5.0物理地址访问与wince6.0对比

本文介绍了WinCE5.0系统中物理地址映射的两种主要方式:静态映射和动态映射,并详细解释了它们的实现机制及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wince5.0下物理地址映射有以下两种方法:[@more@]

1.静态映射

通过OALOEMAddressTable来定义。OEMAddressTable定义了从4GB的物理地址空间到内核512MB未映射的虚拟地址空间的映射关系。内核将会从这个表中创建两个虚拟地址空间段。一个是有缓冲的,一个是没有缓冲的。静态映射的虚拟地址空间只能在内核模式下访问。

作为OEMAddressTable的补充,还可以调用CreateStaticMapping来完成物理地址到虚拟地址的映射。函数返回一个未缓冲区域的虚拟地址,当然也只能由内核访问(an uncached memory region)。一个静态映射只能在启动时间(at boot time)创建而不是能够动态创建的。一个静态映射被创建后会一直有效直到设备重启。

2. 2.动态映射

主要是通过VirtualAllocVirtualCopy两个函数来实现。首先VirtualAlloc保留好一段虚拟地址,在保留时应该指定MEM_RESERVEPAGE_NOACCESS标志而且保留的区域大小至少为2M,因为这样被就会分配到本进程地址空间外的地址,否则就会分配在本进程的地址空间内,会受到32M空间大小的限制。由VirualCopy来完成物理地址的映射。可以映射一段实际的RAM区域或外围设备的寄存器地址(这样就可以操作外围设备了)。

使用VirualCopy的注意事项有虚拟地址的page offset和物理地址的page offset必须相同,因为一个虚拟地址页只能够被映射到一个物理地址页,否则就会调用失败。在映射一段物理地址区域时,应该指定PAGE_PHYSICALPAGE_NOCACHE, 而且保证传入的物理地址左移8位。

wince5.0中,设备驱动程序可以直接使用MmMapIoSpace完成物理地址到虚拟地址的映射。HalTranslateBusAddress是把某个类型的某个物理总线的地址转化为物理地址(全局的)。然后就可以使用MmMapIoSpace将物理地址映射为某个虚拟地址。TransBusAddrToVirtual直接会把一个与总线相关地址直接映射为可访问的虚拟地址。

由于驱动程序和应用程序都是运行在用户空间下。所以驱动程序有的权限,应用程序也会有。在驱动和应用中,通过上述的动态映射方法,来访问物理地址或控制设备寄存器都会容易做到。Wince5.0还有内核模式与用户模式的切换的接口SetKmode6.0下已经不被支持),应用程序可以通过这个接口切换到内核模式下,可以通过静态映射的有效虚拟地址经过MMU直接改变某个RAM的存储内容,无需在映射,没有地址访问限制是内核模式下的特点。

显而易见在wince5.0访问物理地址和外围设备具有很大的自由,应用程序的权限很大,很容易就会破坏整个系统。在接下来的wince6.0 内核有了很大的变化,虚拟内存模型与5.0大有不同,应用程序不能在用户模式下直接完成物理地址的映射了(virtualcopy映射物理地址将会是个不支持的请求),只能通过内核驱动程序来完成物理地址的映射,具体参考上篇博文介绍wince6.0下访问物理地址。

1. 用户身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值