微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM 常用的段分类及说明

ARM 常用的段分类及说明

时间:11-24 来源:互联网 点击:
一.ARM存储区各段分布


二.概念

.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的首地址设为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文件的的位置数据,在工程中定位,具体的代码。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top