一种确定软件的内存占用的方法和系统的制作方法

文档序号:6564210阅读:169来源:国知局
专利名称:一种确定软件的内存占用的方法和系统的制作方法
技术领域
本发明涉及嵌入式系统技术领域,特别是涉及一种确定嵌入式系统中的软 件的内存占用的方法和系统。
背景技术
在工程上的单板(如通信单板等)中,经常在单板上使用简化的操作系统, 即嵌入式系统,完成单板上单一的功能。
嵌入式系统中的软件包括引导(BOOT)软件和应用(APP)软件。 一般 地,引导软件保存在只读存储器中,应用软件保存在Flash闪存等存储器中。 在嵌入式系统上电后,首先运行引导软件,由引导软件完成CPU等硬件的初 始化,再把应用软件从Flash闪存读出,复制到内存中,应用软件在内存中保 存一份映像,然后CPU从引导软件跳转到应用软件在内存中的映像起始地址, 从而引导内存中的应用软件映像运行。
现有技术中引导软件是将应用软件复制到内存中的一个固定地址。应用软 件在内存中映像占用内存的地址空间为从该固定地址到内存最高地址,内存基 地址到该固定地址的空间为应用软件的可用内存。
在物理内存大小一定的条件下,由于应用软件在内存中映像的地址固定, 所以可用内存大小也固定。
随着应用软件功能的增加,应用软件所需的内存越来越多,在硬件不变的 情^L下,由于可用内存大小固定,应用软件内存将不足,从而导致应用软件无 法运行。或者,虽然应用软件所需的内存足够,但是应用软件的大小超过了上 述固定地址到内存最高地址空间的大小,即预留给应用软件自身的映像的内存 不够,则工程上单板的嵌入式系统引导软件将无法引导此应用软件,这样不得 不更换引导软件,或者应用软件,甚至单板,造成成本增加,人力物力浪费。

发明内容
本发明所要解决的问题是提供一种确定软件的内存占用的方法和系统,其节约了成本,不会造成人力物力浪费。
为实现本发明目的而提供的一种确定软件的内存占用的方法,包括下列步骤.-
步骤A,通过编译后应用软件中代码大小,配置应用软件尺寸和应用软件在内存中的布局;
步骤B,依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的有效代码运行。
所述步骤A中配置应用软件尺寸,具体包括下列步骤
修改应用软件的生成配置文件,裁减编译应用软件填充到应用软件映像中的无效二进制代码。
所述应用软件尺寸为编译后的应用软件代码大小除1024取整后,乘以1024。
所述步骤A中配置应用软件在内存中的布局为确定映像文件映射到内存的偏移段起始地址和代码段起始地址。
所述确定映像文件映射到内存的偏移段起始地址为是依据配置应用软件尺寸来确定;应用软件代码段起始地址为映像起始地址为内存最高地址,去掉 应用软件大小。
所述步骤B中引导软件依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址,具体包括下列步骤
步骤Bl,根据内存最高地址和保存在存储器中的应用软件的尺寸确定应用软件在内存中映像的目标起始地址;
步骤B2,按所配置的应用软件在内存中的布局,引导应用软件的有效代码运行。
为实现本发明目的还提供一种确定软件的内存占用的系统,包括占用内存 确定单元,内存映像单元,其中
所述占用内存确定单元,用于通过编译后应用软件中代码大小,配置应用软件尺寸和应用软件在内存中的布局;
内存映像单元,用于依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的有效代码 运行。
所述的配置应用软件尺寸为修改应用软件的生成配置文件,裁减编译应用 软^^填充到应用软件映像中的无效二进制代码;所述配置应用软件在内存中的 布局为确定映像文件映射到内存的偏移段起始地址和代码段起始地址。
所述软件为单板的嵌入式系统中的应用软件。
所述依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址为 根据内存最高地址和保存在存储器中的应用软件的尺寸,由内存最高地址,去 掉应用软件尺寸而得到。
本发明的有益效果是本发明的一种确定软件的内存占用的方法和系统, 通过依据应用软件的实际大小,动态计算出应用软件在内存中映像的目标起始 地址,能充分减少应用软件不必要的内存空间浪费,从而增加应用软件的可用 内存;同时,引导软件可以自动适应不同大小的应用软件从而引导不同大小应 用软件运行,在不改变硬件架构和不增加硬件成本的条件下,解决了应用软件 可用内存不足的问题和需要在工程上更换引导软件甚至单板的问题,节约了成 本,不会造成人力物力浪费。


