1 RT-Thread 的WDT簡介
WDT(Watch Dot timer)即看門狗定時器,其主要作用是當發(fā)生軟件故障時可以產(chǎn)生復位信號,使程序復位,其本質是一個計數(shù)器。
當看門狗啟動后,計數(shù)器開始自動計數(shù),在計數(shù)器溢出前如果沒有被復位,計數(shù)器溢出就會對 CPU 產(chǎn)生一個復位信號使系統(tǒng)重啟(俗稱 “被狗咬”)。系統(tǒng)正常運行時,需要在看門狗允許的時間間隔內對看門狗計數(shù)器清零(俗稱“喂狗“),不讓復位信號產(chǎn)生。如果系統(tǒng)不出問題,程序能夠按時“喂狗”。一旦程序跑飛,沒有“喂狗”,系統(tǒng)“被咬” 復位。
WDT相關接口如下所示:
函數(shù) | 描述 |
---|---|
rt_device_find() | 根據(jù)看門狗設備設備名稱查找設備獲取設備句柄 |
rt_device_init() | 初始化看門狗設備 |
rt_device_control() | 控制看門狗設備 |
rt_device_close() | 關閉看門狗設備 |
關于WDT更詳細的內容,請參看官方手冊:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/watchdog/watchdog
2 WDT使用實例
WDT使用起來很簡單。
1、根據(jù)設備名稱 “wdt” 查找設備獲取設備句柄。
2、初始化設備后設置看門狗溢出時間。
3、啟動看門狗。
4、喂狗:設置空閑線程回調函數(shù),在空閑線程回調函數(shù)中喂狗。
2.1 RA6E2 WDT配置
接下來配置WDT,只需要簡單配置就可使用。
- FSP配置WDT
打開RA Smart Configurator,添加WDT的stack。
[]()[]()[]()Figure 2?1 添加WDT的stack步驟
接下來需要配置WDT的參數(shù)。
[]()[]()[]()Figure 2?2 WDT參數(shù)設置
這里可以設置WDT的參數(shù)。
- 使能WDT
2.2 代碼實現(xiàn)
核心代碼如下:
#include < rtthread.h >
#include < rtdevice.h >
#define WDT_DEVICE_NAME "wdt" /* 看門狗設備名稱 */
static rt_device_t wdg_dev; /* 看門狗設備句柄 */
static void idle_hook(void)
{
/* 在空閑線程的回調函數(shù)里喂狗 */
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
rt_kprintf("feed the dog!n ");
rt_thread_mdelay(300);
}
int wdt_sample(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
char device_name[RT_NAME_MAX];
rt_strncpy(device_name, WDT_DEVICE_NAME, RT_NAME_MAX);
/* 根據(jù)設備名稱查找看門狗設備,獲取設備句柄 */
wdg_dev = rt_device_find(device_name);
if (!wdg_dev)
{
rt_kprintf("find %s failed!n", device_name);
return RT_ERROR;
}
/* 啟動看門狗 */
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL);
if (ret != RT_EOK)
{
rt_kprintf("start %s failed!n", device_name);
return -RT_ERROR;
}
/* 設置空閑線程回調函數(shù) */
rt_thread_idle_sethook(idle_hook);
return ret;
}
/* 導出到 msh 命令列表中 */
MSH_CMD_EXPORT(wdt_sample, wdt sample);
2.3 測試
編譯下載。
如果屏蔽喂狗操作,在終端輸入“wdt_sample”即可進行測試。
執(zhí)行wdt_sample,結果如下:(一秒后觸發(fā)WDT復位)
如果定時喂狗,在終端輸入“wdt_sample”即可進行測試。
-
看門狗
+關注
關注
10文章
602瀏覽量
72352 -
定時器
+關注
關注
23文章
3347瀏覽量
120901 -
RT-Thread
+關注
關注
32文章
1496瀏覽量
43465
發(fā)布評論請先 登錄
評論