您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
从菜鸟到起飞的 RT-Thread 开发指南
 
作者: 阿基米东
  5778  次浏览      20 次
 2022-6-17
 
编辑推荐:
本文主要介绍了RT-Thread 简介、RT-Thread 版本、RT-Thread 设计思想、RT-Thread 快速上手及如何参与社区贡献。希望对您的学习有所帮助。
本文来自于知乎 ,由火龙果软件Linda编辑、推荐。

1. RT-Thread 简介

1.1 RT-Thread 是什么

据不完全统计,世界有成千上万个 RTOS(Real-time operating system,实时操作系统),RT-Thread 就是其中一个优秀的作品。

RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年年初发布的 0.1 版本。因为 RTOS 中的任务更类似于通用操作系统中的线程,并且这个系统支持基于优先级的抢占式任务调度算法,调度器的时间复杂度是 O(1),所以把它命名为 RT-Thread,即实时线程。

名字起得真妙 (。・∀・)ノ

经过14年的发展,RT-Thread 被广泛应用于智能家居、智慧城市、安防、工控、穿戴等众多行业领域,累计装机量超过6亿台,GitHub 的 Star 数量超过 5.3k,嵌入式开源社区活跃度行业第一。

1.2 RT-Thread 的作用

随着 MCU 硬件性能的提升、外设的增加以及软件功能需求的增加,越来越多项目采用 RTOS 的开发方式。一方面裸机开发方式的软件框架不清晰,对后续扩展功能极其不利;另一方面,由于软件复杂性的增加,裸机开发对工程师的要求越来越严苛,过多使用中断等因素,都会增加系统的不可靠性。

和其他优秀的 RTOS 一样,RT-Thread 的首要目标也是解决这些问题。RT-Thread 内核的主要功能是向下管理所有硬件资源,向上为应用程序提供 API 接口和软件服务,所有任务在内核的管理、同步和调度下有序运行。

简单来说,使用 RT-Thread 能够带来如下好处:

支持任务并发处理

容易扩展新的功能

破解应用的复杂性

增强代码可移植性

节省软件开发时间

......

您可能会说,其他 RTOS 也能提供这些好处呀,为什么你要推荐 RT-Thread?

因为 RT-Thread 还有许多优点,包括它支持非常多的硬件平台,还拥有及其丰富的组件和软件包(包括文件系统、网络、IoT、AI、传感器等等),提供了便捷的开发环境和 IDE 工具,以及有众多技术文档、参考设计和活跃的开发者社区,这些都能帮助您快速入门和掌握 RT-Thread,开发出优秀的产品。

当然啦,最重要的是,RT-Thread 是一群扎实做事的中国人写的开源操作系统,帮助您做出好产品的同时还能提高民族自信和国家竞争力。

1.3 RT-Thread 的特点

相比其他操作系统,RT-Thread 的主打特性是 “小而美的物联网操作系统”。

“小” 体现在 RT-Thread 的体积小,最小资源占用 1.2KB RAM 和 2.5KB flash。RT-Thread 可伸缩、易裁剪的特性,帮助用户在需要一个适用的操作系统的时候,轻松地进行裁减,适应到需要的场景,不占用过多的资源。

“美” 不单止代码质量和代码风格,还有 RT-Thread 的使用和开发体验,以及增加了小程序、SMP 多核调度、PSA 安全支持等多项实用的新功能,使得 RT-Thread 系统能实现灵活极简的应用开发,能扩展至众多高性能、高安全的应用领域。

“物联网” 则体现在 RT-Thread 针对物联网场景提供的众多组件和软件包,比如 AT组件、WiFi、蓝牙、LoRa、Sensor、AI 等等。以及针对安全和低功耗的优化,还有以 JS 为开发方式的柿饼 UI,都使其非常适用于 IoT 领域。

1.4 开源的 RT-Thread

您可能会担忧,RT-Thread 作为一个开源的操作系统,会不会污染企业私有代码?开发过程中会不会有很多坑?

其实不用担心,因为 RT-Thread 是一个“开源、社区化、中立”的系统。遵循 Apache 2.0 开源许可协议,意味着您可以放心地免费在商业产品中使用 RT-Thread 内核和组件,不需要公开私有代码,只需要在产品说明书上提及“基于 RT-Thread 系统”或“Powered by RT-Thread”即可。

Tips:因为 RT-Thread 软件包平台是开放的,许多软件包都是来自社区开发者,不同软件包的许可协议可能会不一样,所以在商业产品中使用时需要稍加注意。

同时,RT-Thread 非常注重在嵌入式开源社区的生态建设。经过多年的积累,除了有官方技术支持团队,还有活跃的开源社区和数十万开发者,开发过程中的遇到难题都能寻找官方团队和社区开发者的支持。

