KeilC51怎样将子程序段定位在固定的地址位

发布者:sjp5035022最新更新时间:2016-11-09 来源: eefocus关键字:Keil  C51  子程序  地址位 手机看文章 扫描二维码
随时随地手机看文章
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、若有多个变量或函数要进行绝对地址定位,则应按地址从低到高的顺序排列

关键字:Keil  C51  子程序  地址位 引用地址:KeilC51怎样将子程序段定位在固定的地址位

上一篇:LCD显示的c51单片机频率计
下一篇:89C51单片机交通灯程序

推荐阅读最新更新时间:2024-03-16 15:20

STC89C52与AT24C02按字节写(C51
#include reg52.h #include intrins.h #define uchar unsigned char uchar i,a; uchar code table ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8}; sbit wp=P1^0; sbit scl=P1^1; sbit sda=P1^2; sbit led=P2^0; void delay() { _nop_(); _nop_(); _nop_(); } void de1s() //误差 0us { unsigned char a,b,c; for(c=167;c 0;c--)
[单片机]
单片机I2C驱动子程序
晶振11.0592M/********************************************************************/ /*******************I2C模拟通信及AT24C02底层驱动程序****************/ /********************************************************************/ //AT24C02 //delayus: 延时约5us void delayus() { ;; } //i2c:init I2C总线初始化 void i2c_init() { SCL = 1; delayus(); S
[单片机]
keil5编译开发51单片机操作步骤
安装好keil 5 mdk 之后,从keil官网下载 c51v960.exe, 具体操作步骤 1.进入官网 2 3.点击C51之后,会让填写一个个人信息,没啥障碍,正常填写就好了,填写好之后就会出现下面的界面,点击下载就好了 4. 下载之后,运行,安装路径选择原来 keil5 MDK的安装路径 安装完毕之后就大功告成了
[单片机]
<font color='red'>keil</font>5编译开发51单片机操作步骤
《初学者C51自学笔记》之蜂鸣器与继电器
继电器,三是拨码开关与蜂鸣器;依次对应连接(继电器同理) #include reg52.h sbit beep=P0^1; void main() { beep=1; } 小电流从引线流入,铁心产生磁力将衔铁吸到下边,从而端点也会随之而下; //反复吸合,听到d滴答滴答声 #include reg52.h sbit relay=P0^0; void delay(void) { unsigned char a,b; for(a=0;a 200;a++) for(b=0;b 200;b++); } void main() { while(1) { relay=1; delay(); r
[单片机]
《初学者<font color='red'>C51</font>自学笔记》之蜂鸣器与继电器
如何不打开KEIL或IAR直接使用ST-LINK烧录.hex文件
大家在开发STM32时,烧录.hex文件主要是两种方式,一种是通过USB转TTL,利用串口进行烧录。我在另一篇博文已经写过,链接如下 https://mp.csdn.net/postedit/84644329 。这种方式无需打开KEIL或者IAR,但是如果板子上没有如同正点原子开发板上的一键下载电路的话,比较麻烦,而且保留BOOT接口会增加部分电路,使用不太方便。另一种是大家常用的利用KEIL或者IAR进行烧录,使用十分方便,但是必须安装KEIL或者IAR才能使用,想在一台没有安装KEIL或者IAR的电脑上烧录的话必须先安装软件,一些情况下比较繁琐,而且必须提供源文件。如何不提供源文件又能很方便的下载呢,可以使用ST官方的软件ST
[单片机]
如何不打开<font color='red'>KEIL</font>或IAR直接使用ST-LINK烧录.hex文件
单片机C51汇编指令之寻址方式学习心得
1.寄存器寻址 指令举例:MOV A,R0 该指令功能:将寄存器R0中的内容送累加器A中 详细说明:假设R0中的内容是16进制数20H,那么执行这条指令之后,累加器A中的内容是20H 即十进制数:32 2.直接寻址 指令举例:MOV A,30H 该指令功能:将地址单元30H中的内容送累加器A中 详细说明:假设地址单元30H中的内容是20H,那么执行该指令之后,累加器A中的内容是:20H 即十进制数32 3.寄存器间接寻址 指令举例:MOV A,@R0 该指令功能:将R0指向的内存单元中的内容送累加器A中 详细说明:为和寄存器直接寻址区别,汇编语言中,寄存器间接寻址中的寄存器前面会加上一个
[单片机]
C51中的函数指针
概述 函数指针是C编程语言众多难懂的特性之一。由于C编译器对关于8051架构的独特要求,函数指针和可重入函数需要克服更大的挑战。这主要是因为函数参数传递的方式。 通常,(对于大多数非8051的芯片),函数参数是在栈上以压入和弹出的汇编指令来完成。由于8051的栈大小有限(仅128字节,某些设备上更低至64字节),函数参数传递必须用不同的技术来传递。 英特尔为8051推出PL/ML-51编译器时,他们引入了将参数存储在固定内存位置的技术。当链接器被调用时,它会建立程序的调用树,找出哪些函数参数是相互独立的,然后覆盖它们。这就是链接器OVERLAY指令的开始。 由于PL/M-51不支持函数指针,所以从未出现间接函数调用的问
[单片机]
C51的指针,试验
C51的指针,试验,===结果:成功 /*********************************************************************/ /* 试指针,假设TL0存在20H,TH0存在21H,下一个 TL0存在22H,TH0存在23H , 共存4组。 计算这4组数据的4次累加后和平均值,再分离存入W10,W11,W12,W13等4个8位寄存器 */ /*********************************************************************/ #include AT89X52.h #include intrins.h #inclu
[单片机]
<font color='red'>C51</font>的指针,试验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved