在下这厢有礼了。
平台:Keil工程
需求:分散加载(为了将函数放到指定的内存上)
操作:
1. 首先,你有个keil工程,你想将其中一个或者几个函数加载到指定地址上;
2.打开keil工程,Alt+F7进入配置选项
3.点击Linker,
操作上面4步后就可以去写*.sct的分散加载文件了。
4. 实例介绍,比如
添加函数将她放进flash地址里面。
这是添加的函数flash_patch_func_1.c 另一个是脚本project.sct
#include<stdio.h>
void modify_function()
{
printf("这个函数我想放到0x00400000");
}
LR_IROM1 0x08000000 0x00080000 { ; load region size_region
ER_IROM1 0x08000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
}
FLASH_DOWNLOAD 0x00400000 0x1000 {
FLASH_DOWNLOAD_ROM 0x00400000 {
flash_patch_func_1.o (+RO)
}
}
5.生成两个bin 或者一个bin
keil配置的user里面写脚本
C:\Keil\ARM\BIN40\fromelf.exe --bin -o "$L@L.bin" "#L"
这个配置可以生成两个bin
C:\Keil\ARM\BIN40\fromelf.exe --bincombined -o "$L@L.bin" "#L"
这个配置联合生成一个bin
个人理解说明,仅供参考;
目前,工作中经常会用到Keil工具,因此做一个小结;keil中最重要的是配置,我最关心的是ROM和RAM地址的编写,根据硬件工程师给的memory的分布表去设置这块。
而对于一个软件工程来说,你的代码有 数据段(数据(+RW))、代码段(指令(+RO));因此,数据段存放在SRAM中,代码段存放在ROM段中;但是SRAM也可以存放代码段的东西。
CPU有I-code和D-code;I-code用于指令的取指;D-code用于数据的取数。