RTThread自定义IO设备接口
RT-Thread 提供了一套 I/O 设备模型框架方便用户在自定义一些特殊IO设备,提供统一的IO设备创建、注册、接口定义、注销等设备管理实现设备驱动程序的封装,应用程序通过 I/O 设备层提供的标准接口访问底层设备,设备驱动程序的升级、更替不会对上层应用产生影响。
RT-Thread 自定义IO设备用到的功能函数,存放在rt-thread/src/device.c源码文件下,相关宏定义主要在rt-thread/src/rtdef.h源文件中。
一、 源码示例【1】,IO设备创建与注册
#include <rtthread.h>
#include <rtdef.h>
rt_err_t init_test(rt_device_t dev)
{
rt_kprintf("init_test run!
");
return 0;
}
rt_err_t open_test(rt_device_t dev, rt_uint16_t oflag)
{
rt_kprintf("open_test run!
");
return 0;
}
rt_err_t close_test(rt_device_t dev)
{
rt_kprintf("close_test run!
");
return 0;
}
static int iodef_reg_sample(int argc, char *argv[])
{
rt_device_t dev = rt_device_create(RT_Device_Class_Char,64);
if(dev==RT_NULL)
{
rt_kprintf("rt_device_create failed!
");
return RT_ERROR;
}
//I/O 设备的操作方法的映射,更多参考rt_device_t结构体定义
dev->init = init_test;
dev->open = open_test;
dev ->close = close_test;
rt_err_t ret = rt_device_register(dev,"devtest",RT_DEVICE_FLAG_RDWR);
if(ret!=RT_EOK)
{
rt_kprintf("rt_device_register failed!
");
return RT_ERROR;
}
return RT_EOK;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(iodef_reg_sample, io define for user register test example);
二、源码示例【2】,已注册IO设备功能接口调用
#include <rtthread.h>
#include <rtdef.h>
static int iodef_use_sample(int argc, char *argv[])
{
rt_device_t dev = rt_device_find("devtest");
if(dev==RT_NULL)
{
rt_kprintf("rt_device_find failed!
");
return RT_ERROR;
}
rt_device_init(dev);
rt_device_open(dev, RT_DEVICE_FLAG_RDWR);
rt_device_close(dev);
return RT_EOK;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(iodef_use_sample, io define for user and be used test example);
三、源码示例【3】,注销自定义IO设备
#include <rtthread.h>
#include <rtdef.h>
static int iodef_ureg_sample(int argc, char *argv[])
{
rt_device_t dev = rt_device_find("devtest");
if(dev==RT_NULL)
{
rt_kprintf("rt_device_find failed!
");
return RT_ERROR;
}
rt_err_t ret = rt_device_unregister(dev);
if(ret!=RT_EOK)
{
rt_kprintf("rt_device_unregister failed!
");
return RT_ERROR;
}
return RT_EOK;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(iodef_ureg_sample, io define for user unregister test example);
四、效果展示
