一、结构介绍

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设备模型(学习笔记)相关推荐

  1. DMU-单性状重复力模型-学习笔记3

    单性状重复力模型 本次主要是演示如何使用DMU分析单性状重复力模型. 重复力模型和动物模型的区别: 不是所有的性状都可以分析重复力模型, 首先重复力模型是动物模型的拓展, 它适合一个个体多个观测值的情 ...

  2. 文本分类模型学习笔记

    文本分类模型学习笔记 TextCNN 模型结构 HAN 模型结构 实验 数据集 预处理 模型内容 模型训练 模型测试 近年来,深度学习模型在计算机视觉和语音识别中取得了显著成果.在自然语言处理中,深度 ...

  3. 软考网络管理员-华为设备命令学习笔记

    华为设备命令学习笔记 文章目录 一. 网络设备基础知识 1.1 网络设备操作系统 1.2 常见设备配置方式 1.3 基础知识 二. 基础命令与二层设备配置 2.1 配置模式 2.2 基本命令 2.3 ...

  4. 概率图模型学习笔记:HMM、MEMM、CRF

    作者:Scofield 链接:https://www.zhihu.com/question/35866596/answer/236886066 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...

  5. Heckman两阶段模型学习笔记

    有近两周的时间都在学习Heckman两阶段模型.网上看了一些资料,在CSDN里找到了几篇珍贵的学习笔记,有一篇相当于带我入了门学习笔记 | Heckman两阶段法介绍_Claire_chen_jia的 ...

  6. ARIMA模型学习笔记

    ARIMA模型学习笔记 目录 ARIMA模型学习笔记 ARIMA模型 时间序列平稳性 什么是平稳性 严平稳 弱平稳 平稳性检验 ADF检验(Augmented Dickey-Fuller test) ...

  7. 生成模型学习笔记:从高斯判别分析到朴素贝叶斯

    机器之心专栏 作者:张威 翻译:燕子石 本文是哥伦比亚大学研究生张威在生成模型上的学习笔记,由毕业于新西兰奥克兰理工大学的燕子石翻译.机器之心之前曾介绍过张威所写的吴恩达<机器学习>课程的 ...

  8. 图神经网络(GNNs)模型学习笔记与总结

    GCN学习笔记 1 基于谱域的GCN 1.1 知识要点: 1.2 Spectral-based models 1.2.1 Spectral Network 1.2.2 ChebNet(2016) 1. ...

  9. MNL——多项Logit模型学习笔记(二)

    本节将会通过案例举例,介绍Logit模型的建模思路和过程 内容为摘抄他人学习资料的个人学习笔记,如有侵权则删 1.正确打开/解读Logit模型系数的方式 本节的具体内容在笔记里不详细表示了,大家在软件 ...

最新文章

  1. Dynamics 365新功能:可编辑的网格(行内编辑)
  2. boost::multiprecision模块gmp相关的测试程序
  3. 把Rust和Servo引入Firefox
  4. 【kafka】kafka 生态系统 Ecosystem
  5. 技术文档(12)-- Linux权限总结
  6. EDI系统-AS2传输常见问题
  7. hive窗口函数最全总结
  8. 【C++】右值引用、移动构造函数
  9. 前端js常用剪贴板(复制粘贴)操作和应用,以及navigator.clipboard新粘贴板API使用
  10. errors and 0 warnings potentially fixable with the `--fix` option
  11. 班级日常工作管理系统
  12. 【网易笔试】小易最近在数学课上学习到了集合的概念
  13. oracle 字段别名
  14. Hadoop 3.x 笔记(配置、命令、脚本、重要图示、代码实现)
  15. java提出word和pdf等文件的信息
  16. 苹果报告问题_郭明錤:入门款iPhone 12的相机镜头供应商遇到质量问题,但不会影响新品的发布时间...
  17. 【SQLserver】 SQLServer 服务器主体无法在当前安全上下文下访问数据库
  18. python软件下载安装百度网盘-【python编程+第四版】百度云下载 - 云盘精灵
  19. 查查移动端app运行闪退的原因
  20. 基于JAVA研究生实验室综合管理系统计算机毕业设计源码+系统+lw文档+部署(2)

热门文章

  1. 「HTML+CSS」--自定义加载动画【027】
  2. frp客户端配置文件说明
  3. Linux学习基本步骤
  4. Objects365数据简介及数据转换为XML格式
  5. 对坐标的曲面积分(第二类曲面积分)
  6. mac OSx 打包成dmg文件
  7. java快速开发平台
  8. 07_数据降维,降维算法,主成分分析PCA,NMF,线性判别分析LDA
  9. Python3之旅之计算机基础知识
  10. Windows NPS搭建(NPS配置交换机radius认证登录)