2. RT-Thread 版本

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

代码均可在以下页面下载。

下载 - RT-Thread物联网操作系统

​www.rt-thread.org/page/download.html

2.1 RT-Thread 标准版

最常用应该是 RT-Thread 标准版(也称为 RT-Thread 全功能版本),它由内核层、组件和服务层、IoT 框架层、文件系统、图形库、设备框架等组成。包含完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力,是一个完整的 IoT OS。

可以看到,除了实时内核,RT-Thread 标准版还具备丰富的中间层组件和软件包生态,这也是 RT-Thread 与其他很多 RTOS 的主要区别之一。

2.2 RT-Thread Nano

RT-Thread Nano 是一个极简的硬实时内核,其内存资源占用极小,功能包括任务管理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。对于系统资源紧张或是项目功能较为简单的,则可以选择基于 RT-Thread Nano 进行开发。比如家电、消费、医疗、工控领域的 32 位入门级 MCU。

Tips:RT-Thread Nano 已得到 ARM Keil 官方的认可和支持,在 Keil MDK 中以 pack 方式提供,方便用户使用。

2.3 RT-Thread Smart

RT-Thread Smart 是一款高性能混合微内核操作系统。其定位在于填补传统 RTOS 和大型操作系统 Linux 之间的空白,在实时性、成本、安全性、启动速度等方面取得最佳的平衡。适用于带 MMU 的中高端应用的芯片,例如 ARM Cortex-A 系列芯片、MIPS 芯片、带 MMU 的 RISC-V 芯片等。广泛应用于安防、车载、军工、消费电子等领域。

RT-Thread Smart 在 RT-Thread 标准版的基础上启用独立、完整的进程方式,同时以混合微内核模式执行。这里“混合”的意思是指在编译时决定整体系统采用什么样的运行模式。

2.4 更多

除了以上三个主版本,RT-Thread 还有不同的演进版本,包括前几天开发者大会发布的专用于智能穿戴领域的 PersimUI OS(湃心OS),以及应用于智能表计领域的 MoM(Microkernel on MCU),还有一些许可授权的衍生OS。

3. RT-Thread 设计思想

RT-Thread 有许多巧妙的设计思想,篇幅有限,这里先介绍几个,其他留给您慢慢探索。

3.1 任务调度

RT-Thread 支持多任务,允许多个任务同时运行,但并不是真正的同时运行(对于单核的 MCU),而是宏观上的并行,这就需要线程调度器(任务调度器)来完成任务的调度了。

RT-Thread 最大支持 256 级优先级(0~255),数值越小优先级越高。可以根据实际情况选择 8 或 32 级,对于 ARM Cortex-M 系列,通常采用 32 级优先级。

调度器是操作系统的核心,其主要功能就是实现线程的切换。RT-Thread 通过管理就绪列表,当需要调度时可以直接找出就绪列表中优先级最高的线程,然后执行该线程,时间复杂度为 O(1)。

/* ready thread list */

rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];

/* get highest ready priority thread */

highest_priority_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next,

struct rt_thread,

tlist);

 

同时,RT-Thread 还采用 round-robin 策略确保对具有相同优先级的所有线程进行同等调度。RT-Thread 的每个线程都有时间片参数,如果您希望控制相同优先级的多个线程的单次运行时长,可以分别给它们设置不同的时间片。

3.2 启动流程

RT-Thread 系统的初始化在 main() 函数之前,这意味着您不需要操心 RT-Thread 的初始化操作,可以专心编写应用程序。

RT-Thread 还提供了自动初始化机制,初始化函数只需要在函数定义处通过宏定义的方式进行声明,就会在系统启动过程中自动执行,不需要在应用代码中显示调用,相当优雅。

针对不同层级,RT-Thread 提供了不同的宏接口:

3.3 内核对象

RT-Thread 内核采用面向对象的设计思想进行设计,系统级的基础设施都是内核对象,比如线程、信号量、互斥量、事件、邮箱、消息队列、定时器、内存池、设备驱动等等。然后通过内核对象管理系统来访问/管理所有内核对象,例如当您创建一个对象时,内核对象管理系统就会将这个对象放到一个叫对象容器的地方。

这样做是为了方便管理内核资源,在后续的开发调试阶段可以很方便地获取各个内核对象的状态,并通过 FinSH 输出调试信息。

3.4 FinSH 控制台

FinSH 是 RT-Thread 最早的组件之一,提供了一套类似于 Linux Shell 的操作接口,您可以通过 串口/以太网/USB 等方式与 PC 机进行通信,通过命令行查看系统信息或用于调试。

