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