今天 编写 24l01 + 5110 时 出现的错误 2!!!*** ERROR L107: ADDRESS SPACE OVERFLOW !!!

转 网上 相同 的 错误 !!!

 

近日编译一个程序出现下面的问题(我选择的Memory Model是Small,因为我的RAM空间有限)编译后,会报如下的错:

*** ERROR L107: ADDRESS SPACE OVERFLOW
     SPACE:   DATA    
     SEGMENT: _DATA_GROUP_
     LENGTH:   005DH

Program Size: data=126.3 xdata=582 code=12091
BL51 BANKED LINKER/LOCATER V4.23    

最后才知道,因为data只能是Ram中的前128个,变量超过128个时会出现ADDRESS SPACE OVERFLOW!

把有些变量声明成idata 或xdata就可以

下面是相关网上的东西:

******************************************************************

这个问题本已解决几周了,后来想想,本着相学见长的原则,把我的除错经验写一下,也方便其他初学者。

楼上的ddxixi的意见有误。首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入idata or xdata。

其次,data 空间可以达到256,见顶楼的第三例,data空间使用了197.4而决无错误。这是因为目前市面上大多数的MCU都提供了256的data空间。

那么我的错误出现在哪里呢?

这就是Keil的问题了。当编译失败时,它不能给出完整正确的报告。所以它给出的:

Program Size: data=126.3 xdata=582 code=12091
就是不可信的。实际上我的data空间已经远不止126.3了。

最后找到,我在多处定义了一个char buf[33];的字符串,而没有使用它。

结论就出来了:

1、Keil的错误报告不完整。

2、在Keil里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值