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


    如何扩展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占用了。

         完毕!

         

  • 相关阅读:
    【转】VB 技巧一
    VB中的trim()函数
    转:vb实现老板键功能
    VB为自己的程序设定消息(可接收处理)
    RegisterHotKey的具体使用方法
    GetPrivateProfileString
    在VB语言中,DOEVENTS的具体的用法和含义
    VB中的ADO数据对象编程
    jquery操作select下拉列表框
    jQuery对Select的操作集合
  • 原文地址:https://www.cnblogs.com/gooogleman/p/1869699.html
Copyright © 2020-2023  润新知