IO設備驅動架構:
一 在驅動開發階段:
- 通過靜態或動態方法創建設備,對應的有銷毀設備rt_device_t rt_device_create(int type, int attach_size);/void rt_device_destroy(rt_device_t device);
- 通過注冊函數注冊到設備管理器中或設備驅動框架rt_err_t rt_device_register(rt_device_t dev, const char* name, rt_uint8_t flags);注冊后設備激活,才能被設備管理器搜索到並使用。應當避免重復注冊已經注冊的設備,以及注冊相同名字的設備;取消注冊rt_err_t rt_device_unregister(rt_device_t dev);
二應用程序開發階段:
- 通過配置構建工具,已經建立工程所對應的一些外設,調用相關驅動
- 應用程序通過調用查找、初始化、打開、關閉、讀、寫、控制接口操作設備接口,向下調用驅動中的對應操作。

看門狗的喂狗一般放在空閑任務鈎子函數里面或者一個定時任務里面。
rt_thread_idle_sethook(idle_hook);
static void idle_hook(void) { /* 在空閑線程的回調函數里喂狗 */ rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL); }
rt_device_t rt_device_find(const char* name);
rt_err_t rt_device_init(rt_device_t dev);
rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg);
命令控制字可取如下宏定義值:
#define RT_DEVICE_CTRL_WDT_GET_TIMEOUT (1) /* 獲取溢出時間 */ #define RT_DEVICE_CTRL_WDT_SET_TIMEOUT (2) /* 設置溢出時間 */ #define RT_DEVICE_CTRL_WDT_GET_TIMELEFT (3) /* 獲取剩余時間 */ #define RT_DEVICE_CTRL_WDT_KEEPALIVE (4) /* 喂狗 */ #define RT_DEVICE_CTRL_WDT_START (5) /* 啟動看門狗 */ #define RT_DEVICE_CTRL_WDT_STOP (6) /* 停止看門狗 */
rt_err_t rt_device_close(rt_device_t dev);
