blue123
驱动中牛
驱动中牛
  • 注册日期2002-11-09
  • 最后登录2009-09-14
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1834回复:9

内存大于64M问题?

楼主#
更多 发布于:2004-08-27 09:22
用PB定制NK时,如何使内存大小不受32M、64M的限制,如果内存是128M或256M要怎么修改呢?还有如何使定制后的系统的存储内存和程序内存不是对半分,而是自己可以设定一个比例。
在线等待,谢谢!
努力!
leo_cyl
驱动牛犊
驱动牛犊
  • 注册日期2001-08-20
  • 最后登录2009-11-02
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-27 09:54
需要改config.bib。这个文件定义了系统内存的分配.
在这个贴子里,我做了一些解释,你可以参考。
http://www.driverdevelop.com/forum/html_76340.html?1093572085

[编辑 -  8/27/04 by  leo_cyl]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-27 13:25
在config.bib中memroy段指定内存的起始和长度,格式是:
   Name     Start     Size      Type
这样可以给出sdram的大小,对于ram file system,在config.h的config段用变量FSRAMPERCENT=0xXXXXXXXX指定,其中每一个字节的含义是:
A 4-byte hexadecimal number. Each byte represents the number of 4-KB blocks per MB allocated for the file system, as follows:
byte 0 = # of 4-KB blocks per MB in the first two MB

byte 1 = # of 4-KB blocks per MB in the second two MB

byte 2 = # of 4-KB blocks per MB in the third two MB

byte 3 = # of 4-KB blocks per MB in the remaining memory

然后还需要在编译环境中设置一个环境变量IMGTINYFSRAM=1
这是另外一位兄弟fanronaldo试出来的:)
根据地的兄弟们,团结就是力量
leo_cyl
驱动牛犊
驱动牛犊
  • 注册日期2001-08-20
  • 最后登录2009-11-02
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-31 16:39
楼主不厚道。
回答了你的问题,竟然不给分。
no.killer
驱动牛犊
驱动牛犊
  • 注册日期2003-11-08
  • 最后登录2014-08-13
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望105点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-01 14:46
hehe!你说的对吗?恐怕修改的不只这些吧!
打开%_WINCEROOT%\Public\Common\OAK\CSP\i486\OAL.
的 Oeminit.asm
修改

_OEMAddressTable:
  dd  80000000h,  0,  04000000h
; FLASH and other memory, if any
; dd  FlashVA,  FlashPA,  FlashSize
  dd  0,  0,  0
The default RAM size in the example is 04000000h, which is 64 MB.

• From the Build menu, choose Open Build Release Directory.
• Navigate to %_WINCEROOT%\Public\Common\OAK\CSP\i486\OAL.
• In the Build window, type build and press ENTER.
• Type sysgen i486oal and press ENTER
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-01 16:37
这个表不表示ram的大小,它只是指明第一级页表映射多少,你可以把第一级页表映射满,但并不是全部都可用。
根据地的兄弟们,团结就是力量
leo_cyl
驱动牛犊
驱动牛犊
  • 注册日期2001-08-20
  • 最后登录2009-11-02
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-01 17:41
TO no.killer
我们并不知道楼主的实际配置,所以只能给出解决问题的思路。
如果楼主不是使用x86体系的CPU,如何能修改Oeminit.asm ?
blue123
驱动中牛
驱动中牛
  • 注册日期2002-11-09
  • 最后登录2009-09-14
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-02 16:30
谢谢大家了,我先把分给了.
我已经修改好了,需要修改3个地方.pc.h文件,Oeminit.asm 文件和congfig.bib文件.
不过我现在又有另外一个问题,我用的是128M内存,系统起来后显示的有90M可用,我给存储空间分配了16M,剩下的都作为程序空间,我做图象处理时,当我的程序起来后,系统的整个程序空间被使用了27M(这27M不都是我的程序使用的),然后我在程序里用GlobalAlloc()再申请6M空间时,系统出错,返回内存不够,不知道为什么?
我理解的原因可能有两种:
1、虽然我把128M内存驱动起来了,而且也做了分配,但是不可用,还需要改其他的地方。
2、好象CE系统的每个进程都受32M的限制,所以进程都不能大于32M。

不知道我分析的对不对呢?又该怎么修改???
努力!
blue123
驱动中牛
驱动中牛
  • 注册日期2002-11-09
  • 最后登录2009-09-14
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-03 09:41
大家帮忙呀,上个问题的分已送。我可以另开一贴送分。
http://www.driverdevelop.com/index.php
不过,主要是希望大家能相互讨论讨论,共同解决问题。
努力!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-03 15:14
1.如果像你说的每个进程只需用32M的空间的话,那么有可能分配6M过大,超出了该进程寻址范围,比如本身该进程的代码和数据就使用了30M的地址空间。
2.系统可能分配不出那么大的连续空间,你试试分配多次小的空间呢
根据地的兄弟们,团结就是力量
游客

返回顶部