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