KEIL 调试 ADDRESS SPACE OVERFLOW 的问题

来源:互联网 发布:arp绑定mac地质作用 编辑:程序博客网 时间:2024/05/29 17:59

晚上调程序的时候,KEIL编译出现了ADDRESS SPACE OBERFLOW的问题,已经碰到两次了,上次没在意,以为程序太长,地址空间溢出了。

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

刚才百度了一下,看到一个网友在博客里面的文章,成功解决,原来不是data空间溢出的问题,而是我有些子程序定义了没调用,导致keil无法合理分配空间,从而溢出。

 

 

 

为了让这篇文章继续发挥光和热,原文转载如下:(非常十分以及及其感谢网友zoedigi!)

  

楼上的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里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。