我认为单片机堆栈溢出最重要的原因是我们编程序有问题,即在程序设计初期没有留出足够的空间供堆栈使用,堆栈一旦溢出程序一般会乱指,就是我们所说的程序跑分。一般我们不容许出现这个现象,因此我们在设计程序的时候首先要在内部ram里开辟一段连续的地址当堆栈使用,且只能让它通过push和pop指令进行访问,而且每次访问堆栈后注意别让堆栈溢出。
stc单片机堆栈溢出的解决方法
ram模式用large,尽量用xram,减少函数嵌套层数,如果一个函数只被一个函数调用,就尽量合并下。
编译器会根据片内ram消耗量自动确定sp指针,而且51也只能用片内ram做堆栈。
keil c51的堆栈不需要你去设置的,编译器会把data ram剩余的空间都划分给栈,所以尽量减少对data的使用。