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

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

 

http://hi.baidu.com/lft_8888/blog/item/8562e1dc37f08ad28c102973.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值