首页 > 其他分享 >浅浅了解一下 RT-Thread

浅浅了解一下 RT-Thread

时间:2024-08-01 22:29:52浏览次数:11  
标签:RT rt Thread thread 浅浅 线程 内核

转载自:http://www.uml.org.cn/embeded/202206174.asp

 

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 文档中心

学习路线 - 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/

标签:RT,rt,Thread,thread,浅浅,线程,内核
From: https://www.cnblogs.com/FBsharl/p/18337711

相关文章

  • DAY 15 二叉树part03
      110.平衡二叉树(优先掌握递归)题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html 独立完成,感觉还比较好理解12classSolution{13public:14boolisBalanced(TreeNode*root){15if(......
  • 数组part02
    2024年8月1日,今天学习了数组的第二部分。1.巩固了昨天的双指针问题,即滑动窗口/双指针;注意,双指针是为了减少for循环,使用的时候小心循环的写法和快慢指针的增长方法。2.学习了数组模拟的螺旋矩阵问题,注意循环不变量;3.学习了前缀和的方法,前缀和常用来解决区间和问题,其实是避免重复......
  • 「代码随想录算法训练营」第二十六天 | 贪心算法 part4
    452.用最少数量的箭引爆气球题目链接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/题目难度:中等文章讲解:https://programmercarl.com/0452.用最少数量的箭引爆气球.html视频讲解:https://www.bilibili.com/video/BV1SA41167xe题目状态:有点思路......
  • FreeRTOS 列表和列表项
    强烈建议:一定要有数据结构中链表的基础 列表和列表项列表:列表是FreeRTOS中的一个数据结构,概念上和链表有点类似,列表被用来跟踪FreeRTOS中的任务。列表项:列表项就是存放在列表中的项目 列表相当于链表,列表项相当于节点,FreeRTOS中的列表是一个双向环形链表......
  • AI start
    训练模型来检测图像噪声区域通常需要以下步骤:数据准备:收集包含噪声和无噪声的图像样本作为训练数据。可以使用现有的带有噪声和无噪声标签的图像数据集,或者手动创建标签来标记图像中的噪声区域。数据预处理:对图像进行预处理,以便将其转换为适合模型训练的格式。这可能包括调整图......
  • 排序工具类 - SortUtils
    packagecom.kurumi.util;importorg.springframework.stereotype.Component;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;importjava.util.Map;publicclassSortUtils{/***将list安装sortMap中的传参排......
  • 昇思MindSpore 应用学习-基于 MindSpore 实现 BERT 对话情绪识别
    基于MindSpore实现BERT对话情绪识别模型简介BERT全称是来自变换器的双向编码器表征量(BidirectionalEncoderRepresentationsfromTransformers),它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自然语言......
  • 「代码随想录算法训练营」第二十五天 | 贪心算法 part3
    134.加油站题目链接:https://leetcode.cn/problems/gas-station/题目难度:中等文章讲解:https://programmercarl.com/0134.加油站.html视频讲解:https://www.bilibili.com/video/BV1jA411r7WX题目状态:没有思路,学习题解思路一:全局最优解首先将所有路径的加油量和耗油量加一起......
  • 【完美解决】 TypeError: ‘str’ object does not support item assignment
    【完美解决】TypeError:‘str’objectdoesnotsupportitemassignment在Python编程中,遇到TypeError:'str'objectdoesnotsupportitemassignment这样的错误通常意味着你试图修改字符串中的某个字符,但字符串是不可变类型,不支持这种操作。本文将深入探讨这一错误......
  • 易优CMS模板标签relevarticle相关文档
    [基础用法]标签:relevarticle描述:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联。在没有tag标签情况下,就以前3个关键词检索文档标题进行关联。这个标签随着数据量的增加可能会比较影响检索性能。提示:使用该标签之前,必须先安装相关文......