前面不少人都提过类似问题了,就是在IAR仿真环境下运行程序,有时会出现 IDATA STACK OVERFLOW 的提示,这时的硬件,电源是确保没有故障的。
而板子的蓝牙连接,收发数据看起来都正常。
有的回答是:malloc申请内存没释放引起的。但是malloc申请的是xdata的堆的内存,并不是idata。
有的回答是:打开了watch窗口,频繁后台操作什么的引起,这个如何理解?
我看仿真器里的显示,stack 有 idata stack 和xdata stack 2部分。
idata stack : 就是8051的SP寄存器,这个芯片资料有讲的。 地址:0x42~0xff ,初始值是 0xcd,主要用于保存函数返回地址和传递参数。
xdata stack ,资料里没提,我看memory , 似乎地址:0x01 ~0x27f ,大部分单元的初始值也是0xcd ,少数几个单元(不连续的)初值是0x00,主要用于传递参数。
如果堆栈被使用过,应该里面的值会变。
但是当出现 idata stack 溢出提示时,停下运行,看到 0x42~0xff 和 0x1~0x27f 里还有一半以上是0xcd的。
请问:1,我对idata stack 和 xdata stack 的理解是否正确?
2,如何准确判断stack是否溢出?
3,xdata stack 的大小如何设定?在程序的什么地方实现初始化的?为什么有几个单元的值和别的单元值不同?
谢谢!