我的问题是keil(RMDK3.24)环境下如何指定某个函数存放地址 下面是网上收集的方法: 1,使用分散加载文件 但是这个好像是针对文件的,单个函数不知道行不行,就是行也比较麻烦 2,在工程的Option For Target-BL51 Locate页的CODE编辑框内填入"?PR?函数名?文件名(地址)",多个定位用","隔开。 例如: ?PR?_SetLedFlash?MAIN(0x1000) 把函数void SetLedFlash(U8 m_data);定位在0x1000处 ?PR?ClrLedFlash?MAIN(0x1100) 把函数void ClrLedFlash(void);定位在0x1100处 带参数的函数名称前加"_" 很明显,太麻烦 3,MDK3.03以后的版本,可以使用__at()宏 例如: C语言: #include <absacc.h>
const char MyText[] __at(0x1F00) = "TEXT AT ADDRESS 0x1F00"; int x __at(0x40003000); // variable at address 0x40003000
void __at(0x40000000) Func(void) { } 汇编: AREA |.ARM.__AT_0xFFE0|, CODE, READONLY
这个方法好,简单,好像问题解决了,但是经过实验,变量和常量的定位都正确. 函数就不对了, 我使用的是RMDK3.24+ULINK2+STM32103Z,编译后提示如下告警: ..xxx.c(820): warning: #1202-D: invalid attribute for function "函数名称" 不管,进入仿真,结果地址没变化,没效果.后来查看了帮助,里面也没有提到针对函数的用法,是不是这个__at()指令本身就是不能对函数使用的,或者对于函数有自己的特殊指令?
请教哪位仁兄,如何解决这个问题,就是keil下如何简单的定位函数地址? 谢谢! |