跳转至

watchdog

watchdog 提供看门狗定时器功能,用于系统运行监控和异常恢复,支持超时复位、中断回调及低功耗挂起/恢复。

头文件清单

#include "include/driver/watchdog.h"

接口清单

接口名称 功能简述
uapi_watchdog_init 初始化看门狗,配置超时时间
uapi_watchdog_deinit 去初始化看门狗,关闭时钟并释放资源
uapi_watchdog_enable 使能看门狗,指定触发模式
uapi_watchdog_disable 去使能看门狗,停止看门狗计数
uapi_watchdog_kick 喂狗,重置看门狗计数器
uapi_watchdog_set_time 设置看门狗超时时间
uapi_watchdog_get_left_time 获取看门狗计数器的剩余时间
uapi_register_watchdog_callback 注册看门狗超时回调函数
uapi_watchdog_resume 恢复看门狗模块,重新配置超时时间并使能
uapi_watchdog_suspend 挂起看门狗模块

Functions

uapi_watchdog_init

errcode_t uapi_watchdog_init(uint32_t timeout)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 初始化看门狗模块,配置看门狗超时时间
  • 调用前看门狗模块应处于未初始化状态,重复调用不保证行为
  • 初始化完成后可调用 uapi_watchdog_enable() 使能看门狗

前置条件

  • 调用时序约束:看门狗模块未被初始化,即未调用过 uapi_watchdog_init()
  • 依赖关系:看门狗时钟资源可用,无其他模块独占该资源

入参

名称 参数类型 详细说明 约束取值范围
timeout uint32_t 看门狗超时时间,单位秒 大于0

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 看门狗初始化成功
Other 其他错误码,参考errcode_t 执行失败

参考案例

  • application/3322/3322_app_standard/kernel_init.c
  • application/3322/3322_recovery/main.c
  • bootloader/provision_3322/boot/main.c

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_WATCHDOG_SUPPORT_LPM 特性宏 支持低功耗模式下保存超时时间特性 n
CONFIG_WATCHDOG_ALREADY_START 特性宏 支持看门狗已在其他固件中启动特性 n

uapi_watchdog_deinit

errcode_t uapi_watchdog_deinit(void)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 去初始化看门狗模块,若看门狗仍在使能状态则先停止看门狗
  • 调用后看门狗模块处于未初始化状态,需重新调用 uapi_watchdog_init() 才能再次使用
  • 释放看门狗相关资源

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:看门狗模块处于已初始化状态

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 去初始化成功

参考案例

  • drivers/adapter/ohos/iot_watchdog.c

uapi_watchdog_enable

errcode_t uapi_watchdog_enable(wdt_mode_t mode)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 使能看门狗,指定看门狗触发模式(复位模式或中断模式)
  • 使能后看门狗开始计数,需在超时前调用 uapi_watchdog_kick() 喂狗,否则将触发看门狗超时
  • 中断模式下,看门狗超时先进入中断回调,若中断中未喂狗则系统复位

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:看门狗模块处于已初始化且未使能状态

入参

名称 参数类型 详细说明 约束取值范围
mode wdt_mode_t 看门狗触发模式 WDT_MODE_RESET(0) / WDT_MODE_INTERRUPT(1)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 看门狗使能成功
ERRCODE_FAIL(0xFFFFFFFF) 执行失败 看门狗未初始化或 mode 参数无效

参考案例

  • application/3322/3322_app_standard/kernel_init.c
  • application/3322/3322_recovery/main.c
  • bootloader/provision_3322/boot/main.c
  • drivers/adapter/ohos/iot_watchdog.c

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_WATCHDOG_SUPPORT_LPM 特性宏 支持低功耗模式下保存触发模式特性 n
CONFIG_WATCHDOG_ALREADY_START 特性宏 支持看门狗已在其他固件中启动特性,使能时不重复配置硬件 n

uapi_watchdog_disable

errcode_t uapi_watchdog_disable(void)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 去使能看门狗,停止看门狗硬件计数器
  • 调用后看门狗不再计数,不再触发超时事件
  • 去使能后可重新调用 uapi_watchdog_enable() 使能看门狗

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:看门狗处于使能状态

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 看门狗去使能成功
ERRCODE_FAIL(0xFFFFFFFF) 执行失败 看门狗未初始化

参考案例

  • drivers/adapter/ohos/iot_watchdog.c
  • middleware/chips/3322/exception/exception_riscv.c
  • bootloader/flashboot_3322/main.c

uapi_watchdog_kick

errcode_t uapi_watchdog_kick(void)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 喂狗操作,重置看门狗计数器,防止看门狗超时触发
  • 必须在使能看门狗后、超时时间到达前周期性调用
  • 喂狗成功后看门狗计数器重新开始计时

前置条件

  • 调用时序约束:看门狗已通过 uapi_watchdog_enable() 使能
  • 依赖关系:看门狗处于使能且计数中状态

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 喂狗成功
ERRCODE_FAIL(0xFFFFFFFF) 执行失败 看门狗未使能

