ARM 常用的段分類(lèi)及說(shuō)明

二.概念
.text段:代碼段,用來(lái)放置代碼(code),一般是只讀。
.data段:數據段,用來(lái)存放經(jīng)過(guò)初始化的全局變量和經(jīng)過(guò)初始化的靜態(tài)變量(static)一般是可讀可寫(xiě)。
.bss段:全局變量數據段:用來(lái)存放未初始化的全局變量和未初始化的靜態(tài)變量,一般是可讀可寫(xiě)的,之所以把.bss與.data分開(kāi),是因為系統會(huì )為.bss段的變量初始值清零。
.rodata段:常量數據段,用來(lái)存放常量(const),一般是只讀的,可以歸類(lèi)為代碼段。
棧:存放局部變量和函數參數等數據,向下生長(cháng)(向低地址增長(cháng))。
堆:給動(dòng)態(tài)分配內存使用,向上生長(cháng)(向高地址增長(cháng))
注:代碼段和數據段之間有明確的分隔,但是數據段和堆棧之間沒(méi)有。
三.進(jìn)一步闡述
1.在A(yíng)RM的集成開(kāi)發(fā)環(huán)境中,將.text段和.rodata段統稱(chēng)為RO段,放在ROM或FLASH中。
2.將.data稱(chēng)為RW Data段。
3.將.bss段稱(chēng)為ZI Data段。
4.RW Data段和ZI Data段統稱(chēng)為RW段。
四.程序裝載
裝載的文件一般有兩種:.axf文件:帶有調試信息,可供AXD調試工具使用。.bin文件:可執行的二進(jìn)制代碼文件,也是常見(jiàn)的最終下載到處理器的代碼。
bin文件有兩種狀態(tài):存放態(tài)和運行態(tài)。
1.存放態(tài):可執行文件通過(guò)fromelf產(chǎn)生后,就是起始存儲狀態(tài),在存儲介質(zhì)上(flash)的分布如下:
+-------------+----------- | .rodata | |+-------------+-----------
_____________| 代碼段(RO 段) | .text |+-------------+-----------
2.運行態(tài):可執行文件通過(guò)裝載過(guò)程,搬入到RAM中,此時(shí)可執行文件就從存放態(tài)編程了運行態(tài),在RAM中的分布如下:
+-------------+-- RW段結束地址 | RW 段 |
+-------------+-- RW段起始地址
| 保留區1 |
+-------------+-- RO段起始地址
3.通過(guò)上述可知,.bin文件的最終運行,需要經(jīng)過(guò)一個(gè)重要的過(guò)程----裝載過(guò)程,即將程序從存儲狀態(tài)下,有目的的裝載到RAM中。
五.如何裝載
1.裝載配置:指定RO段的起始地址和RW段的其實(shí)地址,ZI段進(jìn)階在RW段之后。
2.scatter文件:通過(guò)scatter文件指定可執行文件隔斷的詳細地址。
3.ADS產(chǎn)生的各代碼段宏
|Image$$RO$$Base|
|Image$$RO$$Limit|
|Image$$RW$$Limit|
|Image$$ZI$$Base|
4.裝載過(guò)程說(shuō)明
l
l
l
所以, 在nandFlash的前4k程序中,必須 包含從 NandFlash把BootLoader的其余部分裝入RAM的程序.
附:TI 編譯中常用的段說(shuō)明 系統常用的段定義:
.cinit:包含未用const聲明的外部(external)或靜態(tài)(static)數據表 .
const:包含已用const聲明的外部或靜態(tài)數據表以及字符串常量。
.text:包含所有可執行的代碼以及常量。
四.三.ROM文件說(shuō)明。
ROM存放如圖2:

圖2.
Rom 數據存放查詢(xún)方法。
使用文件形式打開(kāi),選擇字串,到對應的bin文件中去搜索對應字串,再根據該字串地址,加上該bin文件的起始地址,得出在.lis文件中的位置,根據lis文件的的位置數據,在工程中定位,具體的代碼。
評論