RT-Thread的设备模型

  • Post author:
  • Post category:其他


RTT内核对象——设备

RT-Thread有多种内核对象,其中设备device就是其中一种。

内核继承关系图如下:

设备继承关系图如下:

I/O 设备模型框架

应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互。


I/O 设备管理层

:实现了对设备驱动程序的封装。设备驱动程序的升级、更替不会对上层应用产生影响, 从而降低了代码的耦合性、复杂性,提高了系统的可靠性。


设备驱动框架层

:对同类硬件设备驱动的抽象, 将不同厂家的同类硬件设备驱动中相同的部分抽取出来。


设备驱动层

:是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。这一层是与硬件有关的,不同的芯片的同种外设驱动是不同的,STM32的GPIO驱动与NXP的GPIO驱动是不同的。这一层负责创建与注册I/O设备,对于操作逻辑简单的设备,可以不经过设备驱动框架层。

设备的两种注册方式

1、 对于操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到 I/O 设备管理器中:

2、 对于另一些设备,如看门狗等,则会将创建的设备实例先注册到对应的设备驱动框架中,再由设备驱动框架向 I/O 设备管理器进行注册 :

I/O 设备模型框架补充图

IO设备模型

访问IO设备

应用程序通过 I/O 设备管理接口来访问硬件设备,当设备驱动实现后,应用程序就可以访问该硬件。I/O 设备管理接口与 I/O 设备的操作方法的映射关系下图所示:

设备对象的管理

RT-Thread中有那么多种内核对象,它是怎么管理这些内核对象呢?其使用

对象容器

来管理这些对象。这个对象容器给每一类内核对象分配一个链表,每当创建一个对象实体,这个对象实体就被链接到对应的链表上,如:

这个对象容器对应到代码中是一个

struct rt_object_information

类型的结构体数组

rt_object_container[RT_Object_Info_Unknown]

初始化对象列表节点头里面的

next



prev

两个节点指针分别指向自身,如:

若创建两个线程对象,则对象容器里变为:

rt-thread中内核对象的组织形式如下:

在这里插入图片描述

参考资料:


I/O 设备模型


RT-Thread 文档中心


【RT-Thread笔记】IO设备模型及PIN设备



版权声明:本文为booksyhay原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。