单片机 > 单片机程序设计 > 详情

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

发布时间:2025-10-27 发布时间:
|

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

以下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 E     M E M O R Y     * * *

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

CODE      xxxxH       xxxxH       UNIT           ?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 E     M E M O R Y     * * *

下可找到:

CODE      xxxxH       xxxxH       UNIT           ?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 A     M E M O R Y    * * *

下可找到:

XDATA     xxxxH       xxxxH       UNIT           ?XD?INITVARS

然后在:

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

中填入:

?XD?INITVARS(0x200)

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

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
89C51单片机数码管显示