如果是ARM,需要修改分散加载文件,在指定的位置新增Section,之后在你的程序中声明将函数放在该Section中。
如果是51,那么在选项卡的Linker页面,在连接参数行添加参数,指定你那个函数块的绝对地址就行。
在要指定代码的存储空间不是一件特别简单的事情,尤其是你想为某个或某几个函数指定具体的地址。1,编译器只有在最终的Link阶段才会为代码和数据分配内存地址,因此指定代码段的地址一般是通过写一个link脚本来进行的。Link阶段时,编译器的Linker会读取你写的Link脚本,并且按照脚本的规定给代码分配地址。
2,根据ARM开发工具的不同,link脚本的语法和形式也有所不同。ARM MDK,ARM ADS,Eclips+GCC,Linux GCC, ARM Realview等开发工具都支持Link脚本。
如果你英文还可以,建议你直接找到开发工具的Help手册去研究。如果你英语实在不行,也可以把开发工具名称和你代码的具体情况告诉我,我帮你看看。
把变量 myvar 定义在 idata 的 0x40 处, 在 M51 文件中可以找到这麽一行IDATA 0040H 0001H ABSOLUTE
表示有变量在 idata 的 0x0040 处绝对地址定位.
2)使用 KeilC 编译器定义绝对地址的变量, 方法待查.
2. 函数绝对地址定位
1)在程序中编写一函数 myTest
void myTest(void)
{
// Add your code here
}
2)使用 KeilC 编译器定位绝对地址的函数, 打开 Project ->Options for Target 菜单,
选中 BL51 Locate 选项卡, 在 Code: 中输入:
?PR?myTest?MAIN(0x4000)
把函数 myTest 定位到程序区的 0x4000 处,
再次编译就可以了.
3)一次定位多个函数的方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)