<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/317739.htm

          |ImageRO

          Base|
          表示RO輸出段運行時起始地址,也可以說是程序代碼存放的起始地址,由-ro-base這個參數(shù)指定;
          |ImageRO
          Limit|
          表示RO輸出段運行時存儲區(qū)域界限,其值可通過|ImageRO
          Base|+Codesizes+RO Data sizes+4計算得出;
          |ImageRW
          Base|
          表示RW輸出段運行時起始地址,記得是運行時的地址,而不一定是加載時的存放地址,因為RW輸出段在加載時可能是在ROM中并緊跟著RO輸出段存放的,當程序運行時才移動(在有些書中說是移動,個人覺得應該只是復制,希望大家能幫我解釋一下,謝謝!)到RAM起始地址為|ImageRW
          Base|的區(qū)域,由-rw-base這個參數(shù)指定;未指定的話,默認緊跟RO輸出段,那么|ImageRW
          Base|=|ImageRO
          Limit|;
          |ImageRW
          Limit|
          表示RW輸出段運行時存儲區(qū)域界限,其值可通過|ImageRW
          Base|+RW Data sizes+4計算得出;
          |ImageZI
          Base|
          表示ZI輸出段運行時起始地址,它是運行時在RAM中生成的,緊跟著RW輸出段存放,其值和|ImageRW
          Limit|一樣;
          |ImageZI
          Limit|
          表示ZI輸出段運行時存儲區(qū)域界限,其值可通過|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庫函數(shù)初始化過程中建立起來的,在ADSl.2或更新版本中,在缺省狀態(tài)下C庫函數(shù)初始化代碼會將連接器生成的符號ImageZI

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

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

          r0—堆基地址;

          r1—堆?;刂?;

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

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

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

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

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




          關鍵詞: ARM空間分段map文

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();