找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2836|回复: 0
收起左侧

51单片机绝对地址定位

[复制链接]
ID:342442 发表于 2018-10-13 08:20 | 显示全部楼层 |阅读模式
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?_BCD2
HEX?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?INITV ARS
然后在:
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?INITV ARS
然后在:
Project->Options for Target ...->BL51 Locate:Xdata
中填入:
?XD?INITVARS(0x200)
再次编译即可。相应地,若定义的是 data/idata 等变量,则相应处理即可。
3、若有多个变量或函数要进行绝对地址定位,则应按地址从低到高的顺序排 列。

完整的pdf格式文档51黑下载地址:
51单片机中怎么将函数或者变量定位到指定地址,非常有用 .pdf (66.92 KB, 下载次数: 24)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表