KeilC51怎样将子程序段定位在固定的地址位?
2012-06-02
标签: Keil C51

以下2问题均要用C51解决

1。 怎样将1个子程序段定位在1个固定的地址位置?

例如将 INT BCD2HEX(INT XX)定位在1000H

2。 HOW在EEPROM 中固定的位置存放1字符串?

如在200H处放“COPYRIGHT 2001-11”

答: 函数定位与变量定位...

1、函数定位:

假如要把C源文件 tools.c 中的函数

int BIN2HEX(int xx)

{

...

}

放在CODE MEMORY的0x1000处,先编译该工程,然后打开该工程的M51文件,在

* * *C O D EM E M O R Y* * *

行下找出要定位的函数的名称,应该形如:

CODExxxxHxxxxHUNIT?PR?_BCD2HEX?TOOLS

然后在:

Project->Options for Target ...->BL51 Locate:Code

中填写如下内容:

?PR?_BCD2HEX?TOOLS(0x1000)

再次Build,在M51中会发现该函数已放在CODE MEMORY的0x1000处了

2、赋初值的变量定位:

要将某变量定位在一绝对位置且要赋初值,此时用 _at_ 不能完成,则如下操作:

在工程中建立一个新的文件,如InitVars.c,在其中对要处理的变量赋初值(假设是code变量):

char code myVer = {"COPYRIGHT 2001-11"};

然后将该文件加入工程,编译,打开M51文件,若定义的是code型,则在

* * *C O D EM E M O R Y* * *

下可找到:

CODExxxxHxxxxHUNIT?CO?INITVARS

然后在:

Project->Options for Target ...->BL51 Locate:Code

中填入:

?CO?INITVARS(0x200)

再次编译即可。

相应地,如为xdata变量,则InitVars.c中写:

char xdata myVer = {"COPYRIGHT 2001-11"};

然后将该文件加入工程,编译,打开M51文件,在

* * *X D A T AM E M O R Y* * *

下可找到:

XDATAxxxxHxxxxHUNIT?XD?INITVARS

然后在:

Project->Options for Target ...->BL51 Locate:Xdata

中填入:

?XD?INITVARS(0x200)

再次编译即可。相应地,若定义的是data/idata等变量,则相应处理即可。

3、若有多个变量或函数要进行绝对地址定位,则应按地址从低到高的顺序排列

可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号