您的位置 首页 制造

ARM空间分段(lst文件夹下map文件)

对于ARM,堆是向上生长的,栈是向下生长的。局部变量占用栈(stack)空间。程序中动态申请的如malloc()和new函数申请的内存空间占用堆(hea

关于ARM,堆是向上成长的,栈是向下成长的。

局部变量占用栈(stack)空间。

程序中动态请求的如malloc()和new函数请求的内存空间占用堆(heap)空间。

|ImageRO

Base|
表明RO输出段运行时开始地址,也可以说是程序代码寄存的开始地址,由-ro-base这个参数指定;
|ImageRO

Limit|
表明RO输出段运行时存储区域边界,其值可通过|ImageRO

Base|+Codesizes+RO Data sizes+4核算得出;
|ImageRW

Base|
表明RW输出段运行时开始地址,记住是运行时的地址,而纷歧定是加载时的寄存地址,由于RW输出段在加载时可能是在ROM中并紧跟着RO输出段寄存的,当程序运行时才移动(在有些书中说是移动,个人觉得应该仅仅仿制,期望大家能帮我解释一下,谢谢!)到RAM开始地址为|ImageRW

Base|的区域,由-rw-base这个参数指定;未指定的话,默许紧跟RO输出段,那么|ImageRW

Base|=|ImageRO

Limit|;
|ImageRW

Limit|
表明RW输出段运行时存储区域边界,其值可通过|ImageRW

Base|+RW Data sizes+4核算得出;
|ImageZI

Base|
表明ZI输出段运行时开始地址,它是运行时在RAM中生成的,紧跟着RW输出段寄存,其值和|ImageRW

Limit|相同;
|ImageZI

Limit|
表明ZI输出段运行时存储区域边界,其值可通过|ImageZI

Base|+ZI Data sizes+4核算得出。

CODE 是 RO-CODE近义词,也是.text近义词
CONST是RO-DATA近义词,也是.constdata近义词
DATA是RW-DATA近义词,也是.data近义词
ZI是.bss的近义词

Total RO Size (Code + RO Data) 12216 ( 11.93kB)
Total RW Size (RW Data + ZI Data) 292 ( 0.29kB)
Total ROM Size (Code + RO Data + RW Data) 12412 ( 12.12kB)

应用程序的仓库(stack)和堆(heap)是在C库函数初始化过程中建立起来的,在ADSl.2或更新版别中,在缺省状态下C库函数初始化代码会将连接器生成的符号ImageZI

Limit地址作为堆的基地址。在涣散加载时,连接器会将用户的__user_initidl_stackheap()函数替代C库函数默许的仓库和堆初始化函数,并将其连接到用户的镜像文件中,用户可通过从头完成__user_initial_stackheap()函数来改动仓库和堆的方位,然后合适自己的方针硬件。

__user_initial_stackheap()可以用C或汇编语言来完成。它有必要回来如下参数:

r0—堆基地址;

r1—仓库基地址;

r2—堆长度约束值(需要的话);

r3—仓库长度约束值(需要的话)。
当用户运用涣散加载功用的时分,有必要从头完成一user_initial_staacklaeap(),不然连接器会报错:
Error:L6218E:Undefined symbol ImagerZI

一Limit(referred from sys_stackheap.o)。
注:ImageZI

Limit变量为零初始化段(ZI段)的末地址。未运用涣散加载时,堆默许就定位在ZI段的末地址,而栈一般坐落RAM的顶端

(2)运用两个存储区
汇编语言如下:

这种方法界说的仓库和堆别离选用两个不同存储区。仓库选用向下增加,从地址Ox40000到地址Ox20000;堆选用向上增加,从地址0x28000000到地址0x28080000,如图4所示。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/276783.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部