8051 单片机是使用巨大的芯片,在Keil C51 编程应用中,我们由于某些原因,需要固定某个变量和函数在特定的地址上,方法分别如下:
1.变量绝对地址定位
1)在定义变量时使用 _at_ 关键字即可,如:
uint8 code value _at_ 0x5555; //把变量value定义在程序区的0x5555处
注:在使用 _at_ 关键字定位绝对地址时,不能对其赋初值。
2)使用Keil c51编译器定义绝对地址的变量
首先定义一个变量:
uint8 code value;
之后在编译器中打开project->options for Target菜单,选中BL51 Locate选项卡,在Code中输入:“?CO?MAIN(0x5555)”即可。如图:
注:只有全局变量可以绝对定位,局部变量无法实现绝对定位。
2.函数绝对地址定位
1)在程序中编写一函数MyTest
void MyTest(void)
{
//Add your code here
}
2)使用Keil C51编译器定位绝对地址的函数,打开project->options for Target菜单,选中BL51 Locate选项卡,在Code中输入:“?PR?MyTest?MAIN(0x4000)”。把函数MyTest定位到程序区0x4000处,再次编译就可以。
3)一次定位多个函数的方法
方法同定位一个函数的方法一样。
注:如有多个函数或者变量要进行绝对定位,则应按地址从低到高的顺序排列。
函数的表达模式为:?PR?函数名?文件名
而函数名又分1:无参函数 ?PR?函数名?文件名
2:有参函数 ?PR?_函数名?文件名
3:再入函数?PR?_?函数名?文件名