WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(12)-不连续地址的内存配置

本文主要是介绍WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(12)-不连续地址的内存配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇文章已经实现了Multi-Bin,那样原来整个NK占用的内存就释放了许多,80402000到82000000的地址的内存就可以供CE使用.
NK    80402000     02BFF000    NANDIMAGE

而在oemaddrtab_cfg.inc里映射的内存虚拟地址为:
DCD     0x80000000, 0x32000000, 32      ; 32 MB DRAM BANK 6
DCD     0x8C000000, 0x30000000, 32      ; 32 MB DRAM BANK 6

config.bib中定义了一段连续的内存:
RAM            8C200000     01E00000    RAM

这就需要我们来实现如何把80402000起始的内存区域注册给CE使用.MS提供了两种方法:OEMEnumExtensionDRAM和OEMEnumExtensionDRAM
OEMEnumExtensionDRAM用来枚举多个内存区域(最多16个),而OEMEnumExtensionDRAM用来注册2个内存区域(一个在config.bib注册),使用了OEMEnumExtensionDRAM,OEMEnumExtensionDRAM就不被调用.具体调用在C:/WINCE500/PRIVATE/WINCEOS/COREOS/NK/KERNEL/loader.c:


接下来我们就分别用这两种方法来注册80402000起始的内存
1.OEMEnumExtensionDRAM
使用OEMEnumExtensionDRAM需要在OEMInit里实现一个函数指针:
pNKEnumExtensionDRAM = OEMEnumExtensionDRAM;
OEMEnumExtensionDRAM有两个参数(PMEMORY_SECTION pMemSections, DWORD cMemSections)
PMEMORY_SECTION的原型为:

dwFlags一直为0,dwStart和dwLen分别为内存块的起始地址和大小
cMemSections是最大的内存块个数,这里值为15,实际上指16个内存块.

OEMEnumExtensionDRAM具体实现如下(我们只注册了一个功能块,如果是多个,以此类推):

2.OEMEnumExtensionDRAM
OEMEnumExtensionDRAM不需要赋值给对应的函数指针,只需实现即可.
先把前面的pNKEnumExtensionDRAM注释掉,在init.c中实现OEMEnumExtensionDRAM函数:

但这时候你编译会发现错误
error LNK2005: OEMGetExtensionDRAM already defined in oal_other.lib(memory.obj)
这是因为在WINCE500/PLATFORM/COMMON/SRC/COMMON/OTHER/memory.c实现了OEMGetExtensionDRAM的空函数.

当然我们也可以直接在这里修改,但是这里是common目录,使用其他BSP时也会把这段代码编译进去,为了不必要的麻烦,将这里注释掉,实现在bsp OAL中的init.c里.

以上方法最终都可以在CE控制面板的system中看到我们的内存由原来的30M增加到了50M.

这篇关于WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(12)-不连续地址的内存配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447489

相关文章

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1