C_and_CPP 版 (精华区)
发信人: hyy (活着便精彩), 信区: C_and_CPP
标 题: Re: 关于数组首地址问题,请教!!!!
发信站: 哈工大紫丁香 (2003年12月09日20:13:04 星期二), 站内信件
算了,干脆转过来
问: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、若有多个变量或函数要进行绝对地址定位,则应按地址从低到高的顺序排列。
【 在 hyy (活着便精彩) 的大作中提到: 】
: http://www.c51bbs.com/
: 上面有关于如何把数据、程序存入绝对地址的帖子
: 【 在 tianlang (我喜欢奶茶) 的大作中提到: 】
: : 你可以在C中插入一段汇编语言,地址自己选。
--
________ ________
/| \ / |\
/|| \ / ||\
||| | |||
||| 向你推荐 | Delphi |||
||| | |||
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.183]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.262毫秒