RT-Thread编程指南 要点摘录(一)——内核基础

——仅为新手学习笔记,会定期完善但不保证其正确性——

1RT-Thread简介

RT-Thread是一款开源嵌入式实时操作系统,主要采用 C 语言编写。

为什么采用RTOS

一个典型的简单程序会被设计成一个串行的系统运行,按照准确的指令步骤一次一个指令的运行;
但是对于需要在固定的时间内“同时”处理多个输入输出的复杂实时应用则不可行:单线程的编程方式不但会使代码逻辑复杂、容易出错,同时也很难发挥出MCU的处理能力。
因此,实时软件应用程序应该设计成一个并行的系统,让多线程并行,充分发挥系统资源的能力。

使用RTOS的好处:

  1. 提升开发效率
  2. 提升代码可读性和可维护性
  3. 增强可移植性
  4. 提升硬件资源效率

IoT OS

物联网(Internet Of Things,IoT)操作系统是指以操作系统内核(可以是 RTOS、Linux 等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台。
RT-Thread 就是一个 IoT OS。

RT-Thread的架构

  1. 内核层:RT-Thread 的核心部分
  2. 组件与服务层:基于 RT-Thread 内核之上的上层软件
  3. RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件

2内核基础

内核由内核库实时内核组成。
内核库:是为了保证内核能够独立运行的一套小型的类似 C 库的函数实现子集。

2.2启动流程

(MDK-ARM为例)系统启动后先从汇编代码startup_stm32f103xe.s 开始运行,然后跳转到 C 代码,进行 RT-Thread 系统功能初始化,最后进入用户程序入口 main()。

2.4自动初始化机制

初始化函数只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。

2.5内核对象模型

此为本章重点部分

内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口。

内核对象包括线程,信号量,互斥量,事件,邮箱,消息队列和定时器,内存池,设备驱动。

内核对象分为静态内核对象和动态内核对象。
静态对象会占用 RAM 空间,不依赖于内存堆管理器,内存分配时间确定; 动态对象则依赖于内存堆管理器,运行时申请 RAM 空间,当对象被删除后,占用的 RAM 空间被释放。

链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

RT-Thread 采用内核对象管理系统来访问 / 管理所有内核对象。
对象容器对象链表组成。
对象容器中包含了每类内核对象的信息。
对象容器给每类内核对象分配了一个链表,所有同一类型的内核对象都被链接到该链表上。

IPC:Inter-Process Communication,进程间通信。在 RT-Thread 实时操系统中,IPC对象的作用是进行线程间同步与通信。

各类内核对象具有派生和继承的关系。每一种具体对象是抽象对象的派生,继承了基本对象的属性并在此基础上扩展了与自己相关的属性。

对象控制块中,定义了通用的数据结构,用来保存各种对象的共同属性,各种具体对象只需要在此基础上加上自己的某些特别的属性,就可以清楚的表示自己的特征。
对象控制块 rt_object 派生出来的有:线程对象、内存池对象、定时器对象、设备对象和 IPC对象;再由 IPC 对象派生出信号量、互斥量、事件、邮箱与消息队列、信号等对象。

内核对象的管理方式

对于静态内核对象,通用的管理方式有:初始化、脱离
对于动态内核对象,通用的管理方式有:分配、删除
初始化和分配都会将相应的对象节点插入到对象容器的对象链表中,但是后者需要先从内存堆中分配对象所对应大小的内存空间,并进行初始化。
脱离和删除都会从从内核对象容器链表上删除相应的对象节点,但是前者不会释放对象占用的内存。

V0.1 2020.3.1
V0.2 2020.3.3 增加RT-Thread简介

你可能感兴趣的:(RT-Thread)