RT-Thread的I/O设备模型与分类

电子说

1.2w人已加入

描述

RT- Thread 的I/O设备模型(简称“设备模型”)是建立在内核对象模型基础之上的,设备被认为是一类对象,被纳入对象管理的范畴。

每个设备对象都是由基对象派生而来的,每个具体设备都可以继承其父类对象的属性,并派出其私有属性。

RT-Thread

设备的对象struct rt_device的具体定义如下所示:

strcut rt_device{
struct rt_object parent; /内核对象基类*/
enum rt_device_classe_type type; / 设备类型 /
rt_uint16_t flag; / 设备参数 /
rt_uint16_t open_flag; / 设备打开标志 /
rt_uint8_t ref_count; / 设备被引用的次数 /
rt_uint8_t device_id; / 设备ID,范围为0-255 /
/ 数据收发回调函数 /
rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);
rt_err_t (*tx_complete)(rt_device_t dev, void *buffer);
const struct rt_device_ops *ops; / 设备操作方法 /
/ 设备的私有数据 /
void *user_data;
};
typedef struct rt_device *rt_device_t;
}

rt_device_class_type用于RT-Thread对设备进行分类,在每类设备执行注册后,系统会将它他们注册为相应类别的设备。rt_device_class_type类型枚举如下。

enum rt_device_class_type
{
RT_Device_class_char = 0, /* 字符设备 /
RT_Device_class_Block, /
块设备 /
RT_Device_class_NetIf, /
网络设备 /
RT_Device_class_MTD, /
MTD设备 /
RT_Device_class_CAN, /
CAN设备 /
RT_Device_class_RTC, /
RTC设备 /
RT_Device_class_Sound, /
声音设备 /
RT_Device_class_Graphic, /
图形设备 /
RT_Device_class_I2CBUS, /
I2C设备 /
RT_Device_class_USBDevice, /
USB从设备 /
RT_Device_class_USBHost, /
USB主设备 /
RT_Device_class_SPIBUS, /
SPI总线设备 /
RT_Device_class_SPIDevice, /
SPI设备 /
RT_Device_class_SDIO, /
SDIO总线设备 /
RT_Device_class_PM, /
低功耗设备 /
RT_Device_class_Pipe, /
管道设备 /
RT_Device_class_Portal, /
双向管理设备 /
RT_Device_class_Timer, /
定时器设备 /
RT_Device_class_Miscellaneous, /
杂项设备 /
RT_Device_class_Sensor, /
传感器设备 /
RT_Device_class_Touch, /
触摸设备 /
RT_Device_class_Unknown /
未知设备 */
};

其中,字符设备、块设备是常用的设备类型,它们的分类依据是设备与系统之间的数据传输处理方式。字符设备允许非结构化的数据传输,通常数据传输采用串行的形式,每次一字节。字符设备通常是一些简单设备,如串口、按键。

块设备每次传输一个数据块,例如每次传输512字节数据。这个数据块大小是硬件强制性要求的,数据块可能使用某类数据接口或某些强制性的传输协议,否则就可能发生错误。因此,有时块设备驱动程序进行读/写操作时必须执行附加的工作。

当系统服务需要进行大理数据的写操作时,设备驱动程序必须将数据划分为多个包,每个包采用设备指定的数据尺寸。而在实际操作中,最后一部分数据尺寸有可能小于正的设备块尽尺寸。最后需要处理“小块”的操作。

今天主要学习了设备对象结构体rt_device,里面包含的对象结构,还有学习了rt_device的分类枚举rt_device_class_type。里面定义了0-21的对象。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分