一、RT - Thread 简介

1.1 RT-Thread 概述

RT-Thread(Real Time-Thread,实时线程)是一款国产开源物联网操作系统。其命名源于RTOS中的任务更类似于通用操作系统中的线程(Thread),且系统支持基于优先级的抢占式任务调度算法,调度器时间复杂度为O(1),故命名为 RT-Thread。

1.2 RT-Thread 的作用

随着 MCU 性能提升、业务功能复杂化,裸机开发的弊端愈发明显:架构松散难扩展、过度依赖中断导致系统不稳定、对开发人员要求极高。
在这里插入图片描述

RT-Thread 的核心价值就是向下统一管理所有硬件资源,向上提供标准化的 API 接口和软件服务,让系统中所有任务在内核的统一管理、同步和调度下有序运行。

使用 RT-Thread 进行嵌入式项目开发,可以带来以下优势:

  • 支持任务并发处理,适配复杂业务场景

  • 模块化架构设计,便于扩展新的功能模块

  • 分层解耦的设计思路,破解复杂应用开发难点

  • 标准化的 API 接口,增强代码的跨平台可移植性

  • 丰富的组件和软件包生态,显著节省软件开发周期

二、RT-Thread 版本

RT-Thread 针对不同的应用场景,提供了三个核心主版本,分别是 RT-Thread 标准版、RT-Thread Nano 和 RT-Thread Smart。

2.1 RT-Thread 标准版

RT-Thread 标准版(也称为 RT-Thread 全功能版本),,是一套完整的 IoT OS,它由内核层、组件和服务层、IOT 框架层、文件系统、图形库、设备框架等组成。内置完整的中间件组件,具备低功耗、高安全性、多通信协议支持和云端连接能力。
在这里插入图片描述
其软件架构分为以下核心部分:

  • 内核层: RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。

  • 组件与服务层: 基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。

  • RT-Thread 软件包: 运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。

2.2 RT-Thread Nano

RT-Thread Nano 是一款极简的硬实时内核,其内存资源占用极小,功能包括任务管理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。
在这里插入图片描述

2.3 RT-Thread Smart

RT-Thread Smart采用混合微内核架构,支持用户态/内核态分离,具备完整的用户态环境,启动时间<500ms,中断延时<1μs,已全面适配RISC-V等架构。

特性 标准版 Nano Smart
定位 完整IoT OS 极简内核 混合微内核
RAM需求 8KB+ 3KB+ 1.9MB+
用户态支持
适用场景 复杂物联网 资源受限设备 高端处理器/安全应用
启动时间 3-5秒 <100ms <500ms

三、RT-Thread 设计思想

RT-Thread 的设计围绕嵌入式实时操作系统的核心需求展开,在任务调度、启动流程、内核管理、调试工具等方面做了针对性的优化设计,兼顾实时性、易用性、可扩展性

3.1 任务调度

在这里插入图片描述

RT-Thread 原生支持多任务并发,在单核 MCU 上通过线程调度器实现任务的宏观并行、微观串行执行,是系统实现多任务处理的核心,其任务调度具备三大核心特性:

优先级系统

  • 最大支持 256级优先级(0~255),数值越小,优先级越高

  • 可配置为8/32/256级,Cortex-M系列通常配置32级

  • 0级为最高优先级,255级预留给空闲线程(idle 线程)

O(1)调度算法

调度器采用位图+双向链表的底层数据结构,通过 rt_thread_priority_tablert_thread_ready_priority_group 实现常数时间复杂度的最高优先级就绪线程查找,保证调度的实时性。

    /* 就绪线程优先级表 */
    rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];

    /* 获取当前最高优先级就绪线程 */
    highest_priority_thread = rt_list_entry(
        rt_thread_priority_table[highest_ready_priority].next,
        struct rt_thread,
        tlist);

时间片轮转

针对相同优先级的线程,采用Round-Robin(时间片轮转) 调度策略,线程的单次运行时长可通过系统 tick 参数灵活配置,保证相同优先级任务的公平执行。

3.2 启动流程

RT-Thread 采用无侵入式的初始化设计,系统的核心初始化操作全部在main()函数之前完成,开发者无需关注底层初始化细节,可直接在main()中编写业务应用代码。

同时,RT-Thread 提供自动初始化机制:开发者仅需通过指定宏定义声明初始化函数,该函数就会在系统启动的对应阶段自动执行,无需在应用代码中显式调用,大幅简化了初始化代码的编写。

针对系统启动的不同层级,RT-Thread 提供了 6 个有序的宏接口,各接口的执行阶段和功能如下:

初始化顺序 宏接口 执行阶段 描述
1 INIT_BOARD_EXPORT(fn) 板级初始化阶段 最底层硬件初始化,如系统时钟、GPIO、串口、晶振等硬件外设的基础配置
2 INIT_PREV_EXPORT(fn) 预初始化阶段 无硬件依赖的纯软件初始化,如数据结构初始化、全局变量初始化等
3 INIT_DEVICE_EXPORT(fn) 设备初始化阶段 外设驱动的注册与初始化,如网卡、SPI、I2C、Flash 等设备的驱动加载
4 INIT_COMPONENT_EXPORT(fn) 组件初始化阶段 系统中间件组件初始化,如文件系统、LWIP 网络协议栈、USB 协议栈等
5 INIT_ENV_EXPORT(fn) 环境准备阶段 系统运行环境初始化,如挂载文件系统、加载系统配置文件、初始化日志系统等
6 INIT_APP_EXPORT(fn) 应用初始化阶段 用户业务应用初始化,如 GUI 界面启动、业务逻辑模块初始化、任务创建等

3.3 内核对象

RT-Thread 内核采用面向对象的设计思想,将系统中所有的基础设施抽象为内核对象,包括线程、信号量、互斥量、事件、邮箱、消息队列、定时器、内存池、设备驱动等。

系统提供内核对象管理系统,统一对所有内核对象进行创建、销毁、查询等管理操作:当创建一个内核对象时,对象管理系统会将其加入对象容器中统一管理。
在这里插入图片描述

该设计的核心优势:

  • 统一的内核对象管理方式,简化了内核资源的管理逻辑

  • 开发调试阶段可快速从对象容器中获取所有内核对象的状态信息

  • 配合 FinSH 控制台,可实时输出内核对象调试信息,提升调试效率

3.4 FinSH 控制台

FinSH 是 RT-Thread 原生的核心调试组件之一,提供了一套类 Linux Shell 的命令行操作接口,可通过串口、以太网、USB 等方式与 PC 机建立通信,实现系统状态的实时查看和开发调试操作。

FinSH 核心功能

  • 系统信息查询:RT-Thread 默认内置大量基础命令,覆盖内核核心对象的状态查询,例如:

    • list_thread/ps:查看系统中所有线程的状态(优先级、栈占用、运行状态等)
    • list_sem:查看系统中信号量的创建和使用状态
    • free:查看系统内存的总容量、已用容量、空闲容量
  • 文件系统操作:若开启 RT-Thread 的 DFS(设备文件系统)组件,可使用lscdcpmkdir等类 Linux 命令操作本地文件系统

  • 自定义命令扩展:开发者可根据开发需求,向 FinSH 中添加自定义命令,实现个性化的调试功能
    在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