0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:Lu_盼盼 作者:Lu_盼盼 2023-10-11 17:12 次阅读

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

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

1.jpg

设备的对象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的对象。

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

    关注

    53

    文章

    8271

    浏览量

    146980
  • 串口设备
    +关注

    关注

    0

    文章

    16

    浏览量

    8615
  • RT-Thread
    +关注

    关注

    31

    文章

    1305

    浏览量

    40364
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(十、全面认识 I/O 设备模型

    学完 RT-Thread 内核,从本文开始熟悉了解 RT-Thread I/O 设备管理相关知识。
    的头像 发表于 06-30 10:38 4258次阅读
    <b class='flag-5'>RT-Thread</b>记录(十、全面认识 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>设备</b><b class='flag-5'>模型</b>)

    RT-Thread记录(十一、UART设备—源码解析)

    一文带你深入理解 RT-Thread I/O 设备模型 — UART 设备源码分析。
    的头像 发表于 07-01 11:24 5610次阅读
    <b class='flag-5'>RT-Thread</b>记录(十一、UART<b class='flag-5'>设备</b>—源码解析)

    RT-Thread记录(十四、I/O 设备模型之ADC设备

    我曾经考虑过把 RT-Thread 常用的设备都写完,其实通过前面的《全面认识 RT-Thread I/O
    的头像 发表于 07-04 12:28 4495次阅读
    <b class='flag-5'>RT-Thread</b>记录(十四、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>设备</b><b class='flag-5'>模型</b>之ADC<b class='flag-5'>设备</b>)

    RT-Thread记录(十二、UART设备—使用测试)

    从 UART 设备开始学会使用 RT-Thread I/O 设备模型
    的头像 发表于 07-02 12:42 5091次阅读
    <b class='flag-5'>RT-Thread</b>记录(十二、UART<b class='flag-5'>设备</b>—使用测试)

    RT-Thread记录(十三、I/O 设备模型之PIN设备

    讲完UART设备之后,我们已经熟悉RT-Thread I/O 设备模型了,回头看看基本的 PIN
    的头像 发表于 07-03 11:28 4910次阅读
    <b class='flag-5'>RT-Thread</b>记录(十三、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>设备</b><b class='flag-5'>模型</b>之PIN<b class='flag-5'>设备</b>)

    基于RT-Thread的SPI通讯

    驱动层的驱动。(rt-thread设备 I/O 模型设备管理层、
    的头像 发表于 08-22 09:28 1781次阅读

    RT-Thread内核简介

    RT-Thread 内核简介前言1、RT-Thread 的架构2、RT-Thread 的内核3、RT-Thread 内核功能部分线程调度时钟管理线程间同步线程间通信内存管理
    发表于 08-06 07:44

    RT-Thread 的 IO 设备模型框架是由哪些部分组成的呢

    RT-ThreadI/O 设备模型框架是由哪些部分组成的呢?接下来由小编给大家详细介绍一下。1、R
    发表于 03-11 18:17

    RT-Thread AI kit开源:轻松实现一键部署AI模型RT-Thread

    RT-AK 是 RT-Thread 团队为 RT-Thread 实时操作系统所开发的 AI 套件,能够一键将 AI 模型部署到 RT-Thread
    发表于 01-25 18:18 3次下载
    <b class='flag-5'>RT-Thread</b> AI kit开源:轻松实现一键部署AI<b class='flag-5'>模型</b>至 <b class='flag-5'>RT-Thread</b>

    RT-Thread设备模型框架及创建注册设备的实现

    RT-Thread设备模型框架及创建注册设备的实现方式介绍如下:
    的头像 发表于 05-28 10:38 2230次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>设备</b><b class='flag-5'>模型</b>框架及创建注册<b class='flag-5'>设备</b>的实现

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    RT-Thread文档_I/O 设备模型

    RT-Thread文档_I/O 设备模型
    发表于 02-22 18:31 0次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>设备</b><b class='flag-5'>模型</b>

    RT-Thread文档_I2C 总线设备

    RT-Thread文档_I2C 总线设备
    发表于 02-22 18:35 0次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>I</b>2C 总线<b class='flag-5'>设备</b>

    RT-Thread文档_SPI 设备

    RT-Thread文档_SPI 设备
    发表于 02-22 18:36 2次下载
    <b class='flag-5'>RT-Thread</b>文档_SPI <b class='flag-5'>设备</b>

    RT-Thread文档_Pulse Encoder 设备

    RT-Thread文档_Pulse Encoder 设备
    发表于 02-22 18:39 1次下载
    <b class='flag-5'>RT-Thread</b>文档_Pulse Encoder <b class='flag-5'>设备</b>