4874|16

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

非连续内存的配置问题,求救 [复制链接]

我现在遇到一个问题,2450需要128M内存,但不幸的是,两个内存地址是不连续的。
看wince的文档,config.bib中 memory一节有这样的描述:

RAM Specifies the range of virtual addresses available to the kernel for allocation to running processes and the RAM-based Windows CE-based file system. The region must be contiguous.
Do not reserve memory in the middle of a RAM section. Doing so creates two noncontiguous regions of memory, which is the maximum supported by Windows CE.

If you need to reserve memory in the middle of your RAM allocation, a portion of free RAM is reported in the Config.bib file and the rest is reported when the kernel calls OEMGetExtensionDRAM or pNKEnumExtensionDRAM.

RAM sections must be page aligned.


大致意思是说config.bib里面不支持不连续的内存,如果要支持不连续的内存,需要调用OEMGetExtensionDRAM()或者pNKEnumExtensionDRAM()。
我有两个问题,当调用pNKEnumExtensionDRAM()时候,它需要把config.bib里面的内存也一并报上去嘛?还是只上报扩展的那块内存,config里面已经指定的内存不需要上报了?
OEMGetExtensionDRAM()函数是这么描述的,当pNKEnumExtensionDRAM()被设置的话,则此函数不会被调用;但默认情况下,pNKEnumExtensionDRAM是没有被设置的,就是NULL,那么OEMGetExtensionDRAM()应该是被调用的,但在我们的BSP中却既没有OEMGetExtensionDRAM()函数,也没有pNKEnumExtensionDRAM设置,只在platform\common目录下有一个返回false的OEMGetExtensionDRAM()函数。如果我要增加一个不连续的内存,我该在我的BSP下添加一个OEMGetExtensionDRAM()函数还是要修改platform\common下的那个OEMGetExtensionDRAM()函数?
哪位有这样的例子啊?或者指点指点啊,谢谢了。

最新回复

我来接分的,哈哈哈  详情 回复 发表于 2008-12-17 00:04
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是我描述的问题不够清楚还是分数太少了?呵呵

我的问题是这样的,我要支持一个不连续的内存,从wince的文档上看,要么我使用OEMGetExtensionDRAM(),要么我用pNKEnumExtensionDRAM()函数,但两个函数我都有疑问:
1,如果用BOOL OEMGetExtensionDRAM(UINT32 *pMemoryStart, UINT32 *pMemoryLength)函数,我是该修改platform/common/src/common/other/memory.c的这个函数,还是该在自己的BSP下重新写一个这样的函数?
2,如果我使用DWORD (*pNKEnumExtensionDRAM)(PMEMORY_SECTION pMemSections,DWORD cMemSections),我不知道这个cMemSections的值在哪里定义,我如何告诉系统我有几块extension DRAM?第二个,这个pMemSections里要不要填config.bib里面已经定义过的内存?还只是填extension的DRAM的起始地址、长度就可以了。

哪位做过这个的,给支一个招啊。

谢谢了
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
,只在platform\common目录下有一个返回false的OEMGetExtensionDRAM()函数。如果我要增加一个不连续的内存,我该在我的BSP下添加一个OEMGetExtensionDRAM()函数还是要修改platform\common下的那个OEMGetExtensionDRAM()函数?
--------------------------------------------------
两个都可以,任选其一。
在这两个地方我都添加过。可行的。

不过我觉得最好在自己的BSP下面添加,因为这样可以保证PB的兼容性,PB下的代码最好不要改动。
2440的 4.2BSP就有这个函数,你可以拿来看看,然后增加到自己BSP对应的地方,5.0BSP就没有这个函数了。
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

4
 
关注下。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
pb 5.0下有lz说的两个函数,lz可以自己查看一下。
里边讲到了这两个函数的区别,什么时候被调用,两者的关系,参数代表什么,都可以查到。
完了,lz只要去做实验就知道了。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
建议追踪一下ARMInit,OEMInit,KernelFindMemory这些函数。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
是不是可以通过OEMAddressTable将物理地址不连续的sdram变成虚拟地址连续的来用?lz可以考虑一下。做实验看看。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 wohuazhen 的回复:
是不是可以通过OEMAddressTable将物理地址不连续的sdram变成虚拟地址连续的来用?lz可以考虑一下。做实验看看。

这个有创意,试完了公布一下结果
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 2 楼 gooogleman 的回复:
,只在platform\common目录下有一个返回false的OEMGetExtensionDRAM()函数。如果我要增加一个不连续的内存,我该在我的BSP下添加一个OEMGetExtensionDRAM()函数还是要修改platform\common下的那个OEMGetExtensionDRAM()函数?
--------------------------------------------------
两个都可以,任选其一。
在这两个地方我都添加过。可行的。

不过我觉得最好在自己的BSP下面添加,因为这样可以保证PB的兼容性,PB下的代…


试验了,的确如你所说,谢谢了。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 hzdysymbol 的回复:
引用 6 楼 wohuazhen 的回复:
是不是可以通过OEMAddressTable将物理地址不连续的sdram变成虚拟地址连续的来用?lz可以考虑一下。做实验看看。

这个有创意,试完了公布一下结果


俺就是这么做的,成功了。
如果使用连续的方法会导致有些没有源码的驱动不能用了,改动量很大,还是不连续的方法好。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
谢谢,知道结果了,下次有机会可以用用
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 6 楼 wohuazhen 的回复:
是不是可以通过OEMAddressTable将物理地址不连续的sdram变成虚拟地址连续的来用?lz可以考虑一下。做实验看看。


这个想法很有创意,但试验的结果是不成功。

googleman的方法是正确的,现在已经成功了。真是他妈的简单啊,哈哈哈哈。。。。。就是不知道“MS在有这个函数的情况下调用这个函数,没有这个函数的情况下它也不会报错”是怎么实现的。。。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
大家踊跃跟贴哦,等会我来散分,回帖者就有分。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 
学习一下
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

15
 
不懂,up
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

16
 
又散分了,接
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

17
 
我来接分的,哈哈哈
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表