一.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文件的的方位数据,在工程中定位,详细的代码。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/260589.html