单片机看门狗是什么?单片机中看门狗的作用

看门狗(WDT)是一个定时器,开启看门狗定时器之后(比如定时200ms),在单片机程序中每隔一定的时间(小于200ms)要“喂狗”一次,即将看门狗定时器清零。这样做的用处是,一旦单片机程序跑飞,没有在定时的时间之内去喂狗,那么定时达到200ms时,看门狗自动将单片机复位。

看门狗的作用是系统CPU正常工作时定时给看门狗喂狗,复位定时器,如果系统出问题,没有给看门狗喂狗,看门狗就由于超时将CPU复位。

系统用初始化后注册看门狗中断request_irq(WDT0_ACCSCSSNBARK_INT, wdog_bark_handler, 0, apps_wdog_bark, NULL);

和初始化看门狗的超时时间bark time,

__raw_writel(timeout, msm_tmr0_base + WDT0_BARK_TIME);

__raw_writel(timeout + 3*WDT_HZ, msm_tmr0_base + WDT0_BITE_TIME);

复位看门狗,使能看门狗和中断极性。

__raw_writel(1, msm_tmr0_base + WDT0_EN);

__raw_writel(1, msm_tmr0_base + WDT0_RST);

enable_percpu_irq(WDT0_ACCSCSSNBARK_INT, IRQ_TYPE_EDGE_RISING);

并且初始化和启动一个定时器,比如10秒一次,

schedule_delayed_work_on(0, &dogwork_struct, delay_time);

static DECLARE_DELAYED_WORK(dogwork_struct, pet_watchdog_work);

static DECLARE_WORK(init_dogwork_struct, init_watchdog_work);

static struct msm_watchdog_pdata msm_watchdog_pdata = {

.pet_time = 10000,

.bark_time = 11000,

.has_secure = true,

.needs_expired_enable = true,

};

delay_time = msecs_to_jiffies(pdata->pet_time);

schedule_work_on(0, &init_dogwork_struct);

定时器定时时间到了对定时器复位pet dog 和重新启动定时器。

static void pet_watchdog_work(struct work_struct *work)

{

pet_watchdog();

if (enable)

schedule_delayed_work_on(0, &dogwork_struct, delay_time);

}

如果系统出问题了,没有办法执行定时器的回到函数,那么看门狗就产生中断,执行中断服务程序static irqreturn_t wdog_bark_handler(int irq, void *dev_id),

执行panic。 panic(Apps watchdog bark received!);

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查