如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
2010-11-05 10:43
375 查看
如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
//-----------------------------------------------------------------------------------------------------------// 日期:2009年3月19日 13:41:38
// 作者:wogoyixikexie@gliet
// 版权:桂林电子科技大学一系科协wogoyixikexie@gliet
// 平台:wince5.0 2440 5.0 BSP
// 最后修改:2009年3月31日 13:58:49
//-----------------------------------------------------------------------------------------------------------
在CSDN有不少人问过内存扩展的问题,这里来简单介绍方法。这里以128M SDRAM为例子。
一、bootloader
这个要在ADS环境下最合适,这样测试方便。根据数据手册修改一些启动时候的汇编文件,初始化内存控制器等东西即可。
二、bootloader成功后,修改oemaddrtab_cfg文件在DCD 0x00000000, 0x00000000, 0 ; end of table
加上DCD 0x94D00000, 0x34000000, 64 ; 64 MB SDRAM BANK 6 具体如何加,参照自己的平台手册。
三、修改C:\WINCE500\PLATFORM\COMMON\SRC\COMMON\OTHER\memory.c的OEMGetExtensionDRAM函数,或者在OAL里面加入OEMGetExtensionDRAM函数(推荐后者,因为不用编译非BSP部分,容易移植维护)修改如下:
//------------------------------------------------------------------------------
//防止微软的驱动的地址不对,增加的内存放在寄存器映射之后---64M
//------------------------------------------------------------------------------
BOOL
OEMGetExtensionDRAM(
LPDWORD lpMemStart,
LPDWORD lpMemLen
)
{
*lpMemStart = 0x94D00000;
*lpMemLen = 0x4000000;//64M
return TRUE;
//return FALSE;
}
现在来看看OEMGetExtensionDRAM函数是如何被调用的,在C:\WINCE500\PRIVATE\WINCEOS\COREOS\NK\KERNEL\loader.c找到:
//
// Ask OEM if extension RAM exists.
//
if (pNKEnumExtensionDRAM) {
cExtSections = (*pNKEnumExtensionDRAM)(MemSections, MAX_MEMORY_SECTIONS - 1);
DEBUGCHK(cExtSections < MAX_MEMORY_SECTIONS);
} else if (OEMGetExtensionDRAM(&MemSections[0].dwStart, &MemSections[0].dwLen)) {
cExtSections = 1;
} else {
cExtSections = 0;
}
看来要达到目的,pNKEnumExtensionDRAM和OEMGetExtensionDRAM都行,关于这两个函数的详细介绍,请参考帮助文档,在这里不再赘述。
在这里我要声明的是,没有修改bootloader之后的步骤,wince照样能启动,但是只有64M 的SDRAM。但是如果换回64M SDRAM的平台,上面的部分必须删除,否则系统启动到如下就停住了。
Windows CE Kernel for ARM (Thumb Enabled) Built on Feb 8 2007 at 23:36:51
ProcessorType=0920 Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 80212c04
最后我有个东西要注意,由于没有使用multibin,我如上加入内存以后,总和只有90多M,因为有30多M被NK占用了。
完毕!
相关文章推荐
- 如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
- 如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
- 如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
- 如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
- 请问如何解决WORD转HTML是出现的“内存或磁盘空间不足,无法显示或打印图片”这个问题?
- 如何解决SQL Server内存不断增加问题
- Puppet扩展篇2-如何使用虚拟资源解决puppet冲突问题
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- Android开发中如何解决加载大图片时内存溢出的问题
- 如何解决PHP使用mysql_query查询超大结果集超内存问题
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 导致内存溢出的原因有哪些?内存溢出问题又如何解决
- poi分页导出,只能解决十几万数据的导出,内存问题没解决,有方案的可以留言
- 如何登录OEM控制台,解决VTADB-1000 问题
- storm配置:如何解决worker进程内存过小的问题
- Android开发中如何解决加载大图片时内存溢出的问题
- 【转】关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 如何解决PHP+FPM导致内存耗光的问题
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能