RTOS_WDT使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0 Initial release 01/31/2024

1. 概述

Hardware watchdog 提供超时复位系统的功能,其功能由定时器和复位功能组成,用户可以设定一个超时时间,并在超时时间以内对它进行“喂狗”的操作,重置其内部计数,如果其内部计算达到了设定的超时时间,watchdog 就会对系统进行复位,重启系统。

2. RTOS用法介绍

目前 Watchdog 模块只提供 api 调用,需要用户在自己的业务逻辑中对 watchdog 进行管理。

2.1 DRIVER PATH

sc/driver/sysdriver/watchdog/drv/mdrv_wdt_api.h
sc/driver/sysdriver/watchdog/drv/mdrv_wdt_reg.h
sc/driver/sysdriver/watchdog/drv/mdrv_wdt.c

2.2 CONFIG配置

#make menuconfig

BSP Driver Options --->
    [*] Support WatchDog driver

2.3 API说明

头文件位于sc/driver/sysdriver/watchdog/drv/mdrv_wdt_api.h

2.3.1. wdt_probe

  • 功能

    用于注册 watchdog 驱动, 目前主要的操作为初始化 watchdog 设置默认的超时时间,系统在启动时会调用此 api,用户可以不再调用

  • 语法

    int infinity_wdt_probe(void)
    
  • 返回值

    返回值 描述
    0 成功
    非0 失败

2.3.2. wdt_remove

  • 功能

    用于注销 watchdog 驱动,目前主要的操作为停止 watchdog

  • 语法

    int infinity_wdt_remove(void)
    
  • 返回值

    返回值 描述
    0 成功
    非0 失败

2.3.3. wdt_start

  • 功能

    用于启动 watchdog 模块计数,在启动前需要先设置超时时间,如果没有设置超时时间,默认的超时时间为10秒

  • 语法

    int infinity_wdt_start(void)
    
  • 返回值

    返回值 描述
    0 成功
    非0 失败

2.3.4. wdt_stop

  • 功能

    用于停止 watchdog 模块计数

  • 语法

    int infinity_wdt_stop(void)
    
  • 返回值

    返回值 描述
    0 成功
    非0 失败

2.3.5. wdt_ping

  • 功能

    用于重置 watchdog 模块的计数值(喂狗)

  • 语法

    int infinity_wdt_ping(void)
    
  • 返回值

    返回值 描述
    0 成功
    非0 失败

2.3.6. wdt_set_timeout

  • 功能

    用于设置 watchdog 的超时时间并启动 watchdog 计数,时间单位为秒,目前可以支持的最大时间为:1/12MHz * 0xFFFFFFFF = 357913941us = 357.9s,API 中会限制输入的超时时间必须大于5秒,如果用户需要更短的超时时间可以自行移除

  • 语法

    int infinity_wdt_set_timeout(unsigned int timeout)
    
  • 参数

    参数名称 描述
    timeout 超时时间(unit:s) 5 <= timeout <= 357
  • 返回值

    返回值 描述
    0 成功
    非0 失败

2.4 DEMO

watchdog 模块的时候范例如下:

infinity_wdt_set_timeout(10); // 设置超时时间为10秒并启动计数

/*
 * watchdog 的喂狗线程,以函数来表示,具体代码位置参考客户自己的实现
 */
void watchdog_ping_thread(void)
{
    infinity_wdt_ping(); // 复位 watchdog 计数(喂狗)
    msleep(5000); // 定时5秒喂狗
}