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

相关文章

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col