iar430中定义的变量是从ram的起始地址向上,而堆栈是从ram的终止地址向下。
以msp430f135为例,它是512bytes的ram,起始地址为200h,终止地址为3ffh,所以它的变量是从200h开始,向3ffh方向存放,而堆栈是从3ffh开始,向200h方向压栈。
当变量存储空间和堆栈最大占用空间在中间相遇时,就发生了堆栈溢出。
下面就详细介绍如何查看ram使用情况:
1 当然是烧程序到目标板里呀
2 选择window/memory,打开memory窗口
3 从ram的起始地址200h开始,输入200,再回车
4 选中200h~3ffh区域(135为512ram),右键选择memory fill……
5 在memory fill中的start写入:0x200,length写:512,value填入FF(也可填入其他值),被选中的区域全填充FF
6 运行程序,跑一遍设计的所有功能,再停止cspy,看看memory窗口
7 如果再填充的区域内已经没有FF存在,就说明已经发生堆栈溢出或是会有溢出的危险(ram刚好够用)。最好保留一定余量的ram不被改变,以防发生溢出