OEMGetExtensionDRAM and OEMEnumExtensionDRAM

----  EP9315关于使用32M以上RAM的系统设置  (http://www.devicegate.com/bbs/dispbbs.asp?boardid=2&id=664)

--  作者:rickw
--  发布时间:2006-12-22 21:02:56

--  EP9315关于使用32M以上RAM的系统设置

20:13 2006-12-22
EP9315关于使用32M以上RAM的系统设置


EP9315 SBC板子上有32M Nor Flash和64M的RAM。但是默认情况下即使NK设计得只有16M,系统启动后仍然只能使用到32M的RAM作为运行时内存。要使用所有可用的RAM,必须做些设置调整。
WINCE在平台的config.bib中定义了内存映射的设置。为了方便说明,我把对ep9307_1x的默认设置调整列出如下(此处举例!IMGFLASH && !BSP_EP93XX_COPY_FLASH_TO_RAM ):
IF IMGFLASH !
IF BSP_EP93XX_COPY_FLASH_TO_RAM !
;**********************************************************************
;
; Boot from RAM
;
;**********************************************************************
MEMORY
    RESERVED     80000000        00008000        RESERVED
    DRV_GLB      80008000        00001000        RESERVED
    CS8950       80010000        00030000        RESERVED
    EDBG         80040000        00080000        RESERVED
    FRAMEBUF     800C0000        00200000        RESERVED
;Rick: for debug
;注释A
;    NK           802C0000        01D40000        RAMIMAGE
;    RAM          82000000        02000000        RAM
    NK           802C0000        01D00000        RAMIMAGE
    RAM          81FC0000        00040000        RAM
;Rick: end


CONFIG
    COMPRESSION=ON
    PROFILE=OFF
    ROMSTART=802C0000
;Rick: for debug
;注释B
;    ROMSIZE=01D40000
    ROMSIZE=01D00000
;Rick: end
    ROMWIDTH=32


    ; NKStart    + ROMOFFSET  = Physical Memory Location.
    ; 0x802C0000 + 0x80000000 = 0x002C0000
    ROMOFFSET=0x80000000
    ROMFLAGS=0
    KERNELFIXUPS=ON
;Rick: for debug
;注释C
;    AUTOSIZE=OFF
AUTOSIZE=ON
;Rick: end
ENDIF
ENDIF


注释A:默认设置令NK的大小为Ox01D40000字节,从0x802C0000处开始,这样系统第一片32M RAM就刚好被用完,然后就将RAM映射到第二片32M RAM中。此处我将NK的内存尺寸缩小了256K字节。
注释B:默认的ROMSIZE与NK的长度是一致的。调整了NK的尺寸后,此处必须保持一致。
注释C:默认关闭了AUTOSIZE设置。我打开了AUTOSIZE


由于NK很少做到Ox01D40000(约29.25M)字节这么大,特别是在不使用中文字库的情况下,可能甚至可以做到16M以下,如果使用XIP,则占用的RAM将更小,所以第一片32M RAM应该有很大的可用空间,按照默认设置运行非常浪费。WINCE的AUTOSIZE设置项在此就可以发挥作用了。AUTOSIZE设置为ON的话,系统将自动把NK之后空余出来的RAM合并到后面的RAM段中,使得空闲内存可以被应用程序使用。但是,当我直接设置AUTOSIZE为ON的时候,系统无法启动,在分配完内存,开始进行KernelInit后就当了。
经过研究,发现原来RAM段的设置有一个要求:bib文件中设定的整个RAM段的范围,必须位于一个物理内存芯片的连续空间内。如果RAM范围跨越物理芯片范围,则只能在bib文件中设置其中一块RAM,剩下的其他芯片上的RAM必须留待系统启动时调用的两个函数中去向系统声明。这两个函数分别是:OEMEnumExtensionDRAM 和 OEMGetExtensionDRAM,其中OEMEnumExtensionDRAM对于BSP开发商来说是可选实现,而OEMGetExtensionDRAM是必须实现。如果开发商没有实现OEMEnumExtensionDRAM ,则系统将调用OEMGetExtensionDRAM,否则将忽略OEMGetExtensionDRAM。EDB9307_1X的BSP没有实现OEMEnumExtensionDRAM,只实现了OEMGetExtensionDRAM,而且其中仅仅对EDB9307A做处理,以作为一个范例,针对具体的板子,实际上是留给最后开发商去自行设置的。函数体的设置如下:
BOOL OEMGetExtensionDRAM(LPDWORD lpMemStart, LPDWORD lpMemLen)
{
BOOL bRet=FALSE;
lpWriteDebugStringFunc(TEXT("OEMGetExtensionDRAM//r//n"));
//Only implemented for EDB9307A as a sample, please double check config.bib before changing
//this function.
#ifdef EDB9307A
#ifdef IMGFLASH
    *lpMemStart = (SDRAM_VIRTUAL_MEMORY + 0x2000000);
    *lpMemLen   = 0x2000000;
    bRet=TRUE;
#else
    *lpMemStart = (SDRAM_VIRTUAL_MEMORY + 0x1200000);
    *lpMemLen   = 0xE00000;
    bRet=TRUE;
#endif
#else
//rick: for debug
#ifndef IMGFLASH
    *lpMemStart = (SDRAM_VIRTUAL_MEMORY + 0x2000000);
    *lpMemLen   = 0x2000000;
    bRet=TRUE;
lpWriteDebugStringFunc(TEXT("OEMGetExtensionDRAM Extend DRAM To 64M.//r//n"));
#endif
//rick: end
#endif
return bRet;
}
为了方便说明,我只对#ifndef IMGFLASH的情况列出。此处直接复制了原来BSP的代码,只是针对!IMGFLASH进行设置。
现在把前后所有设置串起来,说明我的思路:
1、要使用NK剩余的空闲内存,必须将config.bib中config段的AUTOSIZE设置为ON
2、由于EP9315有两片32M SDRAM,而默认config.bib设置已经将第一片32M SDRAM全部分配给系统驱动和NK,而RAM段占据另一片SDRAM全部32M空间,这样当其用AUTOSIZE后,系统将自动把NK剩余的空间与RAM段合并,从而导致了RAM段跨越两片SDRAM,所以系统会当机。为了避免这个问题,我将NK缩小256K,把这256K留给RAM段,而原先的32M RAM段则放弃,留到OEMGetExtensionDRAM函数中向系统进行声明。
3、修改OEMGetExtensionDRAM函数,使得剩下的32M SDRAM作为一个扩展RAM段全部提交给系统。
完成上述修改后,系统正常启动,并且拥有了超过32M的可用内存空间,正好是NK之后剩下的所有内存空间。
对于以下包含多片扩展内存芯片的系统,同样需要根据上面思路进行调整,而且需要注意的是,OEMGetExtensionDRAM只能声明一片扩展内存,如果有多片扩展内存,则必须实现OEMEnumExtensionDRAM函数,并且将它挂接到pNKEnumExtensionDRAM指针,以便系统调用,系统将忽略OEMGetExtensionDRAM。
具体可参考CE的手册:
ms-help://MS.WindowsCE.500/wcehardware5/html/wce50lrfOEMGetExtensionDRAM.htm
ms-help://MS.WindowsCE.500/wcehardware5/html/wce50lrfoeminit.htm
ms-help://MS.WindowsCE.500/wcehardware5/html/wce50lrfoemenumextensiondram.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值