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里最好不要留下定义而未使用的变量或函数,编译器无法