Arm 系统中常用的段分类说明.doc

上传人:桔**** 文档编号:559722416 上传时间:2023-05-06 格式:DOC 页数:4 大小:61.51KB
返回 下载 相关 举报
Arm 系统中常用的段分类说明.doc_第1页
第1页 / 共4页
Arm 系统中常用的段分类说明.doc_第2页
第2页 / 共4页
Arm 系统中常用的段分类说明.doc_第3页
第3页 / 共4页
Arm 系统中常用的段分类说明.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《Arm 系统中常用的段分类说明.doc》由会员分享,可在线阅读,更多相关《Arm 系统中常用的段分类说明.doc(4页珍藏版)》请在金锄头文库上搜索。

1、Arm 系统中常用的段分类说明一基本概念: .text段是代码段。它用来放程序代码(code)。它通常是只读的。 .data段是数据段。它用来存放初始化了的(initailized)全局变量(global)和初始化了的静态变量 (static)。它是可读可写的。 .bss段是全局变量数据段。它用来存放未初始化的(uninitailized)全局变量(global)和未初始化的静 态变量(static)。它也是可读可写的。bss是英文Block Started by Symbol的缩写。之所以把bss跟data 分开来,是因为系统会为这些bss段的变量的初值清零。 .rodata段是常量数据段。

2、它用来存放常量(const)。它也是只读的。 可以归类代码段1、栈(存放着局部变量和函数参数等数据),向下生长 (可读可写可执行)2、堆(给动态分配内存是使用),向上生长 (可读可写可执行)3、数据段(保存全局数据和静态数据) (可读可写不可执行)4、代码段(保存代码) (可读可执行不可写)注:向上增长:向高地址增长向下增长:向低地址增长代码段和数据段之间有明确的分隔,但是数据段和堆栈段之间没有,而且栈是向下增长,堆是向上增长的,因此理论上来说堆和栈会“增长到一起”,但是操作系统会防止这样的错误发生二进一步阐释,在ARM的集成开发环境中: 1、只读的代码段称为Code段,即上述的.text段。

3、 2、只读的常量数据段,被称作RO Data段,即上述的.constdata段。 以上两个段统称为RO段(Read Only),放在ROM或FLASH等非易失性器件中。 3、可读可写的初始化了的全局变量和静态变量段,被称作RW Data段(ReadWrite),即上述的.data段 。 4、可读可写的未初始化的全局变量和静态变量段,被称作ZI Data段(Zero Init),即上述的.bss段。 因为这个段里的变量要被初始化为零,所以叫ZI段。 以上两个段统称为RW段,在运行时,它必须重新装载到可读可写的内部RAM中。 方法:可执行文件通过一定的方式内存映射在ADS下,可执行文件,种类:有两

4、种:一种是.axf文件,带有调试信息,可供AXD调试工具使用.另一种是.bin 文件,可执行的二进制代码文件。bin文件的组成。我们把可执行文件分为两种情况:分别为存放态和运行态。 1. 存放态是指可执行文件通过fromelf产生后,在存储介质(flash或磁盘)上的分布. 此时可执行文件一般由两部分组成:分别是代码段和数据段。代码段又分为可执行代码段(.text)和只读数据段(.rodata), 数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。可执行文件的存放态,装载前 ROM分布如下: | . | +-+- | .bss | ZI 段+-+- +-+- 数据段 | .d

5、ata | RW 段 +-+-+-+- | .rodata | |+-+-_| 代码段(RO 段) | .text |+-+-| . | 2. 运行态可执行文件通过装载过程, 搬入到RAM中运行, 这时候可执行文件就变成运行态。在ADS下对可执行代码各段有另一个名称: 当可执行文件装载后, 在RAM中的分布如下: | . | +-+- ZI段结束地址 | ZI 段 | +-+- ZI段起始地址 | 保留区2 | +-+- RW段结束地址 | RW 段 | +-+- RW段起始地址 | 保留区1 | +-+- RO段结束地址 | RO 段 | +-+- RO段起始地址 | . | 装载后所以装载

6、过程必须完成把执行文件的各个段从存储介质上搬到RAM指定的位置。而这个装载过程由谁 来完成呢?由启动程序来完成. 3.如何装载?装载过程在ADS中,可以通过两种方式来指定可执行代码各段在RAM中的位置一种是用armlink来指定,一种是用scatter文件来指定.RAM区的起始地址:0x30000000. 1. armlink指定代码段地址。我们通常的代码,只用指定两个段开始地址, RO段的起始地址和RW段的起始地址, ZI段紧接在RW段之后. 2. scatter指定代码段地址。通过scatter文件指定可执行文件各段的详细地址. Scatter文件,例如: MYLOADER 0x30000

7、000 ;/MYLOADER: 为可执行文件的名称, 可自定义 ;0x3000000: 起始地址 RO 0x30000000 ; /RO 只读代码段的名称 ;0x30000000: 只读代码段的起始地址 init.o (Init, +First) ;/ Init代码段为可执行文件的第一部分. (+RO) ;/所有其它的代码段和只读数据段放在该部分 RW +0 ;/RW: RW段的名称 ;+0: 表示RW段紧接着RO段 (+RW) ; /所有RW段放在该部分 ZI +0 ;/ZI: ZI段的名称 ;+0: 表示ZI段紧接着RW段 *(+ZI) ;/所有ZI段放在该部分 3. ADS产生的各代码段

8、宏 |Image$RO$Base| /* RO代码段起始地址 */ |Image$RO$Limit| /* RO 代码段结束地址 */ |Image$RW$Base| /* RW代码段起始地址 */ |Image$RW$Limit| /* RW 代码段结束地址 */ |Image$ZI$Base| /* ZI 代码段起始地址 */ |Image$ZI$Limit| /* ZI 代码段结束地址 */ 注意:在两个$之间的名称, 与scatter中指定的段的名称相同. 4. 装载过程说明l 当从NorFlash启动时, 要把flash芯片的首地址映射到0x00000000位置, l 系统启动后,

9、启动程序本身把自己从 flash中搬到RAM中运行. 搬移后的各段起始地址, 由以上宏来确定. l 当从NandFlash启动时, S3C2410会自动把前NandFlash的前4k搬到S3C2410的内部RAM中,并把内部 RAM的首地址设为0x00000000,CPU从0x00000000开始执行. 所以, 在nandFlash的前4k程序中,必须 包含从 NandFlash把BootLoader的其余部分装入RAM的程序. 附:TI 编译中常用的段说明 系统常用的段定义: .cinit:包含未用const声明的外部(external)或静态(static)数据表 .const:包含已用const声明的外部或静态数据表以及字符串常量。 .text:包含所有可执行的代码以及常量。 .bss:用于为cinit段以及未初始化的全局和静态变量保留空间(一般是内存空间) 三 ROM文件说明。ROM存放如图2: 图2.Rom 数据存放查询方法。使用文件形式打开,选择字串,到对应的bin文件中去搜索对应字串,再根据该字串地址,加上该bin文件的起始地址,得出在.lis文件中的位置,根据lis文件的的位置数据,在工程中定位,具体的代码。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号