RT-Thread 默认内置了一些 FinSH 命令,比如 list_thread 和 ps 用于查看线程信息,list_sem 用于查看系统信号量信息,free 用于查看系统内存使用情况等等。如果开启 DFS 组件,还可以使用 ls、cd、cp 等命令操作文件系统。

4. RT-Thread 快速上手

为了提升开发体验,RT-Thread 为我们提供了几种开发环境,主要包括使用多年的 Env 工具和近年来主推的 RT-Thread Studio 集成开发环境。

4.1 Env 工具

Env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。

优点:支持 Windows/Linux/MacOS 平台,配置、运行速度快。

缺点:学习周期较长,需要了解 git、scons、Kconfig、Python 等知识,需要配合其他工具进行编辑和调试。

下载:

下载 - RT-Thread物联网操作系统

​www.rt-thread.org/page/download.html

GitHub:

RT-Thread/env

​github.com/RT-Thread/env

4.2 RT-Thread Studio

RT-Thread Studio 是一个基于 Eclipse 的开发工具软件,主要包括工程创建和管理,代码编辑,SDK管理,RT-Thread配置,构建配置,调试配置,程序下载和调试等功能。

优点:低门槛快速上手,一站式开发,图形化配置,社区版本永久免费。

缺点:目前只支持 Windows 平台,配置、编译、运行速度较慢,支持的硬件平台较少。

下载:

RT-Thread Studio

​www.rt-thread.org/page/studio.html

4.3 其他

还有其他一些开发方式,比如在 Keil MDK 中以 pack 形式添加 RT-Thread 内核。

5. 如何参与社区贡献

最后,如果您也想参与社区建设,为 RT-Thread 的生态贡献一份力量,那么您可以结合自身情况选择轻度参与或重度参与。

5.1 轻度参与

在公司产品、个人项目或比赛中使用 RT-Thread;

在 RT-Thread 社区 中提问或回答问题;

在 GitHub 给 RT-Thread 提 Issue 反馈 Bug;

参与社区活动和 B站 直播;

......

5.2 重度参与

在 GitHub 给 RT-Thread 提 PR 修复 Bug 或增加新功能;

制作软件包并提交到 官方软件包索引仓库;

领取 任务 并加入 社区工作小组;

组建社区兴趣小组一起学习;

在当地组织或参与开发者沙龙;

参与 RT-Thread 开发者能力认证考试;

......

还有,别忘了参加 RT-Thread 年度开发者大会!

6. 有哪些学习资料

RT-Thread 文档中心

学习路线 - RT-Thread 文档中心

​www.rt-thread.org/document/site/

 

RT-Thread 视频中心

RT-Thread 视频中心 - RT-Thread物联网操作系统

​www.rt-thread.org/page/video.html

 

RT-Thread 参考设计中心

RT-Thread 项目设计中心

​www.rt-thread.org/page/projects.html

 

RT-Thread 应用项目汇总

RT-Thread应用项目汇总 - RT-Thread问答社区

​club.rt-thread.org/ask/article/2292.html

 

RT-Thread 编程手册

《RT-Thread编程手册》 - 书栈网 · BookStack

​www.bookstack.cn/books/rtthread-manual-doc

 

ART-Pi 资源网站

ART-Pi

​art-pi.gitee.io/website/

 

 
   
5778 次浏览       20
相关文章

一文了解汽车嵌入式AUTOSAR架构
嵌入式Linux系统移植的四大步骤
嵌入式中设计模式的艺术
嵌入式软件架构设计 模块化 & 分层设计
相关文档

企点嵌入式PHP的探索实践
ARM与STM简介
ARM架构详解
华为鸿蒙深度研究
相关课程

嵌入式C高质量编程
嵌入式操作系统组件及BSP裁剪与测试
基于VxWorks的嵌入式开发、调试与测试
嵌入式单元测试最佳实践

最新活动计划
面向对象业务分析与系统设计 10-16[线上]
嵌入式软件架构设计-高级实践 10-17[线上]
Qlik Sense数据分析技术 10-17线上]
基于 UML 和EA进行分析设计 10-22[北京]
用户研究与用户建模 10-24[北京]
QT应用开发 10-24[北京]
 
 
最新文章
基于FPGA的异构计算在多媒体中的应用
深入Linux内核架构——简介与概述
Linux内核系统架构介绍
浅析嵌入式C优化技巧
进程间通信(IPC)介绍
最新课程
嵌入式Linux驱动开发
代码整洁之道-态度、技艺与习惯
嵌入式软件测试
嵌入式C高质量编程
嵌入式软件可靠性设计
成功案例
某军工所 嵌入式软件架构
中航工业某研究所 嵌入式软件开发指南
某轨道交通 嵌入式软件高级设计实践
深圳 嵌入式软件架构设计—高级实践
某企业 基于IPD的嵌入式软件开发
更多...