ERROR L107: ADDRESS SPACE OVERFLOW

错误提示:

*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA    
    SEGMENT: _DATA_GROUP_
    LENGTH:  0014H
Program Size: data=138.7 xdata=0 code=1928



这个错误是内存空间溢出了

[转载]Keil <wbr>C <wbr>错误*** <wbr>ERROR <wbr>L107: <wbr>ADDRESS <wbr>SPACE <wbr>OVE

Memory Model: small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为你程序所有,寄存器 R0-R7必须映射到低RAM,要占去 个字节,如果使用寄存组切换,占用的更多。
所以你可以使用 data 区最大为 120 字节,超出 120 个字节则必须用 idata 显示的指定为间接寻址,另外堆栈至少要占用一个字节,所以你最多能使用 127 上字节(如果)

有个简单的方法就是打开你的输出文件夹中的 .M51 符号表文件,查找哪些变量被移到了 xdata,然后修改你的程序,在这些变量前加上 idata,再编译看看,或直接把某些变量定义为idata型。

另外,对 idata 的定义的变量最好放在 data 变量之后
对于这一种定义
uchar c1;
idata uchar c2;
uchar c3;
变量 c2 肯定会以间接寻址,但它有可以落在 data 区域,就浪费了一个可直接寻址的空间


另外要学会优化变量,有时区区10k代码就把256字节用爆,实在太大手大脚了,能用局部变量的就别全局变量,能不用变量的就不用变量,分配数组要量力而行。别把单片机当电脑,单片机的艺术是勤俭持家、杜绝浪费


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值