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);