51单片机,keilc51,如何使用data变量超过128怎么办?谢谢

使用idata定义变量可以成功构建,但是端口信号错乱无法使用,有什么办法吗?

将堆栈指针SP指向128之后。如果你定义了数组。将数组定义为Idata。很难想象单个变量使用,你能用尽128个data类内存单元。如果真的用尽了,那只有将访问频率低的内存单元放到idata类去。总之,不要走极端,变量也有轻重缓急之分,不能一味追求性能将所有变量都定为data类。追问

我用idata定义那些大的数据类型后,程序是c写的,是可以构建成功的,但是程序运行错误,未输入就端口信号乱波动,板子芯片木有外置ram,单单是stc89c52的裸片。
我就是想问问idata怎么使用,或者推荐些书和资料也可以,谢谢

追答

如果是C写的程序,不用关心变量的使用问题,不管是什么内存类型的。对变量的内存类型的定义,只会影响执行速度,通常不会导致程序执行错误。所以程序运行错误应该还是你的程序有问题。

       当然因为51的内存有限,你使用idata内存应该留有余地,因为51的堆栈也在idata区里,你多少要留出堆栈空间,否则程序运行可能会崩溃。建议堆栈至少留8个字节以上。

       留心一下附件的第二章第2节。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-10
减少全局变量的使用,编译后不要让data大于128,可以使用Xdata追问

我使用的是数组变量,板子没外置ram,不能用xdata,最近两天一直在优化代码,原来是200多,硬是让我缩减到160,但还是不能用,头痛不已啊。
想请问还有有什么别的办法吗?

追答

坐等大神指点