图1是本发明的确定软件的内存占用的方法流程图2是本发明实施例中应用软件文件确定软件的内存占用的示意图3是本发明实施例中应用软件文件内存占用示意图4是本发明确定软件的内存占用的系统示意图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本发明的一种确定软件的内存占用的方法和系统进行进一步详细说 明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定 本发明。
如图1所示,下面进一步详细描述本发明的一种确定软件的内存占用的方法
技术领域
本发明实施例的一种确定软件内存占用的方法,以AM186CC CPU的嵌 入式系统40为例而进行的说明,该嵌入式系统40的内存为0x80000字节(十六进制),编译、连接软件工具采用BC4.5和Paradigm。本领域普通技术人 员可以理解,该方法也可以适用于其他的单板的嵌入式系统40中。
步骤S1OO,通过编译后应用软件中代码大小,配置应用软件尺寸和应用软件在内存中的布局;
确定应用软件尺寸为修改应用软件的生成配置文件,裁减编译应用软件填充到应用软件映像中的无效二进制代码。
以十六进制方式打开应用软件文件,可以发现二进制文件的最后部分都是OxFF。这些OxFF即为填充代码,填充代码之前的代码为有效代码。当填充代码最少时应用软件文件尺寸即为最小。应用软件文件最小时,文件尺寸就是最 佳文件大小。
较佳地,应用软件文件最佳尺寸的确定方法符合式(1),即应用软件文件尺寸为编译后的应用软件代码大小除1024取整后,乘以1024。
其中,代码大小为应用软件编译后实际占用空间大小。
APP软件文件尺寸==(APP软件编译后代码大小/1024 ) *1024 ........................................................................式(1)
其中(APP软件编译后代码大小/1024)的值取整。
确定应用软件在内存中的布局为确定映像文件映射到内存的偏移段起始地址和代码段起始地址。
确定映像文件映射到内存的偏移段起始地址是依据确定应用软件尺寸来确定;
应用软件代码段起始地址的方法依据式(2),即映像起始地址为内存最高地址,去掉应用软件尺寸。
映像起始地址-内存最高地址-APP软件尺寸...............式(2)
步骤S200,由引导软件依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的有效代码运行。
引导软件根据保存在Flash闪存中的应用软件尺寸确定应用软件在内存中映像的目标起始地址。
确定目标起始地址的方法与确定应用软件映像文件映射到内存的绝对起
始:池址的方法相同,即利用式(2)确定,引导软件首先得到应用软件的尺寸, 将内存最高地址减去应用软件的大小得到应用软件在内存中映像的目标起始 地址,然后,按所配置的应用软件在内存中的布局,引导应用软件的有效代码 运行。
下面举一例子说明本发明的确定软件的内存占用的方法。
首先,通过编译后应用软件中代码大小,确定应用软件尺寸和应用软件在 内存中的布局。
本例中的应用软件映像通过rm文件的配置文件来决定。rm是连接生成软 件的一个配置文件, 一般地,单板依据此rm文件可以确定代码引用的内存绝 对地址。
在rm文件中,offset和code表示在内存中的偏移段起始地址和代码段起 始地址;offset与code表示值的含义是一致的,关系为offset的值为code的值 左移8位,所以offse,0x40000时,code=0x4000。
size为编译得到应用软件文件的尺寸,单位为K字节,即如果size等于 200,则表示编译生成的代码大小为200KByte。
配置应用软件的尺寸和应用软件在内存中的布局,即配置应用软件的尺寸 和偏移段起始地址和代码段起始地址,其中,由于偏移段起始地址和代码段起 始地址一致,因此,只要确定偏移段起始地址就可以确定代码段起始地址。这 样,配置应用软件的尺寸和应用软件在内存中的布局,只要配置应用软件的尺 寸和偏移段的起始地址即可。
例如,如图2所示,在应用软件的映像文件中,其起始地址的值与偏移段 起始地址offset的值相同,映像起始地址 最高内存地址部分为映像文件本身, 即应用软件本身在内存中的拷贝。而"map 0x40000 to 0x7ffff as rdonly"表示应 用软件文件占用的只读内存空间为0x4000(M)x7ffff; "map 0x00400 to 0x3ffff as rdwr"表示应用软件文件的读写内存空间为0x00400 0x3ffff。
为避免栈越界, 一般地,在应用软件文件自身在内存的映像之后还预留了 1024字节的内存空间。
因而,依据式(2),本例中偏移段起始地址、文件大小和内存最高地址 之间的关系应当符合式(3):
0x80000 = Offset + size* 1024 + 1024 ....................................式(3 )
0x80000表示应用软件文件的最高内存地址。即内存最高地址为偏移段起 始地址加上应用软件文件的尺寸乘以1024,再加上预留的1024个字节。
因而,要确定配置文件rm的参数,首先要确定应用软件的尺寸Size,即 Size为代码大小/1024后取整,再乘以1024。其中,代码大小为应用软件编译 后实际占用空间大小。
而后, 一般地,依据物理内存的大小可知最高内存地址大小。依据最高内 存地址和应用软件尺寸Size,就可以得到偏移段起始地址offset。
如图3所示,为生成的应用软件二进制代码文件示意图。对文件编译后, 生成二进制文件,通过分析此图,可以发现有效代码部分和填充的无效代码部 分。
分析该二进制文件,从文件的结尾0x3FBFF往前査找,可知文件的 0x353d0其后的0xFF都是填充的代码,有效代码为OxOOOOO Ox353dO。
由于应用(APP)映像文件只需保留有效代码,因此,可以得到应用软件 文件的尺寸size=0x3 53d0/l 024=212.953125。
依据式(1),对尺寸size上取整,则尺寸size二213。
根据式(3), 可以确定0ffset=0x80000-size* 1024-1024=0x80000 —213*1024-1024=305152=0x4A800 。
根据上述参数数据,修改得到LOCATE的配置文件rm,指定
offset=0x4a800, size=213,
map0x00400 to 0x4a7ff as rdwr ,
map0x4a800 to 0x7ffff as rdonly ,
class CODE=0x4a80。
其中,LOCATE是一个工具软件,用于连接时依据相对地址确定绝对地址。
当配置文件rm编译连接后,多余的无效代码不会添加到生成的软件中, 而由于配置文件rm中尺寸size的单位为K字节,可能会有小于IK的无效代 码±真充到生成的应用软件文件中,即sizen024^有效代码大小。
然后,弓l导(BOOT)软件从内存(flash闪存)中读取应用软件文件的映 像文件到内存,由引导软件依据应用软件的尺寸size确定应用软件在内存中映像的目标起始地址,即应用软件开始运行地址,按所配置的应用软件在内存中 的布局,引导应用软件的有效代码运行。
引导软件(BOOT )和应用软件是同 一单板不同时间阶段运行的两个软件。 单板启动时首先运行BOOT软件,然后BOOT软件将应用软件加载到内存, 最后BOOT软件跳转到应用软件(跳转后,BOOT软件不再运行,编译后应 用软件的大小由rm配置文件中的尺寸size决定)。
BOOT软件中确定应用软件的起始地址是依据式(2),由BOOT在运行 时依据应用软件的尺寸Size自动确定的。
pAppImageAddr=0ffset=0x80000 —218112-1024=(void (*)(void))0x4A800,
因为应用软件的升级更新,应用软件的尺寸Size会变化,所以每次单板 启动后,BOOT软件确定的应用软件起始地址会变化。即
然后引导软件引导跳转到应用软件文件,按所配置的应用软件在内存中的 布局,引导应用软件的有效代码运行。其引导代码如下
(*pAppImageAddr)();
本发明实施例所述的确定软件的内存占用的方法,依据应用软件的实际大 小,动态计算出应用软件的有效尺寸和软件的布局,然后计算出在内存中映像 的目标起始地址并准确引导,所以能充分减少应用软件不必要的内存空间浪 费,从而增加应用软件的可用内存;同时,引导软件可以自动适应不同大小的 应用软件从而引导不同大小应用软件运行。
如图4所示,本发明的确定软件的内存占用的系统,包括占用内存确定单 元41,内存映像单元42。其中
所述占用内存确定单元41,用于通过编译后应用软件中代码大小,配置 应用软件尺寸和应用软件在内存中的布局;
配置应用软件尺寸为修改应用软件的生成配置文件,裁减编译应用软件 填充到应用软件映像中的无效二进制代码。
配置应用软件在内存中的布局为确定映像文件映射到内存的偏移段起始 地址和代码段起始地址。这两个起始地址完全一致。
确定映像文件映射到内存的偏移起始地址是依据配置应用软件尺寸来确 定,确定起始地址的方法依据式(2),即映像起始地址为内存最高地址,去 掉应用软件尺寸。
所述内存映像单元42,用于依据应用软件的尺寸确定应用软件在内存中
映像的目标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的 有效代码运行。
引导软件根据保存在Flash闪存中的应用软件尺寸确定应用软件在内存中 映像的目标起始地址。
确定目标起始地址的方法与确定应用软件映像文件映射到内存的绝对起 始地址的方法相同,即利用式(2)确定,引导软件首先得到应用软件的尺寸, 根据内存最高地址和应用软件的尺寸得到应用软件在内存中映像的目标起始 地址。
然后按所配置的应用软件在内存中的布局,引导应用软件的有效代码运行。
以上通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征 对本领域的技术人员而言是显而易见的。
本发明的确定软件的内存占用的方法和系统,在不改变硬件架构和不增加 硬寸牛成本的条件下,减少应用软件映像占用的内存空间,增加应用软件的可用 内存空间,解决了应用软件可用内存不足的问题。并且,引导软件通过自动适 应应用软件,可以兼容不同大小的应用软件,避免在工程上更换引导软件甚至 更换单板的问题。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只 是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行 解释。
权利要求
1、一种确定软件的内存占用的方法,其特征在于,包括下列步骤步骤A,通过编译后应用软件中代码大小,配置应用软件尺寸和应用软件在内存中的布局;步骤B,依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的有效代码运行。
2、 根据权利要求l所述的确定软件的内存占用的方法,其特征在于,所 述步骤A中配置应用软件尺寸,具体包括下列步骤修改应用软件的生成配置文件,裁减编译应用软件填充到应用软件映像中 的无效二进制代码。
3、 根据权利要求2所述的确定软件的内存占用的方法,其特征在于,所 述应用软件尺寸为编译后的应用软件代码大小除1024取整后,乘以1024。
4、 根据权利要求2所述的确定软件的内存占用的方法,其特征在于,所 述步骤A中配置应用软件在内存中的布局为确定映像文件映射到内存的偏移 段起始地址和代码段起始地址。
5、 根据权利要求4所述的确定软件的内存占用的方法,其特征在于,所 述确定映像文件映射到内存的偏移段起始地址为是依据配置应用软件尺寸来 确定;应用软件代码段起始地址为映像起始地址为内存最高地址,去掉应用软 件大小。
6、 根据权利要求l至5任一项所述的确定软件的内存占用的方法,其特 征在于,所述步骤B中引导软件依据应用软件的尺寸确定应用软件在内存中 映像的目标起始地址,具体包括下列步骤-步骤Bl,根据内存最高地址和保存在存储器中的应用软件的尺寸确定应 用软件在内存中映像的目标起始地址;歩骤B2,按所配置的应用软件在内存中的布局,引导应用软件的有效代 码运行。
7、 一种确定软件的内存占用的系统,其特征在于,包括占用内存确定单元,内存映像单元,其中所述占用内存确定单元,用于通过编译后应用软件中代码大小,配置应用 软^f牛尺寸和应用软件在内存中的布局;内存映像单元,用于依据应用软件的尺寸确定应用软件在内存中映像的目 标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的有效代码 运行。
8、 根据权利要求7所述的确定软件的内存占用的系统,其特征在于,所 述的配置应用软件尺寸为修改应用软件的生成配置文件,裁减编译应用软件填 充到应用软件映像中的无效二进制代码;所述配置应用软件在内存中的布局为 确定映像文件映射到内存的偏移段起始地址和代码段起始地址。
9、 根据权利要求7或8所述的确定软件的内存占用的系统,其特征在于,所述软件为单板的嵌入式系统中的应用软件。
10、 根据权利要求7或8所述的确定软件的内存占用的系统,其特征在于,所述依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址为根据 内存最高地址和保存在存储器中的应用软件的尺寸,由内存最高地址,去掉应 用软件尺寸而得到。
全文摘要
本发明公开了一种确定软件的内存占用的方法和系统。该方法包括下列步骤步骤A,通过编译后应用软件中代码大小,配置应用软件尺寸和应用软件在内存中的布局;步骤B,依据应用软件的尺寸确定应用软件在内存中映像的目标起始地址,按所配置的应用软件在内存中的布局,引导应用软件的有效代码运行。其减少应用软件映像占用的内存空间,增加应用软件的可用内存空间,可以兼容不同大小的应用软件,避免在工程上更换引导软件甚至更换单板的问题,节约了成本,不会造成人力物力浪费。
文档编号G06F12/02GK101201794SQ20061016530
公开日2008年6月18日 申请日期2006年12月15日 优先权日2006年12月15日
发明者钟桂贤 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1