如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)

如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)

//-----------------------------------------------------------------------------------------------------------

// 日期:2009年3月19日     13:41:38

// 作者:wogoyixikexie@gliet

// 版权:桂林电子科技大学一系科协wogoyixikexie@gliet

// 平台:wince5.0 2440 5.0 BSP

// 最后修改:2009年3月19日 17:09:15

//-----------------------------------------------------------------------------------------------------------

     在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。

     最后我有个东西要注意,由于没有使用multibin,我如上加入内存以后,总和只有90多M,因为有30多M被NK占用了。

     完毕!

     

 

转载请标明:作者wogoyixikexie@gliet.桂林电子科技大学一系科协,原文地址:http://www.cnblogs.com/wogoyixikexie/(或者我在CSDN的博客:http://blog.csdn.net/gooogleman——如有错误,希望能够留言指出;如果你有更加好的方法,也请在博客后面留言,我会感激你的批评和分享。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值