开放原子训练营(第三季)RT-Thread Nano学习营一探究竟
前言
不知道从什么时候起,智能设备开始普及到了我们日常生活的方方面面。下班还未到家,热水器就可以调到合适的温度;上班刚进公司,忘关空调也不再是什么烦恼;诸如夜晚的灯光变换,白昼的窗帘适应等更给我们的生活带来诸多方便与快乐。
那么有没有小伙伴曾经困惑或者思考过,为什么汽车可以不需要人来驾驶?为什么工业可以不需要人来把关?为什么便利店不需要收银员来收银结算?为什么小饭馆不需要大厨师来调色增香?
其实这一切都得益于一个技术的诞生与发展:物联网(Internet of Things),或者我们可以更抽象的说它是万物互联。
那么物联网到底是什么呢?
物联网简介
物联网是指通过信息感知设备和信息传输设备,按约定的协议,将物与物、物与人通过网络相连接,物体通过信息传播媒介进行信息交换和通信,以实现智能化识别、定位、跟踪、监控与管理等功能。
这其中,有三个至关重要的概念:
- 感知层:通过各种传感器采集信息,识别物体的特征、位置、状态等信息
- 网络传输层:通过网络实现物与物、物与人之间的信息交换
- 应用层:依据采集的大量数据,通过计算机信息系统进行存储、处理与分析,实现对物体的智能监控与控制
那么你可能有疑问,这么牛逼的东西是怎么运行的,那些能控制硬件的代码是怎么写出来的呢?
物联网操作系统原理探究
接着上面的话继续聊。
想要实现物联网的相关功能,物联网操作系统是不可或缺的部分。物联网操作系统由内核、通信支持(WiFi/蓝牙、2/3/4G等通信支持、NFC、RS232/PLC支持等)、外围组件(文件系统、GUI、Java虚拟机、XML文件解析器等)、集成开发环境等组成。

简而言之,物联网操作系统是对底层硬件资源进行管理和调度,为上层的应用程序提供稳定可靠的运行环境的一套系统。
从上面的图可以看出,物联网操作系统的主要操作原理如下:
- 硬件抽象层:抽象出CPU、内存、总线等底层硬件设备,为上层系统提供统一的接口。
- 内核:负责系统的核心功能,包括线程管理、中断管理、定时器管理、内存管理、信号量/消息队列等IPC机制等。
- 组件与服务:在内核之上提供文件系统、GUI、数据库、网络协议栈等服务。这些服务由相应的组件实现,开发者可以根据需求配置需要的组件。
- 驱动模型:提供统一的设备驱动框架和各种设备的驱动,实现对底层硬件的管理与调度。
- 应用程序:运行在操作系统之上的具体应用,通过调用操作系统提供的API实现相应的业务功能。
它们之间的架构关系如下图所示:

从上到下,每一层的运行都依赖于下一层的功能。应用程序通过操作系统提供的 API 调用服务与组件层和内核层,最终管理底层硬件。这就是一个典型物联网操作系统的主要操作原理。
下面介绍一个非常好用的物联网操作系统---- RT-Thread
RT-Thread 简介
正好 CSDN 就有相关的课程,感兴趣的小伙伴可以移步16天入门物联网操作系统——RT-Thread 。
RT-Thread 是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的国产开源技术,诞生于2006年,由熊谱翔先生带领并集合开源社区力量开发而成。RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。
RT-Thread 具备一个IoT OS平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。经过13年的累积发展,RT-Thread已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过两千万台,成为国人自主开发、国内最成熟稳定和装机量最大的开源RTOS。
RT-Thread 拥有良好的软件生态,支持市面上所有主流的编译工具如GCC、Keil、IAR等,工具链完善、友好,支持各类标准接口,如POSIX、CMSIS、C++应用环境、Javascript执行环境等,方便开发者移植各类应用程序。商用支持所有主流MCU架构,如ARM Cortex-M/R/A, MIPS, X86, Xtensa, C-Sky, RISC-V,几乎支持市场上所有主流的MCU和Wi-Fi芯片。
当前的 RT-Thread 有多个版本,分别是:标准版,Nano版和Smart版本。
关于这三个版本,伙伴可以去 RT-Thread 官网查看更详细的内容。
前言铺垫了这么多,终于来到我们的主题,RT-Thread Nano 学习营。
RT-Thread Nano使用
RT-Thread Nano 是使用 C 语言开发一个极简版的硬实时内核,它的内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。
软件框图:

Nano 版本支持的架构有 ARM(Cortex M0/ M3/ M4/ M7 等)、RISC-V 及其他,内置的功能有线程管理、线程间同步与通信、时钟管理、中断管理、内存管理。
开发环境搭建
使用 RT-Thread Nano,需要先搭建它的环境。
- 我们可以从 RT-Thread 官网下载源码包

- 或者点击这里直接下载压缩包,这样可以基于其他开发环境移植 RT-Thread Nano,比如 IRA

- 或者我们通过一站式的 RT-Thread 开发工具 RT-Thread Studio 来创建 RT-Thread Nano 工程,可以从这里 获取安装RT-Thread Studio

