Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread活动
学习《RT-Tread 设备驱动开发指南》之三 I/O设备模型与分类
发布于 2023-03-03 09:44:42 浏览:862
订阅该版
RT- Thread 的I/O设备模型(简称“设备模型”)是建立在内核对象模型基础之上的,设备被认为是一类对象,被纳入对象管理的范畴。每个设备对象都是由基对象派生而来的,每个具体设备都可以继承其父类对象的属性,并派出其私有属性。 ![设备对象的继承和派生关系.png](https://oss-club.rt-thread.org/uploads/20230303/be8f58bc88e1e74b906ce2f02911f825.png.webp) 设备的对象struct rt_device的具体定义如下所示: ```c 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类型枚举如下。 ```c 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的对象。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Lu_盼盼
这家伙很懒,什么也没写!
文章
35
回答
19
被采纳
0
关注TA
发私信
相关文章
1
(苏州站)RT-Thread物联网开发者沙龙【已结束】
2
(成都站)RT-Thread物联网开发者沙龙
3
(深圳站)RT-Thread物联网开发者沙龙
4
(西安站)RT-Thread物联网开发者沙龙
5
成都站2018 RT-Thread开发者沙龙回顾及PPT下载
6
2018 RT-Thread物联网开发者沙龙(北京站)
7
2018 RT-Thread物联网开发者沙龙(南京站)
8
第十三届研电赛RT-Thread企业专项奖发布通知
9
RT-Thread应用作品征集大赛开始啦!
10
你的投票将决定RT-Thread官网应该优先准备的文档是哪些
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部