一、 將.c檔案載入到指定位置
要實現keil下的分散載入,需要修改sct檔案,本工程要實現將hw_config.c檔案載入到0x08002000起始位置,本工程的的sct檔案為project\scatterloading\mdk-arm\project.sct,開啟如下:
; *** scatter-loading description filegenerated by uvision ***
lr_irom1 0x08000000 0x00002000 { ;load region size_region
er_irom10x08000000 0x00002000 { ; load address = execution address
*.o (reset, +first)
*(inroot$$sections)
rw_iram1 0x20000000 0x00002000 { ; rwdata
.any (+rw +zi)
lr_irom2 0x080020000x0000050 {
er_irom2 0x08002000 0x0000050 { ; 將hw_config.c檔案分散載入到0x08002000以後的區域
hw_config.o (+ro)
lr_irom3 0x0800dfb00x0000040 {
er_irom3 0x0800dfb0 0x0000040 { ; 將main.c中delay()函式定義為section「delay」,然後分散載入到0x0800dfb0以後的區域
main.o(delay)
lr_irom4 0x08002050 0x000dfb0 {
er_irom4 0x08002050 0x000dfb0 { ; load address = executionaddress
.any (+ro)
紅色部分為實現分散載入所新增部分,想要是實現將hw_config.c載入到0x08002000起始位置只需要在sct檔案中加入以下**即可:
lr_irom2 0x08002000 0x0000050 {
er_irom2 0x08002000 0x0000050 { ; 將hw_config.c檔案分散載入到0x08002000以後的區域
hw_config.o (+ro)
二、 keil中新增上面修改的sct檔案
三、 將函式載入到指定位置
本工程實現的是將main.c檔案中的delay函式載入到0x0800dfb0起始位置
1、 在sct檔案中加入以下**:
lr_irom3 0x0800dfb0 0x0000040 {
er_irom3 0x0800dfb0 0x0000040 { ; 將main.c中delay()函式定義為section「delay」,然後分散載入到0x0800dfb0以後的區域
main.o(delay)
2、 在函式的定義處新增__attribute__((section("delay"))),具體**如下:
voiddelay(void)__attribute__((section("delay")));
voiddelay(void)
for(i=0;i<0xffff;i++);
四、 將陣列載入到指定位置
效果如下:
開啟project\scatterloading\mdk-arm\list\project.map檔案,如下:
關於分散載入檔案
分散載入 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 下...