一、 将.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文件,如下: