keil中关于函数定位的问题

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

俺只会第二种...而且这么久也从来没用过函数定位功能....

  
赤铸 发表于 2009-2-17 20:47 | 显示全部楼层

定位不就是为了规定调用入口之类吗?

我用的Keil&nbsp;7.0版本,用&nbsp;_at_&nbsp;关键字定位变量,你那个&nbsp;MDK&nbsp;版本居然可以用&nbsp;__at&nbsp;定义函数(至少语法没错)<br /><br />有个办法:在汇编里定位个函数,用它调用(跳转到)&nbsp;C&nbsp;语言函数
 楼主| andrew.xu 发表于 2009-2-18 15:27 | 显示全部楼层

谢谢

用的是不多,正好碰到了,想研究下简便的方法,像IAR有个&quot;@&quot;就很好用<br /><br />我也觉得__at语法是没错的,不知道为啥不行<br /><br />有个办法:在汇编里定位个函数,用它调用(跳转到)&nbsp;C&nbsp;语言函数<br />这个办法的问题是我的c语言函数还是由编译器自动指定的,没有到我希望的地方去
赤铸 发表于 2009-2-19 10:40 | 显示全部楼层

入口地址确定不就行了?

直接调用汇编函数,中间跳转到别的地方很要紧吗?中断调用不都是这么跳转的?<br /><br />汇编函数也可以写个C语言的原型,用起来都不需要知道它是什么语言写的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

149

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部