RT-Thread简介-程序员宅基地

技术标签: RTT  简介  学习笔记  RT-Thread  

RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过近 12 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。

1.RT-Thread概述

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。

事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。

RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。针对资源受限的微控制器(MCU)系统,可通过方便易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 版本(NANO 是 RT-Thread 官方于 2017 年 7 月份发布的一个极简版内核);而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。

相较于 Linux 操作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时性高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。虽然 32 位 MCU 是它的主要运行平台,实际上很多带有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列级别 CPU 的应用处理器在特定应用场合也适合使用 RT-Thread。

2.RT-Thread架构

近年来,物联网(Internet Of Things,IoT)概念广为普及,物联网市场发展迅猛,嵌入式设备的联网已是大势所趋。终端联网使得软件复杂性大幅增加,传统的 RTOS 内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。物联网操作系统是指以操作系统内核(可以是 RTOS、Linux 等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台,RT-Thread 就是一个 IoT OS。

R T − T h r e a d 与 其 他 很 多 R T O S 如 F r e e R T O S 、 u C / O S 的 主 要 区 别 之 一 是 : \color{RED}{RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是:} RTThreadRTOSFreeRTOSuC/OS:
它 不 仅 仅 是 一 个 实 时 内 核 , 还 具 备 丰 富 的 中 间 层 组 件 , 如 下 图 所 示 : \color{GREEN}{它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示:} :
在这里插入图片描述
它具体包括以下部分:

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

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

RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread 已经支持的软件包数量已经达到 60+,如下举例:

物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。

脚本语言相关的软件包:目前支持 JerryScript、MicroPython。
多媒体相关的软件包:Openmv、mupdf。
工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。
系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。
外设库与驱动类软件包:RealTek RTL8710BN SDK。
其他。

参考RTT官网整理https://www.rt-thread.org/document/site/tutorial/quick-start/introduction/introduction/#

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_B_O_Y/article/details/98874917

智能推荐

资源 | 分享几个强大的网站_电子世家-程序员宅基地

文章浏览阅读8.5k次,点赞5次,收藏9次。分享几个强大的网站:1、电子世家电子世家汇总了大量电子、嵌入式等网站、论坛。网址如下:http://www.dianzishijia.com/2、极客导航极客导航汇总了大量的技术、产品、设计、运营、职能等方面的内容。网址如下:https://www.gogeeks.cn/nav3、在线工具-程序员的工具箱这个网站有大量的在线工具可以使用,工具包含开发类、站长类、极客类、..._电子世家

css的animation动画_css animation-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏12次。顾名思义,它可以控制动画的状态 – 运行或者暂停,类似于视频播放器的开始和暂停,是 CSS 动画中有限的控制动画状态的手段之一。在 1-2 秒范围内随机,这样,我们就可以得到非常自然且不同的上升动画效果,基本不会出现重复的画面,很好的模拟了随机效果。属性或其子属性,该属性允许配置动画时间、时长以及其他动画细节,但该属性不能配置动画的实际表现,动画的实际表现是由。中定义的第一帧这种说法,因为动画运行的第一帧和最后一帧的实际状态还会受到动画运行方向。,可以有效的构建更为随机的动画效果,让动画更加的自然。_css animation

Android 9 Audio系统笔记:AudioFlinger音频流处理流程_audio effects 的preprocess-程序员宅基地

文章浏览阅读4.9k次,点赞7次,收藏24次。好久没写了,今天碰巧有个同事问我,我就顺便写一下,后面就不用又找一遍代码了,所谓好记性不如烂笔头。这块是关于如何从AudioTrack 写入数据到audioflinger,以及audioflinger如何写入到hal层,主要写一下流程。client写入数据://frameworks\av\media\libaudioclient\AudioTrack.cppssize_t AudioTrack::write(const void* buffer, size_t userSize, bool bloc_audio effects 的preprocess

Android学习笔记——归纳整理_android学习笔记汇总-程序员宅基地

文章浏览阅读8k次,点赞26次,收藏155次。Android入门笔记——归纳总结_android学习笔记汇总

中南大学2019计算机研究生分数线,2019中南大学研究生分数线(含2016-2019历年复试)...-程序员宅基地

文章浏览阅读354次。2019中南大学研究生分数线(含2016-2019历年复试)考研就是人生的第二次高考,是再一次改变自己命运的机会,所谓7分靠努力,3分靠填报,中南大学历年研究生复试分数线是2019-2020届考研学子十分关心的问题,以下是大学生必备网为大家整理的2016-2019历年中南大学研究生复试分数线,供大家参考,真切希望大家都能考上自己满意的学校。1、2019年中南大学研究生分数线一、学术学位学科门类(专..._中南大学计算机技术复试线历年

【学习笔记09】:JavaScript单引号、双引号和反引号的区别_js中document.write用反引号和引号的区别-程序员宅基地

文章浏览阅读915次,点赞3次,收藏6次。单引号、双引号和反引号的区别_js中document.write用反引号和引号的区别

随便推点

web前端基础知识_web前端初级证知识点-程序员宅基地

文章浏览阅读6.1k次,点赞12次,收藏101次。一、网页、静态网页、动态网页 二、网页名词解释 三、Web标准 四、Web页面的组成_web前端初级证知识点

完美测试解决App一键唤醒_Deeplink,直达指定页面_应用直达链接测试-程序员宅基地

文章浏览阅读2k次。从运营角度来看,引导已下载用户打开App,能提高用户粘性和活跃度,而用户在App内的产品体验自然也比H5页面要好;引导未下载用户下载App并进入指定页面,显然能给用户更好的产品初体验。引导已下载用户从H5页面或者主流社交平台唤醒App并且直达指定产品。引导为下载用户从H5页面直接下载App,首次打开App时直达指定场景一键唤醒(Deeplink)的具体使用示例:用户通过打开链接,WebView判断是否安装,未安装情况下引导用户快速下载,下载完成后直达指定的场景页面。常见的问题部分主流平._应用直达链接测试

springboot 新增模块之后,需要设置java文件夹为Sources Root_springcloud 生产者有sourcesroot-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏3次。 springboot 同项目下,新增模块之后,所有资源文件格式显示会有问题,需要设置java文件夹为Sources Root之后才能进行编码。模块src下java包右键 -> Mark Directory as -> Sources Root..._springcloud 生产者有sourcesroot

树遍历(BFS+DFS(递归+非递归))-python代码整理_bfs算法递归遍历树 python-程序员宅基地

文章浏览阅读1.1k次,点赞5次,收藏13次。数据结构算法-树最近再刷leetcode的树,整理了常用遍历代码包含树的层次遍历(广度优先遍历)与前中后序遍历(深度优先遍历):#########################################层次遍历(广度优先遍历)★★★★★#BFS通用模板,层次遍历通用:#使用队列实现def levelOrder(root): if not root: return [] queue=[root] ans=[] while queue: a=[] #方便保存每一层的_bfs算法递归遍历树 python

有关java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)的解决方法-程序员宅基地

文章浏览阅读1.6k次。问题描述:在用Java访问数据库时,出现以下提示:java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))原因:在连接数据库时,所连接的url的地址格式输入有误解决方法..._connection refused(description=(tmp=)(vsnnum=186646784)(err=12505)(error_sta

Servlet--Request生命周期_tomcat中request的生命周期-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏13次。Servlet--Request生命周期一、Request、Response对象的生命周期1、浏览器像servlet发送请求2、tomcat收到请求后,创建Request和Response两个对象的生命周期,并且将浏览器请求的参数传递给Servlet3、Servlet接收到请求后,调用doget或者dopost方法。处理浏览器的请求信息,然后通过Response返回_tomcat中request的生命周期