资源描述:
《arm 系统中常用的段分类说明》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Arm系统中常用的段分类说明一.基本概念:.text段是代码段。它用来放程序代码(code)。它通常是只读的。.data段是数据段。它用来存放初始化了的(initailized)全局变量(global)和初始化了的静态变量(static)。它是可读可写的。.bss段是全局变量数据段。它用来存放未初始化的(uninitailized)全局变量(global)和未初始化的静态变量(static)。它也是可读可写的。bss是英文BlockStartedbySymbol的缩写。之所以把bss跟data分开来,是因为系统会为这些b
2、ss段的变量的初值清零。.rodata段是常量数据段。它用来存放常量(const)。它也是只读的。可以归类代码段1、栈(存放着局部变量和函数参数等数据),向下生长(可读可写可执行)2、堆(给动态分配内存是使用),向上生长(可读可写可执行)3、数据段(保存全局数据和静态数据)(可读可写不可执行)4、代码段(保存代码)(可读可执行不可写)注:向上增长:向高地址增长向下增长:向低地址增长代码段和数据段之间有明确的分隔,但是数据段和堆栈段之间没有,而且栈是向下增长,堆是向上增长的,因此理论上来说堆和栈会“增长到一起”,但是操作系
3、统会防止这样的错误发生二.进一步阐释,在ARM的集成开发环境中:1、只读的代码段称为Code段,即上述的.text段。2、只读的常量数据段,被称作ROData段,即上述的.constdata段。以上两个段统称为RO段(ReadOnly),放在ROM或FLASH等非易失性器件中。3、可读可写的初始化了的全局变量和静态变量段,被称作RWData段(ReadWrite),即上述的.data段。4、可读可写的未初始化的全局变量和静态变量段,被称作ZIData段(ZeroInit),即上述的.bss段。因为这个段里的变量要被初始化
4、为零,所以叫ZI段。以上两个段统称为RW段,在运行时,它必须重新装载到可读可写的内部RAM中。方法:可执行文件通过一定的方式内存映射在ADS下,可执行文件,种类:有两种:一种是.axf文件,带有调试信息,可供AXD调试工具使用.另一种是.bin文件,可执行的二进制代码文件。bin文件的组成。我们把可执行文件分为两种情况:分别为存放态和运行态。1.存放态是指可执行文件通过fromelf产生后,在存储介质(flash或磁盘)上的分布.此时可执行文件一般由两部分组成:分别是代码段和数据段。代码段又分为可执行代码段(.text)
5、和只读数据段(.rodata),数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。可执行文件的存放态,装载前ROM分布如下:
6、...
7、+-------------+-----------
8、.bss
9、ZI段+-------------+-----------+-------------+--数据段
10、.data
11、RW段+-------------+-----------+-------------+-----------
12、.rodata
13、
14、+-------------+-----------________
15、_____
16、代码段(RO段)
17、.text
18、+-------------+-----------
19、...
20、2.运行态可执行文件通过装载过程,搬入到RAM中运行,这时候可执行文件就变成运行态。在ADS下对可执行代码各段有另一个名称:当可执行文件装载后,在RAM中的分布如下:
21、...
22、+-------------+--ZI段结束地址
23、ZI段
24、+-------------+--ZI段起始地址
25、保留区2
26、+-------------+--RW段结束地址
27、RW段
28、+-------------+--RW段起始地址
29、保留区1
30、+----
31、---------+--RO段结束地址
32、RO段
33、+-------------+--RO段起始地址
34、...
35、装载后所以装载过程必须完成把执行文件的各个段从存储介质上搬到RAM指定的位置。而这个装载过程由谁来完成呢?由启动程序来完成.3.如何装载?装载过程在ADS中,可以通过两种方式来指定可执行代码各段在RAM中的位置一种是用armlink来指定,一种是用scatter文件来指定.RAM区的起始地址:0x30000000.1.armlink指定代码段地址。我们通常的代码,只用指定两个段开始地址,RO段的起始地址和RW段的起始
36、地址,ZI段紧接在RW段之后.2.scatter指定代码段地址。通过scatter文件指定可执行文件各段的详细地址.Scatter文件,例如:MYLOADER0x30000000;//MYLOADER:为可执行文件的名称,可自定义;0x3000000:起始地址{RO0x30000000;//RO只读代码段的名称;0x