ads分散載入檔案語法:
;執行域包含1個或多個輸入段
;輸入段書寫格式:包括模組描述和段描述
;;模組描述:指定包含模組的檔案(包括目標檔案.o和庫檔案.lib)搜尋範圍,可以使用萬用字元*和?
; *.o(所有目標檔案)
; *(所有目標檔案和庫檔案)
; .any(所有檔案)不論放在檔案哪個位置,本描述被最後解析,相當於「剩下的所有檔案」
;模組:彙編用area宣告的段,例如area stackbottom, data, noinit
; c中指定段:#pragma arm section rwdata = "sram",zidata = "sram"
;;段描述:包括屬性描述和段名描述
;;屬性描述:(+ 屬性)
; ro:唯讀**段+資料段,也可表達為text
; ro-code:唯讀**段
; ro-data:唯讀資料段
; rw:讀寫**段+資料段,也可表達為data
; rw-code:讀寫**段
; rw-data:讀寫資料段
; zi:初始化為0的資料段,也可表達為bss
; entry:包含入口點的輸入段
;偽屬性:first:放在最前
; last:放在最後
;;段名描述:(輸入段名)只能用在組合語言中
;周立功的例程總共三個分散載入檔案mem_a.scf,mem_b.scf,mem_c.scf,區別是載入位址不一樣
;具體載入哪個,在debuginexram->arm linker->scatter定義,鏈結型別選擇scattered
rom_load 0x0 ;rom_load 為載入域的名稱,其後面的0x0 表示載入域的起始位址(存放程式**的起始位址)
;image entry point一定要跟rom_load值一樣
iram 0x40000000 ;變數域iram ,內部ram的起始位址為0x40000000
stacks_bottom +0 uninit ;+0表示接著上一段,uninit 表示不初始化
stacks 0x40004000 uninit ;接著從0x40004000 開始,放置 area stacks, data, noinit uninit 表示不初始化
eram 0x80000000 ;外部ram從0x80000000開始為變數域
;如果片外ram起始位址不為0x8000 0000,則需要修改mem_.scf檔案
heap +0 uninit ;+0表示接著上一段,uninit 表示不初始化
heap_bottom 0x80080000 uninit ;接著在外部0x80080000 放置堆頂
;這個位址是片外ram 的結束位址,根據實際情況修改
}「pi」 屬性使用示例:
lr_1 0x010000 pi ; 載入域起始位址0x010000.
er_rw +0 absolute ; pi屬性被absolute取代
er_zi +0 ; er_zi執行域在er_rw執行域後面
}lr_1 0x010000 ; 載入域起始位址0x010000.
er_rw 0x018000 pi ; pi屬性取代absolute
er_zi +0 ; er_zi執行域在er_rw執行域後面
}
關於分散載入檔案
分散載入 scatlerloading 即工程裡的.scf檔案。在scatterfile中可以為每乙個 或資料區在裝載和執行時指定不同的儲存區域位址,scatlertoading的儲存區塊可以分成二種型別 裝載區 當系統啟動或載入時應用程式的存放區。執行區 系統啟動後,應用程式進行執行和資料訪問的儲...
ARM分散載入檔案
一 原理 arm的聯結器提供了一種分散載入機制,在連線時可以根據分散載入檔案 scf檔案 中指定的儲存器分配方案,將可執行映象檔案分成指定的分割槽並定位於指定的儲存器實體地址。這樣,當嵌入式系統在復位或重新上電時,在對cpu相應暫存器進行初始化後,首先執行rom儲存器的bootloader 根據連線...
ARM分散載入檔案
可以將 放入不同的儲存空間。了解分散載入檔案之前,首先需要了解code ro data rw data zi data。define num 0x2000 ro data char const flage 5 ro data char str str rw data char a zi data 下...