WDG
介绍
对于不同底层驱动的wdg操作实现,统一封装成本文所述hal wdg接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/
API列表
函数名称 | 功能描述 |
---|---|
hal_wdg_init | 初始化指定看门狗 |
hal_wdg_reload | 重载指定看门狗,喂狗 |
hal_wdg_finalize | 关闭指定看门狗 |
API详情
相关结数据结构
wdg_dev_t
typedef struct {
uint8_t port; /* wdg port */
wdg_config_t config; /* wdg config */
void *priv; /* priv data */
} wdg_dev_t;
wdg_config_t
typedef struct {
uint32_t timeout; /* Watchdag timeout ms */
} wdg_config_t;
hal_wdg_init
初始化指定看门狗
函数原型
int32_t hal_wdg_init(wdg_dev_t *wdg);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
wdg_dev_t *wdg | 入参 | 看门狗设备描述 | 用户自定义一个wdg_dev_t结构体 |
返回值
返回成功或失败, 返回0表示看门狗初始化成功,非0表示失败
调用示例
wdg_dev_t wdg1;
/* wdg port set */
wdg1.port = WDG1_PORT_NUM;
/* set reload time to 1000ms */
wdg1.config.timeout = 1000; /* 1000ms */
ret = hal_wdg_init(&wdg1);
hal_wdg_reload
重载指定看门狗,喂狗
函数原型
void hal_wdg_reload(wdg_dev_t *wdg);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
wdg_dev_t *wdg | 入参 | 看门狗设备描述 | 使用hal_wdg_init时传入wdg_dev_t结构体 |
返回值
返回成功或失败, 返回0表示看门狗重载成功,非0表示失败
调用示例
ret = hal_wdg_reload(&wdg1);
hal_wdg_finalize
关闭指定看门狗
函数原型
int32_t hal_wdg_finalize(wdg_dev_t *wdg);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
wdg_dev_t *wdg | 入参 | 看门狗设备描述 | 使用hal_wdg_init时传入wdg_dev_t结构体 |
返回值
返回成功或失败, 返回0表示看门狗关闭成功,非0表示失败
调用示例
ret = hal_wdg_finalize(&wdg1);
使用
添加该组件
在相应的platform/mcu的mk内,添加对应hal文件的编译包含。
包含头文件
#include "aos/hal/wdg.h"
使用示例
#include <aos/hal/wdg.h>
#define WDG1_PORT_NUM 1
/* define dev */
wdg_dev_t wdg1;
int application_start(int argc, char *argv[])
{
int ret = -1;
static int count = 0;
/* wdg port set */
wdg1.port = WDG1_PORT_NUM;
/* set reload time to 1000ms */
wdg1.config.timeout = 1000; /* 1000ms */
/* init wdg1 with the given settings */
ret = hal_wdg_init(&wdg1);
if (ret != 0) {
printf("wdg1 init error !\n");
}
while(1) {
/* clear wdg about every 500ms */
hal_wdg_reload(&wdg1);
/* finalize wdg1 */
if (count == 20) {
hal_wdg_finalize(&wdg1);
}
/* sleep 500ms */
aos_msleep(500);
count++;
};
}
注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现
移植说明
新建hal_wdg_xxmcu.c和hal_wdg_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_wdg_xxmcu.c中实现所需要的hal函数,hal_wdg_xxmcu.h中放置相关宏定义。<br /> 参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_wdg_stm32l4.c