1 RT-Thread 的WDT簡介
WDT(Watch Dot timer)即看門狗定時器,其主要作用是當(dāng)發(fā)生軟件故障時可以產(chǎn)生復(fù)位信號,使程序復(fù)位,其本質(zhì)是一個計數(shù)器。
當(dāng)看門狗啟動后,計數(shù)器開始自動計數(shù),在計數(shù)器溢出前如果沒有被復(fù)位,計數(shù)器溢出就會對 CPU 產(chǎn)生一個復(fù)位信號使系統(tǒng)重啟(俗稱 “被狗咬”)。系統(tǒng)正常運行時,需要在看門狗允許的時間間隔內(nèi)對看門狗計數(shù)器清零(俗稱“喂狗“),不讓復(fù)位信號產(chǎn)生。如果系統(tǒng)不出問題,程序能夠按時“喂狗”。一旦程序跑飛,沒有“喂狗”,系統(tǒng)“被咬” 復(fù)位。
WDT相關(guān)接口如下所示:
函數(shù) | 描述 |
---|---|
rt_device_find() | 根據(jù)看門狗設(shè)備設(shè)備名稱查找設(shè)備獲取設(shè)備句柄 |
rt_device_init() | 初始化看門狗設(shè)備 |
rt_device_control() | 控制看門狗設(shè)備 |
rt_device_close() | 關(guān)閉看門狗設(shè)備 |
關(guān)于WDT更詳細的內(nèi)容,請參看官方手冊:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/watchdog/watchdog
2 WDT使用實例
WDT使用起來很簡單。
1、根據(jù)設(shè)備名稱 “wdt” 查找設(shè)備獲取設(shè)備句柄。
2、初始化設(shè)備后設(shè)置看門狗溢出時間。
3、啟動看門狗。
4、喂狗:設(shè)置空閑線程回調(diào)函數(shù),在空閑線程回調(diào)函數(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ù)設(shè)置
這里可以設(shè)置WDT的參數(shù)。
- 使能WDT
2.2 代碼實現(xiàn)
核心代碼如下:
#include < rtthread.h >
#include < rtdevice.h >
#define WDT_DEVICE_NAME "wdt" /* 看門狗設(shè)備名稱 */
static rt_device_t wdg_dev; /* 看門狗設(shè)備句柄 */
static void idle_hook(void)
{
/* 在空閑線程的回調(diào)函數(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ù)設(shè)備名稱查找看門狗設(shè)備,獲取設(shè)備句柄 */
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è)置空閑線程回調(diào)函數(shù) */
rt_thread_idle_sethook(idle_hook);
return ret;
}
/* 導(dǎo)出到 msh 命令列表中 */
MSH_CMD_EXPORT(wdt_sample, wdt sample);
2.3 測試
編譯下載。
如果屏蔽喂狗操作,在終端輸入“wdt_sample”即可進行測試。
執(zhí)行wdt_sample,結(jié)果如下:(一秒后觸發(fā)WDT復(fù)位)
如果定時喂狗,在終端輸入“wdt_sample”即可進行測試。
-
看門狗
+關(guān)注
關(guān)注
10文章
602瀏覽量
72414 -
定時器
+關(guān)注
關(guān)注
23文章
3349瀏覽量
121133 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1502瀏覽量
43770
發(fā)布評論請先 登錄
評論