This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

再次请教 2540 的 idata stack 和 xdata stack 问题



前面不少人都提过类似问题了,就是在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 的大小如何设定?在程序的什么地方实现初始化的?为什么有几个单元的值和别的单元值不同?

谢谢!