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设备