關於位置有關碼和無關碼
前言
問題來源,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
修改鏈接文件,後面開完題再寫吧,老師催了