参考案例

  • application/3322/3322_app_standard/thread_init.c
  • drivers/adapter/ohos/iot_watchdog.c
  • drivers/chips/3322/boot/boot_porting/watchdog/boot_watchdog.c

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_WATCHDOG_SUPPORT_ULP_WDT 特性宏 支持超低功耗看门狗喂狗特性 n

uapi_watchdog_set_time

errcode_t uapi_watchdog_set_time(uint32_t timeout)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 设置看门狗超时时间,单位为秒
  • 若看门狗当前处于使能状态,会先自动去使能,再设置超时时间
  • 设置完成后需重新调用 uapi_watchdog_enable() 使能看门狗

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:看门狗模块处于已初始化状态

入参

名称 参数类型 详细说明 约束取值范围
timeout uint32_t 看门狗超时时间,单位秒 大于0

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 设置超时时间成功
ERRCODE_FAIL(0xFFFFFFFF) 执行失败 看门狗未初始化

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_WATCHDOG_SUPPORT_LPM 特性宏 支持低功耗模式下保存超时时间特性 n

uapi_watchdog_get_left_time

errcode_t uapi_watchdog_get_left_time(uint32_t *timeout)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 获取看门狗计数器的当前剩余时间
  • 通过出参返回剩余时间值,剩余时间为0表示看门狗即将超时
  • 调用时看门狗需处于使能状态

前置条件

  • 调用时序约束:看门狗已通过 uapi_watchdog_enable() 使能
  • 依赖关系:看门狗处于使能且计数中状态

出参

名称 数据类型 输出说明
timeout uint32_t * 剩余时间值,单位秒,由调用方分配内存、函数填充

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 获取剩余时间成功
ERRCODE_FAIL(0xFFFFFFFF) 执行失败 看门狗未使能或 timeout 为 NULL

uapi_register_watchdog_callback

errcode_t uapi_register_watchdog_callback(watchdog_callback_t callback)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 注册看门狗超时回调函数,当看门狗触发超时时调用该回调处理异常
  • 注册回调后,看门狗在中断模式下超时将先进入回调,若回调中未喂狗则系统复位
  • 回调返回值在当前实现中不被检查

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:看门狗模块处于已初始化状态

入参

名称 参数类型 详细说明 约束取值范围
callback watchdog_callback_t 看门狗超时回调函数指针,超时触发中断时由中断处理函数调用 非 NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 注册回调成功
ERRCODE_FAIL(0xFFFFFFFF) 执行失败 看门狗未初始化或 callback 为 NULL

uapi_watchdog_resume

errcode_t uapi_watchdog_resume(uintptr_t arg)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 恢复看门狗模块,重新配置看门狗超时时间和触发模式并使能
  • 用于低功耗模式唤醒后恢复看门狗运行状态
  • 恢复的超时时间和触发模式为挂起前保存的配置

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:CONFIG_WATCHDOG_SUPPORT_LPM 宏已开启

入参

名称 参数类型 详细说明 约束取值范围
arg uintptr_t 恢复参数,当前未使用 -

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 恢复看门狗成功
Other 其他错误码,参考errcode_t 设置超时时间失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_WATCHDOG_SUPPORT_LPM 功能宏 支持低功耗模式特性 n

uapi_watchdog_suspend

errcode_t uapi_watchdog_suspend(uintptr_t arg)

头文件清单

#include "include/driver/watchdog.h"

功能说明

  • 挂起看门狗模块,用于低功耗模式进入前暂停看门狗
  • 当前实现直接返回成功,不做硬件操作
  • 挂起后看门狗状态由低功耗框架管理

前置条件

  • 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
  • 依赖关系:CONFIG_WATCHDOG_SUPPORT_LPM 宏已开启

入参

名称 参数类型 详细说明 约束取值范围
arg uintptr_t 挂起参数,当前未使用 -

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 挂起成功

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_WATCHDOG_SUPPORT_LPM 功能宏 支持低功耗模式特性 n

Type definitions

errcode_t

typedef uint32_t errcode_t;

使用说明

所有看门狗接口的返回值类型

watchdog_callback_t

typedef errcode_t (*watchdog_callback_t)(uintptr_t param);

使用说明

  • 调用时机:看门狗超时触发中断时,由中断处理函数调用
  • 参数 param:超时中断上下文透传的 uintptr_t 参数,头文件未定义具体语义,原样传入用户回调
  • 返回值处理:回调返回的 errcode_t 在当前实现中不被检查

Enumerations

wdt_mode_t

typedef enum {
    WDT_MODE_RESET = 0,     /** 当看门狗触发时,将重启系统。 */
    WDT_MODE_INTERRUPT,     /** 当看门狗触发时,将进入中断。如果在中断中没有喂狗,系统将重启。 */
    WDT_MODE_MAX
} wdt_mode_t;
枚举成员 取值 描述
WDT_MODE_RESET 0 看门狗触发时直接复位系统
WDT_MODE_INTERRUPT 1 看门狗触发时进入中断,中断中未喂狗则系统复位
WDT_MODE_MAX 2 模式上限值,无效值,用于参数校验

Macros

ERRCODE_SUCC

#define ERRCODE_SUCC    0UL

ERRCODE_FAIL

#define ERRCODE_FAIL    0xFFFFFFFF