430软狗不喂狗后系统起不来的问题

430软狗不喂狗后系统起不来的问题

太阳能版本的程序,想同时开启硬狗和软狗。
但,软狗一直没有调试成功。

尝试1:使用和低功耗版本的Init_Timer函数。
情况描述:
系统一直重启,喂狗和不喂狗,都会重启。
调试进去,发现程序停止在地址 0004 处。
原因是gs_timerHook的值不知在啥时被改为0了。
因此,在Timer0_A1_ISR函数中调用时发生了错误。

尝试2:使用和正常版本的Init_Timer函数。
系统看似运行正常。
但,一旦发生 STOPSOFTDOG指令停止喂狗,
系统马上停止,但并不会重启。
调试进去,发现和尝试1的类似,也是:
程序停止在地址 0004 处。
原因是gs_timerHook的值不知在啥时被改为0了。
因此,在Timer0_A1_ISR函数中调用时发生了错误。

终于把这个问题解决了!!!
过程:
通过iar调试器,在变量gs_timerHook所在的内存下断点,查看究竟是什么地方会改变它的值,把它清零的。
终于跟踪到,原来是,关了喂狗之后,系统重启了,而在重启的过程中会把内存先清零,因此导致的gs_timerHook被清零。
解决办法:
在调用gs_timerHook时判断下其是否为0。

原文地址:https://www.cnblogs.com/gaotaozhaolei/p/8874857.html