watchdog
watchdog 提供看门狗定时器功能,用于系统运行监控和异常恢复,支持超时复位、中断回调及低功耗挂起/恢复。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| 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
头文件清单
功能说明
- 初始化看门狗模块,配置看门狗超时时间
- 调用前看门狗模块应处于未初始化状态,重复调用不保证行为
- 初始化完成后可调用 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.capplication/3322/3322_recovery/main.cbootloader/provision_3322/boot/main.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_WATCHDOG_SUPPORT_LPM | 特性宏 | 支持低功耗模式下保存超时时间特性 | n |
| CONFIG_WATCHDOG_ALREADY_START | 特性宏 | 支持看门狗已在其他固件中启动特性 | n |
uapi_watchdog_deinit
头文件清单
功能说明
- 去初始化看门狗模块,若看门狗仍在使能状态则先停止看门狗
- 调用后看门狗模块处于未初始化状态,需重新调用 uapi_watchdog_init() 才能再次使用
- 释放看门狗相关资源
前置条件
- 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
- 依赖关系:看门狗模块处于已初始化状态
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 去初始化成功 |
参考案例
drivers/adapter/ohos/iot_watchdog.c
uapi_watchdog_enable
头文件清单
功能说明
- 使能看门狗,指定看门狗触发模式(复位模式或中断模式)
- 使能后看门狗开始计数,需在超时前调用 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.capplication/3322/3322_recovery/main.cbootloader/provision_3322/boot/main.cdrivers/adapter/ohos/iot_watchdog.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_WATCHDOG_SUPPORT_LPM | 特性宏 | 支持低功耗模式下保存触发模式特性 | n |
| CONFIG_WATCHDOG_ALREADY_START | 特性宏 | 支持看门狗已在其他固件中启动特性,使能时不重复配置硬件 | n |
uapi_watchdog_disable
头文件清单
功能说明
- 去使能看门狗,停止看门狗硬件计数器
- 调用后看门狗不再计数,不再触发超时事件
- 去使能后可重新调用 uapi_watchdog_enable() 使能看门狗
前置条件
- 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
- 依赖关系:看门狗处于使能状态
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 看门狗去使能成功 |
| ERRCODE_FAIL(0xFFFFFFFF) | 执行失败 | 看门狗未初始化 |
参考案例
drivers/adapter/ohos/iot_watchdog.cmiddleware/chips/3322/exception/exception_riscv.cbootloader/flashboot_3322/main.c
uapi_watchdog_kick
头文件清单
功能说明
- 喂狗操作,重置看门狗计数器,防止看门狗超时触发
- 必须在使能看门狗后、超时时间到达前周期性调用
- 喂狗成功后看门狗计数器重新开始计时
前置条件
- 调用时序约束:看门狗已通过 uapi_watchdog_enable() 使能
- 依赖关系:看门狗处于使能且计数中状态
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 喂狗成功 |
| ERRCODE_FAIL(0xFFFFFFFF) | 执行失败 | 看门狗未使能 |
参考案例
application/3322/3322_app_standard/thread_init.cdrivers/adapter/ohos/iot_watchdog.cdrivers/chips/3322/boot/boot_porting/watchdog/boot_watchdog.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_WATCHDOG_SUPPORT_ULP_WDT | 特性宏 | 支持超低功耗看门狗喂狗特性 | n |
uapi_watchdog_set_time
头文件清单
功能说明
- 设置看门狗超时时间,单位为秒
- 若看门狗当前处于使能状态,会先自动去使能,再设置超时时间
- 设置完成后需重新调用 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
头文件清单
功能说明
- 获取看门狗计数器的当前剩余时间
- 通过出参返回剩余时间值,剩余时间为0表示看门狗即将超时
- 调用时看门狗需处于使能状态
前置条件
- 调用时序约束:看门狗已通过 uapi_watchdog_enable() 使能
- 依赖关系:看门狗处于使能且计数中状态
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| timeout | uint32_t * | 剩余时间值,单位秒,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 获取剩余时间成功 |
| ERRCODE_FAIL(0xFFFFFFFF) | 执行失败 | 看门狗未使能或 timeout 为 NULL |
uapi_register_watchdog_callback
头文件清单
功能说明
- 注册看门狗超时回调函数,当看门狗触发超时时调用该回调处理异常
- 注册回调后,看门狗在中断模式下超时将先进入回调,若回调中未喂狗则系统复位
- 回调返回值在当前实现中不被检查
前置条件
- 调用时序约束:看门狗模块已通过 uapi_watchdog_init() 初始化完成
- 依赖关系:看门狗模块处于已初始化状态
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| callback | watchdog_callback_t | 看门狗超时回调函数指针,超时触发中断时由中断处理函数调用 | 非 NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 注册回调成功 |
| ERRCODE_FAIL(0xFFFFFFFF) | 执行失败 | 看门狗未初始化或 callback 为 NULL |
uapi_watchdog_resume
头文件清单
功能说明
- 恢复看门狗模块,重新配置看门狗超时时间和触发模式并使能
- 用于低功耗模式唤醒后恢复看门狗运行状态
- 恢复的超时时间和触发模式为挂起前保存的配置
前置条件
- 调用时序约束:看门狗模块已通过 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
头文件清单
功能说明
- 挂起看门狗模块,用于低功耗模式进入前暂停看门狗
- 当前实现直接返回成功,不做硬件操作
- 挂起后看门狗状态由低功耗框架管理
前置条件
- 调用时序约束:看门狗模块已通过 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
使用说明
所有看门狗接口的返回值类型
watchdog_callback_t
使用说明
- 调用时机:看门狗超时触发中断时,由中断处理函数调用
- 参数 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 | 模式上限值,无效值,用于参数校验 |