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

Keil C51编译错误:address space overflow

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

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

  解决办法:  

1、将一些变量定义成idata或xdata

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

附录1、Keil C51 data、idata、xdata等区别 

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

 

clip_image002

附录二、Keil C51编译模式Small、Compact、Large区别

 

1、Small模式

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

2、Compact模式

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

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

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

 

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

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

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

标签: keil51C
分享给朋友:

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

大胆假设,小心求证

今天,捣鼓利尔达心电DEMO仪,主要是为了验证自己写的心率处理程序是否正确。结果,怎么捣鼓电压都不正常。用锂电池通过一个3V的LDO给系统供电。供电前,测试LDO输出电压正常,3.04V,结果一接上电路板,电压立马被拉至2V,有时甚至1.5V。从现象来看,首先怀疑的是DEMO板存在短路现象,电流过大...

MySQL导入sql文件错误ERROR 1044 : Access denied for user ‘root’@'localhost’ to database ‘information_schema’

MySQL导入sql文件错误ERROR 1044 : Access denied for user ‘root’@'localhost’ to database ‘information_schema’

参考资料: http://www.linuxidc.com/Linux/2014-03/97586.htm http://stackoverflow.com/questions/4824986/error-1044-access-denied-for-user-rootlocalhost-to-da...

c# toolstrip控件怎么把左边的几个小点去掉

c# toolstrip控件怎么把左边的几个小点去掉

c# toolstrip控件怎么把左边的几个小点去掉 小点如下图所示: 解决办法: 选中你的toolstrip 然后属性 属性中有个 GripStyle 设置Hidden...

NSToolBar-设定初始化选中的item

NSToolBar-设定初始化选中的item

参考资料: http://stackoverflow.com/questions/11004072/nstoolbar-how-do-i-initialise-with-a-selected-item 使用方法: -setSelectedItemIdentifier 举例如下: [self.win...

金蝶k3 wise生产任务单状态

ICMO表中FStatus字段 0-计划  5-确认 1-下达  3-结案...

SQL中没有IIf,Nz函数,用什么替代

SQL Server中没有iif函数,可以使用case when then 例如: case when 性别 = '男' then '先生' else ‘女士' end SQL中也没Nz函数,可以用isnull代替 例如 isnull(字段,0)...

发表评论

访客

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