WDT 使用指南

[English]

概述

  • watchdog 实际上是一个定时器,其通常用来监测和处理系统或软件故障。当系统或软件发生某些错误事件时,如不能定时清除看门狗定时器的计数值,将造成看门狗超时,从而触发系统复位。

  • watchdog主要分为硬件狗(Interrupt Watchdog)和软件狗(Task Watchdog)。

  • WDT相关测试和配置介绍: wdt_test_config_driver

备注

  • 1、由于看门狗硬件资源只有一份,所以将其放在了cp上进行管理,若想配置看门狗,需要到CP侧进行 cp/middleware/soc/bk7258/bk7258.defconfig 配置;

  • 2、喂狗的操作在CP上进行,如果超过配置的时间没有喂狗,会触发系统重启;

  • 3、AP侧没有看门狗,通过核间心跳机制来检测ap是否正常运行;

  • 4、AP侧上层应用主动调用bk_reboot接口也可进行复位;

Interrupt Watchdog

  • 在 ARMINO 中,默认情况下,Interrupt Watchdog 是使能的,应用不应该关闭 interrupt watchdog。

  • 在周期性中断中喂狗,如在 OS tick 中断中喂狗,当因为软件问题,如关中断过长,tick 中断未能及时喂狗,导致 watchdog 超时,最终触发 watchdog 重启。通过这种方式,能及时发现软件中断异常问题。这类 watchdog 使用通常称为 interrupt watchdog。

Interrupt watchdog 使用方法

  • 1、在 cp/middleware/soc/bk7258/bk7258.defconfig 中,通过CONFIG_INT_WDT 来关闭或开启interrupt watchdog;

  • 2、在 cp/middleware/soc/bk7258/bk7258.defconfig 中,通过 CONFIG_INT_WDT_PERIOD_MS 来设置超时时间;

  • 3、中断喂狗操作是:bk_wdt_feed();

备注

  • 1、若是建了新的工程,也可在该工程中进行配置,比如test/platform工程, 在 test/platform/cp/config/bk7258/config

Task Watchdog

在周期性任务中喂狗,如在 idle task 中喂狗,通常 idle task 为整个系统中优先级最低的 task, 当软件出现问题,如某个任务出现死循环长期占用 CPU,使 idle task 无法调度,导致未能及时喂狗,最终触发 watchdog 重启。通过这种方式,能及时发现软件任务调度上的问题。这类 watchdog 使用通常称为 task watchdog。

Task watchdog 使用方法

  • 1、在 cp/middleware/soc/bk7258/bk7258.defconfig 中,通过 CONFIG_TASK_WDT 来关闭或开启interrupt watchdog;

  • 2、在 cp/middleware/soc/bk7258/bk7258.defconfig 中,通过 CONFIG_TASK_WDT_PERIOD_MS 来设置超时时间;

  • 3、中断喂狗操作是:bk_task_task_wdt_feed();

备注

  • 1、若是建了新的工程,也可在该工程中进行配置,比如test/platform工程, 在 test/platform/cp/config/bk7258/config

WDT api介绍