ARM代碼重定位分析

關於位置有關碼和無關碼

前言

問題來源,NOR FLASH雖然可以XIP執行,但是像全局變量/靜態全局變量這種需要進行修改的話,NOR FLASH便不是一個很好的方案,只能在RAM裏面修改,代碼以及常量在NOR裏面讀取,數據在RAM裏面,首先我們講一下相關概念

開始

1、位置有關碼
當前的指令訪問絕對物理位置,如:ldr pc ,#0X100000 mov pc , #0x10000
這裏位置0x10000絕對固定
這樣代碼數據或者指令位置變動對代碼有毀滅性的影響
2、位置無關碼
當前指令訪問相對位置,如 b [pc,#4],根據當前的相對位置來確定數據
3、運行地址
當前pc的地址
4、鏈接地址
makefile使用ld文件中內存分佈描述地址情況
以STM32爲例我來介紹一下情況,代碼過幾天補上,這幾天開題,比較忙~
首先看一個經典的的

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00005000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

上面形容的是程序加載到0x08000000的flash處,區間長度爲0x10000,讀寫,初始化爲0的數據放在0x200000000爲首地址,區間長度爲0x5000的sram處。
加入我們想要程序全部運行在sram裏面怎麼辦呢

end

修改鏈接文件,後面開完題再寫吧,老師催了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章