c51怎样将子程序段定位在1个固定的地址-皇冠最新app版本

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

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

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

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

以下2问题均要用c51解决

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

      例如将 int bcd2hex(int xx)定位在1000h

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

      如在200h处放“皇冠最新app版本 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 = {"皇冠最新app版本 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 = {"皇冠最新app版本 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、若有多个变量或函数要进行绝对地址定位,则应按地址从低到高的顺序排列。



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

网站地图