我的程序在关机按键中执行休眠,然后再开机按键中执行ljmp start开机。实际效果原本还可以。但是现在发现每重复开关机4次就在开机倒计时程序中出现堆栈上溢复位。
后把ljmp start改为RESET()后重新开关机多次没发现堆栈上溢复位出现。
问题是解决了,但是有很多东西还是不太明白,请各位帮忙解惑啊。
首先,堆栈上溢出现的原因都是什么呢?是不是嵌套太多或局部变量溢出之类的呢??如果是溢出为什么开关机4个循环才复位1次呢?
其次。ljmp start中的start在什么位置呢?它与reset有什么区别呢?与硬件复位又有什么区别呢?我查了下说是一般单片机中软件复位与硬件复位的区别是软件复位不对一些寄存器复位。
最后。按照我的需求,其实我想让软件复位达到硬件复位的效果,这样复位的彻底一些可以去掉一些不好的状态。如何实现呢?有人倒是说饿狗来复位,但是我的狗是设置的2秒,不想动这个时间,而饿死的时间太长影响显示效果。所以还有其他方法吗? |