RT-Thread的设备模型

 RTT内核对象——设备

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

内核继承关系图如下:

RT-Thread的设备模型_第1张图片

设备继承关系图如下:

RT-Thread的设备模型_第2张图片

I/O 设备模型框架

RT-Thread的设备模型_第3张图片

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

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

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

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

设备的两种注册方式

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

RT-Thread的设备模型_第4张图片

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

RT-Thread的设备模型_第5张图片

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

RT-Thread的设备模型_第6张图片

IO设备模型

RT-Thread的设备模型_第7张图片

访问IO设备

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

RT-Thread的设备模型_第8张图片

设备对象的管理

RT-Thread中有那么多种内核对象,它是怎么管理这些内核对象呢?其使用对象容器来管理这些对象。这个对象容器给每一类内核对象分配一个链表,每当创建一个对象实体,这个对象实体就被链接到对应的链表上,如:

RT-Thread的设备模型_第9张图片

这个对象容器对应到代码中是一个struct rt_object_information类型的结构体数组rt_object_container[RT_Object_Info_Unknown]

初始化对象列表节点头里面的nextprev两个节点指针分别指向自身,如:

RT-Thread的设备模型_第10张图片

 

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

RT-Thread的设备模型_第11张图片

rt-thread中内核对象的组织形式如下:
RT-Thread的设备模型_第12张图片

 

参考资料:

I/O 设备模型

RT-Thread 文档中心

  

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

你可能感兴趣的:(RT-Thread,微笔记,单片机,stm32,驱动开发)