标题: 最近51单片机很迷惑DATA [打印本页]

作者: 瀚海一滴    时间: 2016-7-13 09:26
标题: 最近51单片机很迷惑DATA
说是DATA SIZE OVERFLOW,以前的程序可以达到128不报错,这次怎么才121就溢出了
很头疼的是每次上限都不一样,不知道它背后的实质老觉得不踏实
各位大神给点意见吧,
我的程序里面有变量uchar,bit,int,float也有数组,还有一大堆code数组,不知道哪些有影响了
先谢谢诸位了!

捕获.JPG (33.87 KB, 下载次数: 90)

溢出了

溢出了

作者: ktzrkt    时间: 2016-7-13 22:01
转自网络:
首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入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里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。
作者: songdaxuan    时间: 2016-7-14 21:58
有个很简单的方法 点target option魔术棒 选target选项卡里Memory Model改成Large就可以了




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