新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM 常用的段分類及說明

        ARM 常用的段分類及說明

        作者: 時間:2016-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文件的的位置數據,在工程中定位,具體的代碼。


        關鍵詞: ARM段分

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 舟山市| 蒲江县| 乳山市| 衡水市| 中西区| 济阳县| 呼伦贝尔市| 南漳县| 安西县| 黔南| 沭阳县| 莱芜市| 凭祥市| 聂拉木县| 高碑店市| 张家口市| 盐城市| 沈阳市| 松原市| 友谊县| 和田县| 辉县市| 兖州市| 霍州市| 海原县| 红河县| 电白县| 大连市| 绥江县| 香河县| 双牌县| 霸州市| 龙海市| 合川市| 曲靖市| 逊克县| 余干县| 保康县| 偃师市| 兴文县| 长白|