C51 的ADDRESS SPACE OVERFLOW问题 - 老吴的日志 - 网易博客
来源:百度文库 编辑:神马文学网 时间:2024/05/26 21:34:57
C51 的ADDRESS SPACE OVERFLOW问题
专业相关 2008-05-25 22:36:22 阅读55 评论0 字号:大中小 订阅
遇到一个编译问题:ADDRESS SPACE OVERFLOW.
搜到解决办法,转下来,方便大家:
诸位!
我用的是Keil6.23版,近日编译一个程序出现下面的问题(我选择的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 10/10/2005 17:40:59 PAGE 70
当然啦,如果我编译设定为Compcat:in PDATA的话就没问题了。
Program Size: data=51.3 xdata=671 code=12501
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
如果大家说是DATA空间问题的话,另一个程序没有XDATA空间的就能通过
Program Size: data=197.4 xdata=0 code=32704
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
注,我选择的片子类型是华邦的78LE516
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
你的变量是不是全部为data(默认状况)?你把有些变量声明成idata 或xdata再试一试。
因为data只能是Ram中的前128个,变量超过128个时会出现ADDRESS SPACE OVERFLOW!
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这个问题本已解决几周了,后来想想,本着相学见长的原则,把我的除错经验写一下,也方便其他初学者。
楼上的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里最好不要留下定义而未使用的变量或函数,编译器无法