keil分散性加载文件scf实例

一、            将.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.cdelay()函数定义为sectiondelay”,然后分散加载到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文件,如下:

猜你喜欢

转载自blog.csdn.net/lupf2009/article/details/80375374