看门狗足够了.
,???????看门狗复位 它会重新初始化堆栈指针
这个问题问得....艾.
上面都写着是复位了,,,就是代码从最开始的地方运行了.
堆栈肯定初始化掉了..
???比如 写EEPROM程序处,一旦错误写EEPROM将造成存储数据的丢失或者错误啊.
所以必须.有数据检验功能,,eeprom是不可靠的,
不跳飞都可能出错,不要说跳飞了.
???/FuncA(), FuncB() FuncC() FeedWDG()[喂狗] 如果在执行FuncA()时跑飞到了FuncB()中呢?后续会照样喂狗啊!
如果这种问题出现..就是funca没有正常退出,
跑到funcb里面也不会正常退出,,很可能的情况就是推出到非法地址.
这样,看门狗自然还会复位的..放心好了.
另为.给你个建议,,,都用了c写程序,,就不要过多的考虑堆栈什么的.
一般来说.这种系统都会给你自动搞定,,除非你想特殊应用,
自己手动操作堆栈...,虽然也可以.但是调试时候麻烦多多,非常容易出错,
要想这么做..必须充分了解C编译器编译的调用结构,堆栈使用方式等等,
用看门狗吧。有些看门狗可以强行复位的。真的不行,可以在你需要的地方加上:
对看门狗进行极短时间的初始化,然后延时超过这个极短时间,这样系统也就复位了。
我觉得你的方法有问题,防止程序跑飞,用watchdog就可以。
不然你不知道程序飞到哪了,你怎么让程序跳转到主程序呢?
程序异常,你直接将它关闭,重新运行不就可以了吗?