你的”喂狗”姿势真的对吗?

kelly的头像
kelly 发布于:周二, 09/20/2016 - 14:52 ,关键词:

天天“喂狗”,还不知道什么姿势能炫出高能?往下看吧!

看门狗功能大家都耳熟能详了,产品在最后量产前为了保证可靠性一般都会将看门狗功能加进去,防止代码在某些意外情况下进入死锁状态从而导致整个系统瘫痪,甚至有些对可靠性要求更高的领域会加入外部看门狗。

通常MCU内部都带有看门狗功能。简单的有软件看门狗(COP),高级一点的叫WDOG。由于COP比较简单,所以这里讲的主要是WDOG。WDOG“喂狗”是很有讲究的,姿势稍有不对可能就会“喂狗”失败,影响系统正常运行。

正确的“喂狗”姿势

1、256个总线周期内初始化看门狗

看门狗配置寄存器需要在解锁看门狗之后的256个总线时钟周期之内完成,也就是说在这256个总线周期之内要快速完成看门狗功能的初始化。所以为了保证安全,在初始化之前最好将全局中断关闭,初始化完后再打开,这样就能确保看门狗初始化不被打扰。

2、“喂狗”不能被打断

喂狗的过程是往看门狗寄存器连续写入0xA602和0xB480两个数,且这个操作必须在20个总线周期内完成。所以在“喂狗”前同样需要将全局中断关闭,“喂狗”完毕后再打开全局中断。

3、“喂狗”间隔大于4个看门狗时钟

对MCU来说,每次“喂狗”的间隔至少4个看门狗时钟以上。在一些系统中,很多用户为了简便,会直接在主函数或某个专门的任务中while(1)死循环的只执行一个“喂狗”操作,这样就有一个潜在的风险,连续“喂狗”操作时长低于4个看门狗时钟。

4、忌讳在定时中断中“喂狗”

有时为了偷懒,不想在程序中一直加“喂狗”函数,投机取巧的就开启一个定时中断,然后在中断中“喂狗”。这看似很巧妙,可以实现“喂狗”。但是这个并不能真正反应出系统是否工作正常,存在系统进入一个错误的死循环或运行出错,但是定时中断还是能产生的风险。

当你看完“喂狗”姿势要领,再回想一下一直以来你的“喂狗”姿势真的对吗?

文章来源:周立功单片机

围观 579