ARM常用的段分类及说明

ARM 99浏览

一.ARM存储区各段分布

ARM <wbr>常用的段分类及说明
二.概念
.text段:代码段,用来放置代码(code),一般是只读。
.data段:数据段,用来存放经过初始化的全局变量和经过初始化的静态变量(static)一般是可读可写。
.bss段:全局变量数据段:用来存放未初始化的全局变量和未初始化的静态变量,一般是可读可写的,之所以把.bss与.data分开,是因为系统会为.bss段的变量初始值清零。
.rodata段:常量数据段,用来存放常量(const),一般是只读的,可以归类为代码段。

栈:存放局部变量和函数参数等数据,向下生长(向低地址增长)。
堆:给动态分配内存使用,向上生长(向高地址增长)

注:代码段和数据段之间有明确的分隔,但是数据段和堆栈之间没有。
三.进一步阐述
1.在ARM的集成开发环境中,将.text段和.rodata段统称为RO段,放在ROM或FLASH中。
2.将.data称为RW Data段。
3.将.bss段称为ZI Data段。
4.RW Data段和ZI Data段统称为RW段。
四.程序装载
装载的文件一般有两种:.axf文件:带有调试信息,可供AXD调试工具使用。.bin文件:可执行的二进制代码文件,也是常见的最终下载到处理器的代码。
bin文件有两种状态:存放态和运行态。
1.存放态:可执行文件通过fromelf产生后,就是起始存储状态,在存储介质上(flash)的分布如下:
 |
... |

+-------------+----------- | .bss | ZI +-------------+-----------

  +-------------+-- 数据段 |
.data | RW
  +-------------+-----------

+-------------+----------- | .rodata | |+-------------+-----------

_____________| 代码段(RO )
| .text |+-------------+-----------

   | ............. | 

2.运行态:可执行文件通过装载过程,搬入到RAM中,此时可执行文件就从存放态编程了运行态,在RAM中的分布如下:

 | ... |

 +-------------+-- ZI段结束地址 |
ZI
  |

 +-------------+-- ZI段起始地址 |

  保留区2
|

+-------------+-- RW段结束地址 |
RW
  |

+-------------+-- RW段起始地址

| 保留区1
|

 +-------------+-- RO段结束地址 |
RO
  |

+-------------+-- RO段起始地址

  | ... | 

3.通过上述可知,.bin文件的最终运行,需要经过一个重要的过程----装载过程,即将程序从存储状态下,有目的的装载到RAM中。

五.如何装

  在ADS中,装载方式一般有2种:装载配置和使用scatter文件指定。

1.装载配置:指定RO段的起始地址和RW段的其实地址,ZI段进阶在RW段之后。

2.scatter文件:通过scatter文件指定可执行文件隔断的详细地址。

3.ADS产生的各代码段宏

|Image$$RO$$Base|

|Image$$RO$$Limit|

 |Image$$RW$$Base|

|Image$$RW$$Limit|

|Image$$ZI$$Base|

 |Image$$ZI$$Limit|  

4.装载过程说明

l  当从NorFlash启动时, 要把flash芯片的首地址映射到0x00000000位置,

l  系统启动后, 启动程序本身把自己从 flash中搬到RAM中运行. 搬移后的各段起始地址, 由以上宏来确定.

l  当从NandFlash启动时,
S3C2410
会自动把前NandFlash的前4k搬到S3C2410的内部RAM,并把内部 RAM的首地址设为0x00000000CPU0x00000000开始执行.

所以, nandFlash的前4k程序中,必须 包含从 NandFlashBootLoader的其余部分装入RAM的程序.

附:TI 编译中常用的段说明 系统常用的段定义:

.cinit:包含未用const声明的外部(external)或静态(static)数据表 .

const:包含已用const声明的外部或静态数据表以及字符串常量。

.text:包含所有可执行的代码以及常量。

 

 .bss:用于为cinit段以及未初始化的全局和静态变量保留空间(一般是内存空间)

四.三.ROM文件说明。

ROM存放如图2

ARM <wbr>常用的段分类及说明

                                     2.

Rom 数据存放查询方法。

使用文件形式打开,选择字串,到对应的bin文件中去搜索对应字串,再根据该字串地址,加上该bin文件的起始地址,得出在.lis文件中的位置,根据lis文件的的位置数据,在工程中定位,具体的代码。