- 或者我们也可以基于 Keil MDK 或者 CubeMX 来移植 RT-Thread Nano。
下面重点介绍从 RT-Thread Studio 开始创建项目。
在RT-Thread Studio 上使用 RT-Thread Nano
第一步先安装 RT-Thread Studio,这里就略过了。
安装好以后,我们打开 IDE,先更新 SDK。

更新完成后,就可以新建 Nano 工程,在左上角依次点击File > New > RT-Thread Nano Project,就会弹出新建项目的配置页面。
下图是基于芯片来创建项目

如果是基于开发板,就需要我们选择开发板型号,BSP 版本号,RT-Thread 源码版本,调试器和调试接口等信息,如下图:

这样就创建完成了。接下来写一段代码,比如打印Hello RT-Thread!,连接硬件,进行编译下载

由于项目配置的时候,我们配置了控制台串口号及引脚号,所以工程中已经实现了 uart 的驱动以及 rt_hw_console_output() ,可以默认进行打印。

下面我们尝试几个简单的示例:
- 这是一个串口通信的示例:
int main()
{ /* 查找串口设备 */ rt_device_t serial; serial = rt_device_find("uart1"); /* 打开串口设备 */ rt_device_open(serial, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX); /* 设置串口接收回调函数 */ rt_device_set_rx_indicate(serial, uart_rx_ind); /* 发送字符串 */ rt_device_write(serial, 0, "Hello RT-Thread!", 15);
} void uart_rx_ind(rt_device_t dev, rt_size_t size)
{ /* 读取数据 */ rt_uint8_t buff[32] = {0}; rt_device_read(dev, 0, buff, size);
}
- 这是一个定时器的示例:
/* 定时器控制块 */
static struct rt_timer timer; /* 定时器回调函数 */
static void timeout(void *parameter)
{ /* 线程函数打印了timeout reached! */rt_kprintf("timeout reached!\n");
} int main()
{ /* 初始化定时器 */ rt_timer_init(&timer, "timer", timeout, RT_NULL, 10, RT_TIMER_FLAG_ONE_SHOT); /* 启动定时器 */ rt_timer_start(&timer);
}
- 创建线程与删除线程
#include <rtthread.h>#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 512
#define THREAD_TIMESLICE 5ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t thread_stack[THREAD_STACK_SIZE];
static struct rt_thread tid1;/* 线程入口 */
static void thread_entry(void* parameter)
{/* 线程函数打印了Hello RT-Thread! */rt_kprintf("Hello RT-Thread!\n"); rt_thread_mdelay(500);
}int main()
{ /* 创建线程,接受线程名称,线程入口函数,线程参数,线程栈及大小,优先级和时间片*/ rt_thread_init(&tid1,"thread1",thread_entry,RT_NULL,thread_stack,THREAD_STACK_SIZE,THREAD_PRIORITY,THREAD_TIMESLICE); /* 启动线程 */ if (&tid1 != RT_NULL) rt_thread_startup(&tid1); /* 删除线程 */ rt_thread_delete(tid);
}
基本上在使用 RT-Thread Studio 开发的时候,我们大体上可以分为这几个步骤:创建项目、编写代码、构建项目、下载、调试、优化。所以总体感觉还是比较简单。
总结
RT-Thread Nano 具有非常多的优点。
- 代码足够简洁:Nano 不含 Scons 构建系统,不需要 Kconfig 以及 Env 配置工具,也去除了完整版特有的 device 框架和组件,仅是一个纯净的内核。
- 资源占用小:Nano 对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,RAM 占用约 1K 左右,ROM 占用 4K 左右。
- 使用方便:Nano 在配置文件 rtconfig.h 中列出了内核中的所有宏定义,有些默认没有打开,如需使用,打开即可。具体的配置可见教程
除此之外,Nano 还有很多让人眼前一亮的特性,这里就不一一列举了。
感兴趣的伙伴们,赶紧行动起来吧👉https://edu.csdn.net/course/detail/22983
相关文章:
开放原子训练营(第三季)RT-Thread Nano学习营一探究竟
前言 不知道从什么时候起,智能设备开始普及到了我们日常生活的方方面面。下班还未到家,热水器就可以调到合适的温度;上班刚进公司,忘关空调也不再是什么烦恼;诸如夜晚的灯光变换,白昼的窗帘适应等更给我们…...
数据库系统概论(二)关系数据库,SQL概述和数据库安全性
作者的话 前言:总结下知识点,自己偶尔看一看。 目录 一、关系模型概述 1.1关系数据结构及形式化定义 1.1.1域(Domain) 1.1.2笛卡尔积(Cartesian Product) 1.1.3关系(Relation) …...
【VM服务管家】VM4.x算子SDK开发_3.1 环境配置类
目录 3.1.1 环境配置:CSharp算子SDK开发环境配置方法3.1.2 算子封装:使用C封装算子SDK的方法3.1.3 异常中断:算子SDK软件运行报错“托管调试助手”中断的解决方法3.1.4 深度学习:GPU运行深度学习算子引发StackOverFlow异常的方法 …...
Java核心书籍1
1.《Java核心技术》是一本深入浅出的Java编程指南,适合初学者和有一定Java编程基础的读者。这本书的主要作者是Cay S. Horstmann和Gary Cornell,他们都是Java领域的知名专家。这本书的最新版本是第10版,其中涵盖了Java SE 9、10和11的新特性&…...
crontab详细用法 定时任务
使用crontab可以在指定时间执行一个shell脚本或者一系列Linux命令 crontab的使用方法 方法1.使用crontab命令 例如添加一个新的或者编辑已有的,使用: crontab -e就可以进入配置文件.此时配置crontab的执行者是当前登入用户,如果当前有用户是root,需要为其他用户配置,可以使用…...
基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
查看原文>>>基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局 目录 第一章、生态安全评价理论及方法介绍 第二章、平台基础 第三章、数据获取与清洗 第四章、基于USLE模型的土壤侵蚀评价 第五章、基于风蚀修正模型的防风固…...
开心档之MySQL 创建数据类型
MySQL 数据类型 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 数值类型 MySQL 支持所有标准 SQL 数值数据类型。 这些类型包括严格数值数据类型(INTEGER、S…...
【C++ Primer(第5版) 课后习题题目及答案 第一章】
C Primer5th 课后习题答案 第一章 1.1:查阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行main程序。1.2:改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系…...
【英语】100个句子记完7000个托福单词
其实主要的7000词其实是在主题归纳里面,不过过一遍100个句子也挺好的,反正也不多。 文章目录 Sentence 01Sentence 02Sentence 03Sentence 04Sentence 05Sentence 06Sentence 07Sentence 08Sentence 09Sentence 10Sentence 11Sentence 12Sentence 13Sent…...
六、CANdelaStudio入门-通信参数编辑
本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的通信参数编辑,欢迎各位朋友订阅、评论,…...
【致敬未来的攻城狮计划】— 连续打卡第十三天:FSP固件库开发启动文件详解
系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…...
Java中mybatis是否支持延迟加载?延迟加载的原理是什么?
是的,MyBatis支持延迟加载。延迟加载是指在查询对象时,只加载其基本属性,而将关联对象的数据暂不加载,等到真正需要使用关联对象时再去查询加载其数据的一种技术。 MyBatis通过在映射文件中配置lazyLoadingEnabled属性来开启延迟加…...
真题详解(磁盘)-软件设计(五十八)
真题详解(MTTR)-软件设计(五十七)https://blog.csdn.net/ke1ying/article/details/130354940 1、2021年上半年 解析: 哈希地址 0 1 2 3 4 5 6 7 8 9 10 构建哈希表 第一步:3%11 3 ,放在哈希地址3的位置…...
MATLAB连续时间信号的实现和时域基本运算(八)
1、实验目的: 1)熟悉常用连续时间信号的实现方法; 2)掌握连续时间信号的时域基本运算; 3)掌握实现基本函数及其运算的函数的使用方法; 4)加深对信号基本运算的理解。 2、实验内容&am…...
MongoDB 聚合管道中使用字符串表达式运算符
字符串表达式运算符主要用于实现字符串操作,主要包括了大小写转换、字符串截取、拼接、替换等 一、准备工作 初始化字符串数据 db.strings.insertMany([{ "_id": "1", "comment": " Abc" },{ "_id": "2&…...
用Python分析周杰伦歌曲并进行数据可视化
大家好,今天我们用python分析下周杰伦歌曲。为了尽量完整地呈现从原始数据到可视化的过程,接下来我们会先简单讲解数据的预处理过程,即如何将 JSON 数据转化为Excel 格式,以及如何对周杰伦的歌曲进行分词。 本案例中的歌词数据来…...
培训技能 GET
技巧 调整语速和语调:讲解者需要注意语速和语调的调整,以便让听众更好地理解和接受内容。 使用案例和实例:讲解者可以使用案例和实例来帮助听众更好地理解和记忆内容,同时也可以增强听众的兴趣和参与度。 互动式讲解:…...
数据库安全性案例分享
1 概述1.1 适用范围 本规范明确了Oracle数据库安全配置方面的基本要求。 1.2 符号和缩略语 缩写 英文描述 中文描述 DBA Database Administrator 数据库管理员 VPD Virtual Private Database 虚拟专用数据库 OLS Oracle Label Security Oracle标签…...
2023,你了解Kafka吗?深入详解
- 消息队列的核心价值 - 解耦合。 异步处理 例如电商平台,秒杀活动。一般流程会分为:1: 风险控制、2:库存锁定、3:生成订单、4:短信通知、5:更新数据。 通过消息系统将秒杀活动业务拆分开&#x…...
奇舞周刊第 491 期 初探 Web 客户端追踪技术
记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 初探 Web 客户端追踪技术 浏览器的追踪技术是一把双刃剑,它建立了用户个人信息和网站之间的连接,合理地使用能够大大提高用户的体验,但是同时也…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
