内核入门(一)——初识RT-Thread

一、RT-Thread简介

RT-Thread是一个嵌入式实时多线程操作系统,具有非常强的可伸缩能力:从一个可以运行在ARM Cortex-M0芯片上的极小内核,到中等的ARM Cortex-M3/4/7系统,甚至是运行于MIPS32、ARM Cortex-A系列处理器上功能丰富系统。
RT-Thread包含了一个自有的、传统的硬实时内核,也包含文件系统、图形库等中间件组件,同时具备低功耗、安全、通信协议支持和云端连接能力的软件平台。
RT-Thread的架构如下图所示:

官网:https://www.rt-thread.org/
论坛:https://www.rt-thread.org/qa/forum.php
Github:https://github.com/RT-Thread/rt-thread

二、内核基础

官网的内核入门视频就是主要讲解RT-Thread内核的实现方法,也是其他章节的基础。其中内核和底层结构如下图所示。

关于内核,官方的三份资料有详细的讲解,分别为《RT-Thread 内核实现与应用开发实战指南》、《RT_Thread编程指南》和《内核试验手册》。第一份虽然是针对野火STM32系列的,但是毕竟是通用的,讲解也是最详细的;第二份简单而全面,完全可以作为编程时的参考工具书;第三份就是试验参考书,可以用来自己练习,加深理解。

2.1 内核对象模型

RT-Thread 内核采用面向对象的设计思想进行设计,系统级的基础设施都是一种内核对象,例如线程,信号量,互斥量,定时器等。

从内存分配上,内核对象分为两类:静态内核对象和动态内核对象。
静态内核对象通常放在RW 段和ZI 段中,在系统启动后在程序中初始化;会占用RAM 空间,不依赖于内存堆管理器,内存分配时间确定。
动态内核对象则是从内存堆中创建的,而后手工做初始化,依赖于内存堆
管理器,运行时申请RAM 空间,当对象被删除后,占用的RAM 空间被释放。

从功能定义上,内核对象包括:线程,信号量,互斥量,事件,邮箱,消息队列和定时器,内存池,设备驱动等。对象容器中包含了每类内核对象的信息,包括对象类型,大小等。对象容器给每类内核对象分配了一个链表,所有的内核对象都被链接到该链表上,如图RT-Thread 的内核对象容器及链表如下图所示:

其中各类内核对象的派生和继承关系:

2.2 内核配置

RT-Thread 的一个重要特性是高度可裁剪性,支持对内核进行精细调整,对组件进行灵活拆卸。配置主要是通过修改工程目录下的rtconfig.h 文件来进行,用户可以通过打开/ 关闭该文件中的宏定义来对代码进行条件编译,最终达到系统配置和裁剪的目的。

2.3 内存分布和管理

一般MCU 包含的存储空间有:片内Flash 与片内RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在MCU 不同的存储区。

2.4 启动流程

2.4.1 $Sub$$$Super$$的使用

在ARM官方支持文档中有该项说明:

当系统中存在一个无法修改的函数(比如存在于外部库、ROM中),我们就需要用到$Sub$$$Super$$来对原函数进行拓展(静态链接)。
$Sub$$ foo
在原函数foo()的基础上增添新函数(新功能),可以用在原函数的前面或后面。
$Super$$ foo
即未经修补的原函数foo(),使用该命令直接调用原函数。

2.4.2 RT-Thread启动过程

启动流程如下图所示,具体可参考工程源码,在《RT_Thread编程指南》中也有详述。

参考:https://www.cnblogs.com/rocotona/p/11162233.html

三、RT-Thread源码文件

当我们下载源码后,可以看到以下目录结构:

bsp——板级支持文件,即各类芯片开发板的支持文件。例如下一级的stm32l475-atk-pandora文件夹,就是正点原子潘多拉开发板的支持文件,里面包含了CMSIS文件、HAL库、板级支持包等,有一个现成的LED闪烁工程。另外,我们可以使用scons –dist命令,在该路径下构建自己的工程。
components——RT-Thread的各种组件,比如命令行、文件系统、网络协议栈等.
documentation——说明文档,比如代码风格、版本说明等。
examples——一些示例代码。
include——RT-Thread内核头文件。
libcpu——各类芯片/内核移植代码。
src——各类RT-Thread内核源代码。
tools——使用SCons编译构建时的所需相关文件。

四、工程文件

利用bsp文件夹可以构建自己的工程。
新生成的工程文件目录结构:

applications——用户应用代码。
drivers——RT-Thread的驱动,不同平台底层驱动的具体实现。
libraries——STM32芯片固件库(CMSIS、HAL库)。
rt-thread——RT-Thread的源代码,内部文件同源码文件类似。

猜你喜欢

转载自blog.csdn.net/qq_33604695/article/details/105373905
今日推荐