rtt_IO设备模型(学习笔记)
一、结构介绍
I/O设备管理层:实现对设备驱动程序的封装。应用程序通过IO设备层提供的标准接口访问底层设备。
设备驱动管理层:对同类硬件设备驱动的抽象,将不同厂家的同类设备驱动中相同的部分抽取出来,将不同部分留出接口,有驱动程序实现。
设备驱动层: 一组驱使硬件设备工作的程序,实现访问硬件设备的功能。负责创建和注册I/O设备。
对于相对复杂的设备,比如看门狗、串口设备、IIC、SPI等设备,底层驱动创建设备实例,然后将设备实例首先注册到相应的设备驱动框架中,然后定义设备的类型和其他参数通过函数rt_device_register()注册到I/O设备管理器中。(后边会根据程序进行具体说明)
I/O设备模型
RT-Thread的设备模型式建立在内核对象模型基础之上的,设备被认为是一类对象,被纳入对象管理器的范畴。每个设备对象都是由基对象派生而来,每个具体设备都可以继承父类对象的属性,并派生出其私有属性
其中设备类型的定义(rt_device_class_type)在rtdef.h中以枚举的形式列出。
设备对象的具体定义在rtdef.h中以结构体的形式给出
二、程序运行解析
创建和注册I/O设备
驱动层负责创建设备实例,并注册到I/O设备管理器中,可以通过静态申明的方式创建设备实例,也可以通过函数**rt_device_create()**进行动态创建。
rt_device_t rt_device_create(int type, int attach_size);
//其中 type:设备类型,可以取前面小节列出的设备类型值
// attach_size: 用户数据大小
调用该接口函数时,系统会从动态堆内存中分配一个设备控制块,大小为struct rt_device 和attach_size的和,设备的类型由type设定。
设备被创建后,需要实现它访问硬件的操作方法。
硬件的各个操作方法描述在rtdef.h中进行定义
当动态创建的设备叜需要使用函数rt_device_destroy(rt_device_t device)来进行销毁
设备被创建后,需要注册到I/O设备管理器中,应用程序才能访问,注册设备的函数为rt_device_register(rt_device_t dev, const char* name, rt_uint8_t flags)
flags:设备模式标志 在rtdef.h中定义
#define RT_DEVICE_FLAG_RDONLY 0x001 /* 只读 */
#define RT_DEVICE_FLAG_WRONLY 0x002 /* 只写 */
#define RT_DEVICE_FLAG_RDWR 0x003 /* 读写 */
#define RT_DEVICE_FLAG_REMOVABLE 0x004 /* 可移除 */
#define RT_DEVICE_FLAG_STANDALONE 0x008 /* 独立 */
#define RT_DEVICE_FLAG_SUSPENDED 0x020 /* 挂起 */
#define RT_DEVICE_FLAG_STREAM 0x040 /* 流模式 */
#define RT_DEVICE_FLAG_INT_RX 0x100 /* 中断接收 */
#define RT_DEVICE_FLAG_DMA_RX 0x200 /* DMA 接收 */
#define RT_DEVICE_FLAG_INT_TX 0x400 /* 中断发送 */
#define RT_DEVICE_FLAG_DMA_TX 0x800 /* DMA 发送 */
以IIC设备注册为例进行说明
IIC设备主要有四个文件,其中drv_soft_i2c.c位于底层驱动,主要用来定义i2c的管脚和硬件模式,针对硬件进行各种定义和初始化。
另外三个位于设备驱动管理器中,其中i2c-bit-ops.c主要是对i2c设备驱动框架总线中的各个硬件操作方法进行定义。然后在i2c_core.c中进行设备驱动框架的操作函数进行封装,比如i2c设备总线注册函数rt_i2c_bus_device_register()等,最后在i2c_dev.c中进行i2c设备驱动管理器的初始化,定义I/O设备管理接口函数供上层应用进行调用,并将I2C总线设备类通过rt_device_register()注册到设备基类中。
访问I/O设备
应用程序可以通过I/O设备管理接口来访问硬件设备,设备驱动实现后,应用程序就可以访问该硬件。I/O设备管理接口与I/O设备的操作方法的映射关系。
设备访问示例参考rtt官方文档https://www.rt-thread.org/document/site/programming-manual/device/device/
rtt_IO设备模型(学习笔记)相关推荐
- DMU-单性状重复力模型-学习笔记3
单性状重复力模型 本次主要是演示如何使用DMU分析单性状重复力模型. 重复力模型和动物模型的区别: 不是所有的性状都可以分析重复力模型, 首先重复力模型是动物模型的拓展, 它适合一个个体多个观测值的情 ...
- 文本分类模型学习笔记
文本分类模型学习笔记 TextCNN 模型结构 HAN 模型结构 实验 数据集 预处理 模型内容 模型训练 模型测试 近年来,深度学习模型在计算机视觉和语音识别中取得了显著成果.在自然语言处理中,深度 ...
- 软考网络管理员-华为设备命令学习笔记
华为设备命令学习笔记 文章目录 一. 网络设备基础知识 1.1 网络设备操作系统 1.2 常见设备配置方式 1.3 基础知识 二. 基础命令与二层设备配置 2.1 配置模式 2.2 基本命令 2.3 ...
- 概率图模型学习笔记:HMM、MEMM、CRF
作者:Scofield 链接:https://www.zhihu.com/question/35866596/answer/236886066 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...
- Heckman两阶段模型学习笔记
有近两周的时间都在学习Heckman两阶段模型.网上看了一些资料,在CSDN里找到了几篇珍贵的学习笔记,有一篇相当于带我入了门学习笔记 | Heckman两阶段法介绍_Claire_chen_jia的 ...
- ARIMA模型学习笔记
ARIMA模型学习笔记 目录 ARIMA模型学习笔记 ARIMA模型 时间序列平稳性 什么是平稳性 严平稳 弱平稳 平稳性检验 ADF检验(Augmented Dickey-Fuller test) ...
- 生成模型学习笔记:从高斯判别分析到朴素贝叶斯
机器之心专栏 作者:张威 翻译:燕子石 本文是哥伦比亚大学研究生张威在生成模型上的学习笔记,由毕业于新西兰奥克兰理工大学的燕子石翻译.机器之心之前曾介绍过张威所写的吴恩达<机器学习>课程的 ...
- 图神经网络(GNNs)模型学习笔记与总结
GCN学习笔记 1 基于谱域的GCN 1.1 知识要点: 1.2 Spectral-based models 1.2.1 Spectral Network 1.2.2 ChebNet(2016) 1. ...
- MNL——多项Logit模型学习笔记(二)
本节将会通过案例举例,介绍Logit模型的建模思路和过程 内容为摘抄他人学习资料的个人学习笔记,如有侵权则删 1.正确打开/解读Logit模型系数的方式 本节的具体内容在笔记里不详细表示了,大家在软件 ...
最新文章
- Dynamics 365新功能:可编辑的网格(行内编辑)
- boost::multiprecision模块gmp相关的测试程序
- 把Rust和Servo引入Firefox
- 【kafka】kafka 生态系统 Ecosystem
- 技术文档(12)-- Linux权限总结
- EDI系统-AS2传输常见问题
- hive窗口函数最全总结
- 【C++】右值引用、移动构造函数
- 前端js常用剪贴板(复制粘贴)操作和应用,以及navigator.clipboard新粘贴板API使用
- errors and 0 warnings potentially fixable with the `--fix` option
- 班级日常工作管理系统
- 【网易笔试】小易最近在数学课上学习到了集合的概念
- oracle 字段别名
- Hadoop 3.x 笔记(配置、命令、脚本、重要图示、代码实现)
- java提出word和pdf等文件的信息
- 苹果报告问题_郭明錤:入门款iPhone 12的相机镜头供应商遇到质量问题,但不会影响新品的发布时间...
- 【SQLserver】 SQLServer 服务器主体无法在当前安全上下文下访问数据库
- python软件下载安装百度网盘-【python编程+第四版】百度云下载 - 云盘精灵
- 查查移动端app运行闪退的原因
- 基于JAVA研究生实验室综合管理系统计算机毕业设计源码+系统+lw文档+部署(2)