当前位置:首页 > 技术心得 > 正文内容

Keil C51编译错误:address space overflow

xjtudll15年前 (2012-05-15)技术心得43420

近日在使用Keil的时候,遇到了一个问题:address space overflow。程序最初编译的时候没这问题,当我增加一段代码后,出现了这个问题。经网上搜索,发现根本原因是:data只能是RAM中的前128个,变量超过128个时会出现ADDRESS SPACE OVERFLOW

  解决办法:  

1、将一些变量定义成idataxdata

  2、将keil的编译模式设置成Large

附录1Keil C51 dataidataxdata等区别 

1data:固定指前面0x00-0x7f128RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
2idata:固定指前面0x00-0xff256RAM,其中前128data128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:cidata做指针式的访问效果很好)
 
3xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
4 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。

 

clip_image002

附录二、Keil C51编译模式SmallCompactLarge区别

 

1Small模式

  所有缺省变量参数均装入内部RAM,优点是访问速度快,缺点是空间有限,只适用于小程序。

2Compact模式

所有缺省变量均位于外部RAM区的一页(256Bytes),具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定,优点是空间较Small为宽裕,速度较Small慢,较large要快,是一种中间状态。

3large模式
所有缺省变量可放在多达64KB的外部RAM区,优点是空间大,可存变量多,缺点是速度较慢。

  提示:存储模式在C51编译器选项中选择。

 

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/233/

标签: keil51C
分享给朋友:

“Keil C51编译错误:address space overflow” 的相关文章

Keil得到C编译之后的汇编代码

Keil得到C编译之后的汇编代码

在Options for Target --> Listing标签页下 在C Compiler Listing: \*.lst部分中勾选Assembly Code,这样生成的LST文件中就会包含汇编源码了。 找到相应的lst文件,如图所示: 用记事本打开,里面就有汇编代码了...

QuartusII编译工程后显示资源消耗为零的原因

参考资料:http://www.eefocus.com/li_mengxiang/blog/11-04/208828_3da3b.html 近日,编译了一个CPLD工程,编译OK,无任何错误,但是显示资源消耗为0,这个显然是不正常的。 网上搜了一番,一般是两种原因: 1、qurtusII编译工程后显...

Protel99SE PCB各层的含义

本文收集于网络,整理而成,原文作者未知。 我们在进行印制电路板设计前,第一步就是要选择适用的工作层。Protel 99 SE提供有多种类型的工作层。只有在了解了这些工作层的功能之后,才能准确、可靠地进行印制电路板的设计。 Protel 99 SE所提供的工作层大致可以分为7类:Signal La...

解决Virtualbox虚拟机下Android x86 4.0联网问题

解决Virtualbox虚拟机下Android x86 4.0联网问题

在Virtualbox中,把虚拟机网络设为“网络地址转换(NAT)”模式,高级中控制芯片(T)选择:PCnet-FAST III(Am79C973), 然后启动你的android-x86 4.0虚拟机,进入终端模拟器,输入以下命令: su ifconfig eth0 192...

模数转换器主要技术指标

分辨率(Resolution) 指数字量变化一个最小量时模拟信号的变化量, 定义为满刻度与2n的比值。分辨率又称精度,通常以数字信号的位数来表示。 转换速率(Conversion Rate) 指完成一次从模拟转换到数字的AD转换所需的时间的倒数。 积分型AD的转换时间是毫秒级属低速AD,逐次...

水晶报表提示“需要数字字段”

水晶报表提示“需要数字字段”

解决方法: 1.新建一个公式字段,命名applyqty,编辑内容为:CDbl ({字段名}) 作用是将字段转换为数字字段 2.新建另外一个sum的公式字段,内容如下 if isnull({@applyqty}) then 0 else sum({@applyqty}) 这样...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。