新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM空間分段(lst文件夾下map文件)

        ARM空間分段(lst文件夾下map文件)

        作者: 時間:2016-11-09 來源:網絡 收藏
        對于ARM,堆是向上生長的,棧是向下生長的。


        局部變量占用棧(stack)空間。

        程序中動態申請的如malloc()和new函數申請的內存空間占用堆(heap)空間。

        本文引用地址:http://www.104case.com/article/201611/317739.htm

        |ImageRO

        Base|
        表示RO輸出段運行時起始地址,也可以說是程序代碼存放的起始地址,由-ro-base這個參數指定;
        |ImageRO
        Limit|
        表示RO輸出段運行時存儲區域界限,其值可通過|ImageRO
        Base|+Codesizes+RO Data sizes+4計算得出;
        |ImageRW
        Base|
        表示RW輸出段運行時起始地址,記得是運行時的地址,而不一定是加載時的存放地址,因為RW輸出段在加載時可能是在ROM中并緊跟著RO輸出段存放的,當程序運行時才移動(在有些書中說是移動,個人覺得應該只是復制,希望大家能幫我解釋一下,謝謝!)到RAM起始地址為|ImageRW
        Base|的區域,由-rw-base這個參數指定;未指定的話,默認緊跟RO輸出段,那么|ImageRW
        Base|=|ImageRO
        Limit|;
        |ImageRW
        Limit|
        表示RW輸出段運行時存儲區域界限,其值可通過|ImageRW
        Base|+RW Data sizes+4計算得出;
        |ImageZI
        Base|
        表示ZI輸出段運行時起始地址,它是運行時在RAM中生成的,緊跟著RW輸出段存放,其值和|ImageRW
        Limit|一樣;
        |ImageZI
        Limit|
        表示ZI輸出段運行時存儲區域界限,其值可通過|ImageZI
        Base|+ZI Data sizes+4計算得出。

        CODE 是 RO-CODE同義詞,也是.text同義詞
        CONST是RO-DATA同義詞,也是.constdata同義詞
        DATA是RW-DATA同義詞,也是.data同義詞
        ZI是.bss的同義詞

        Total RO Size (Code + RO Data) 12216 ( 11.93kB)
        Total RW Size (RW Data + ZI Data) 292 ( 0.29kB)
        Total ROM Size (Code + RO Data + RW Data) 12412 ( 12.12kB)

        應用程序的堆棧(stack)和堆(heap)是在C庫函數初始化過程中建立起來的,在ADSl.2或更新版本中,在缺省狀態下C庫函數初始化代碼會將連接器生成的符號ImageZI

        Limit地址作為堆的基地址。在分散加載時,連接器會將用戶的__user_initidl_stackheap()函數代替C庫函數默認的堆棧和堆初始化函數,并將其連接到用戶的鏡像文件中,用戶可通過重新實現__user_initial_stackheap()函數來改變堆棧和堆的位置,從而適合自己的目標硬件。

        __user_initial_stackheap()可以用C或匯編語言來實現。它必須返回如下參數:

        r0—堆基地址;

        r1—堆棧基地址;

        r2—堆長度限制值(需要的話);

        r3—堆棧長度限制值(需要的話)。
        當用戶使用分散加載功能的時候,必須重新實現一user_initial_staacklaeap(),否則連接器會報錯:
        Error:L6218E:Undefined symbol ImagerZI

        一Limit(referred from sys_stackheap.o)。
        注:ImageZI
        Limit變量為零初始化段(ZI段)的末地址。未使用分散加載時,堆默認就定位在ZI段的末地址,而棧通常位于RAM的頂端

        (2)使用兩個存儲區
        匯編語言如下:

        這種方式定義的堆棧和堆分別采用兩個不同存儲區。堆棧采用向下增長,從地址Ox40000到地址Ox20000;堆采用向上增長,從地址0x28000000到地址0x28080000,如圖4所示。




        關鍵詞: ARM空間分段map文

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 红桥区| 新巴尔虎右旗| 新营市| 瑞安市| 交城县| 靖宇县| 合江县| 纳雍县| 新竹市| 昌乐县| 毕节市| 兴安县| 台山市| 瑞金市| 于都县| 桃园市| 张家界市| 肇东市| 吉林省| 宽城| 桂东县| 城市| 蒲江县| 乌拉特前旗| 垫江县| 平山县| 峨眉山市| 阿巴嘎旗| 米脂县| 玛纳斯县| 清远市| 黔南| 汪清县| 云安县| 大方县| 贵德县| 乌拉特前旗| 大连市| 南宫市| 志丹县| 双柏县|