标题: *** ERROR L107: ADDRESS SPACE OVERFLOW keil错误的解决方法 [打印本页]

作者: xuegui    时间: 2013-7-13 03:31
标题: *** ERROR L107: ADDRESS SPACE OVERFLOW keil错误的解决方法
今天遇到一个keil问题,编译出现下面提示:最后完美解决,把方法分享给51hei论坛的朋友们

*** ERROR L107: ADDRESS SPACE OVERFLOW

SPACE: DATA

SEGMENT: ?DT?_WRITEONECHAR?DS18B20

LENGTH: 0002H

在百度上查了一些资料,说法不一:

       1、单片机的RAM 不够,但变量太多,所以删掉一些不重要的变量就ok了.
       2、KEIL没有注册,只能编译2K的

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


  如果以上办法都没能解决,最后想了一个办法,发现是变量太多的缘故,删除了几个不重要的变量后完美解决了 ERROR L107: ADDRESS SPACE OVERFLOW的问题.


作者: mybigapple    时间: 2015-3-20 18:15
遇到同样问题。感谢分享。
作者: mybigapple    时间: 2015-3-20 19:43
     选择Large模式,编译是通过了。可是程序不好使了。生成的HEX文件烧录进单片机也不干活了。又试了下选择Compact模式编译,一样不干活。只有Small模式的hex文件好用。
这个谁懂?
作者: dikpoorcat    时间: 2015-8-20 09:41
同样问题,完美解决!谢谢楼主!!特地注册来回复
作者: 蚊子    时间: 2015-8-28 09:02
mybigapple 发表于 2015-3-20 19:43
选择Large模式,编译是通过了。可是程序不好使了。生成的HEX文件烧录进单片机也不干活了。又试了下选 ...

large模式就是默认将所有变量都存于外部RAM,small模式是在内部ram。
作者: 1725211189    时间: 2015-11-9 16:23
mybigapple 发表于 2015-3-20 19:43
选择Large模式,编译是通过了。可是程序不好使了。生成的HEX文件烧录进单片机也不干活了。又试了下选 ...

对,我也是遇到这样的问题了,
作者: lonesmile    时间: 2016-5-14 13:38
楼主 棒棒哒
作者: bwzdxl    时间: 2016-5-26 21:38
谢谢楼主!!!
作者: xyz9836    时间: 2016-6-19 09:53
改成large,连仿真时候也出错,所以还是查找问题吧
作者: yanl0306    时间: 2016-11-5 22:25
谢谢楼主提供的方法
作者: koenlee93    时间: 2018-4-16 19:37
是的,同一楼所说
作者: 盲人2016    时间: 2018-5-27 02:07
厉害了,我遇到了
作者: 欧阳颖    时间: 2018-7-16 03:06
谢谢楼主 另外功能没实现的可能是程序错误 多找找吧
作者: hacehi    时间: 2018-7-24 12:11
我就是这个问题,程序编译没有问题,是正确的。可就是不能产生.hex文件


Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling Text1.c...
linking...
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   CODE   
    SEGMENT: ?PR?SHUTTER_CLOCK?TEXT1
    LENGTH:  02E7H
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   CODE   
    SEGMENT: ?PR?KEY_SCAN?TEXT1
    LENGTH:  0286H

就是这种问题一大堆

作者: ban_13    时间: 2018-9-27 15:07
我遇到了这个问题后,我发现是RAM不够,一般的话。有data、idata、pdata以及xdata。data的话,就是低128(片内)字节;idata的话,就是256个(片内)字节。起始data就是idata的一部分。pdata以及xdata是片外RAM的,那就得看单片机的手册进行操作。例如STC12C5A60S2的话,要用内部扩展的话,是要用到xdata的,即unsigned char xdata a[256],那么这就去了256个字节了。内部扩张的。
也就是说,当你编译后,发现data已经是大于128了,同时伴随着报错。那你就得使用xdata或者pdata了。
作者: yxxiaobaobei    时间: 2019-5-23 19:12
感谢楼主,问题解决啦
作者: cpc859    时间: 2020-4-1 10:32
受用了  谢谢楼主
作者: 龙牙_强少    时间: 2020-4-17 20:01
很不错,解决问题了,适用于稍微添加了一点变量时就突然报错的情况
作者: karolyte    时间: 2020-6-19 11:00
把变量定义为pdata后,这种办法是针对于变量较少的情况
作者: 进步鱼    时间: 2021-11-24 21:21
mybigapple 发表于 2015-3-20 19:43
选择Large模式,编译是通过了。可是程序不好使了。生成的HEX文件烧录进单片机也不干活了。又试了下选 ...

请问这个问题解决了吗?
作者: 月亮石    时间: 2022-4-3 14:51
解决了,谢谢您!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1