南京定制网站,目前主流搜索引擎是哪种,软件工程专业考研科目,搜索引擎推广排名1. RT-Thread 简介
1.1 RT-Thread 是什么
据不完全统计#xff0c;世界有成千上万个 RTOS#xff08;Real-time operating system#xff0c;实时操作系统#xff09;#xff0c;RT-Thread 就是其中一个优秀的作品。
RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年… 1. RT-Thread 简介
1.1 RT-Thread 是什么
据不完全统计世界有成千上万个 RTOSReal-time operating system实时操作系统RT-Thread 就是其中一个优秀的作品。
RT-Thread 内核的第一个版本是熊谱翔先生在 2006 年年初发布的 0.1 版本。因为 RTOS 中的任务更类似于通用操作系统中的线程并且这个系统支持基于优先级的抢占式任务调度算法调度器的时间复杂度是 O(1)所以把它命名为 RT-Thread即实时线程。
1.2 RT-Thread 的作用
随着 MCU 硬件性能的提升、外设的增加以及软件功能需求的增加越来越多项目采用 RTOS 的开发方式。一方面裸机开发方式的软件框架不清晰对后续扩展功能极其不利另一方面由于软件复杂性的增加裸机开发对工程师的要求越来越严苛过多使用中断等因素都会增加系统的不可靠性。
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 领域。
2. RT-Thread 版本
RT-Thread 针对不同应用场景目前提供了三个主版本分别是 RT-Thread 标准版、RT-Thread Nano 和 RT-Thread Smart。
2.1 RT-Thread 标准版
最常用应该是 RT-Thread 标准版也称为 RT-Thread 全功能版本它由内核层、组件和服务层、IoT 框架层、文件系统、图形库、设备框架等组成。包含完整的中间件组件具备低功耗、安全、通信协议支持和云端连接能力是一个完整的 IoT OS。
2.2 RT-Thread Nano
RT-Thread Nano 是一个极简的硬实时内核其内存资源占用极小功能包括任务管理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。对于系统资源紧张或是项目功能较为简单的则可以选择基于 RT-Thread Nano 进行开发。比如家电、消费、医疗、工控领域的 32 位入门级 MCU。
2.3 RT-Thread Smart
RT-Thread Smart 是一款高性能混合微内核操作系统。其定位在于填补传统 RTOS 和大型操作系统 Linux 之间的空白在实时性、成本、安全性、启动速度等方面取得最佳的平衡。适用于带 MMU 的中高端应用的芯片例如 ARM Cortex-A 系列芯片、MIPS 芯片、带 MMU 的 RISC-V 芯片等。广泛应用于安防、车载、军工、消费电子等领域。
因此我们使用的是RT-Thread Nano版本
开发环境
Supported IDE and Compiler
The main IDE/compilers supported by RT-Thread are:
RT-Thread Studio IDEMDK KEILIARGCC
我们使用MDK KEIL进行开发其他环境的开发比较复杂
RT-Thread特点 RT-Thread Nano简介
RT-Thread Nano 是一个极简版的硬实时内核它是由 C 语言开发采用面向对象的编程思维具有良好的代码风格是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。
下图是 RT-Thread Nano 的软件框图包含支持的 CPU 架构与内核源码还有可拆卸的 FinSH 组件 支持架构ARMCortex M0/ M3/ M4/ M7 等、RISC-V 及其他。
功能线程管理、线程间同步与通信、时钟管理、中断管理、内存管理。
Nano 的特点
简单
1、下载简单
RT-Thread Nano 以软件包的方式集成在 Keil MDK 与 CubeMX 中可以直接在软件中下载 Nano 软件包获取源码获取方式详见 基于 Keil MDK 移植 RT-Thread Nano 与 基于 CubeMX 移植 RT-Thread Nano 。
同时也提供 下载 Nano 源码压缩包 的途径方便在其他开发环境移植 RT-Thread Nano如 基于 IAR 移植 RT-Thread Nano。
2、代码简单
与 RT-Thread 完整版不同的是Nano 不含 Scons 构建系统不需要 Kconfig 以及 Env 配置工具也去除了完整版特有的 device 框架和组件仅是一个纯净的内核。
3、移植简单
由于 Nano 的极简特性使 Nano 的移植过程变得极为简单。添加 Nano 源码到工程就已完成 90% 的移植工作。
在 Keil MDK 与 Cube MX 中还提供了 Nano 的软件包可以一键下载加入到工程。另外在 RT-Thread Studio 中可以基于 Nano 创建工程直接使用。以下是使用不同开发环境时可以选择移植或使用 Nano 的方法
在 RT-Thread Studio 上使用 RT-Thread Nano基于 KEIL MDK 移植 RT-Thread Nano基于 CubeMX 移植 RT-Thread Nano基于 IAR 移植 RT-Thread Nano移植 RT-Thread Nano 到 RISC-V
4、使用简单
RT-Thread Nano 在使用上也非常简单带给开发者友好的开发体验。
易裁剪Nano 的配置文件为 rtconfig.h该文件中列出了内核中的所有宏定义有些默认没有打开如需使用打开即可。具体的配置可见 Nano 版块的 RT-Thread Nano 配置 教程。易添加 FinSH 组件FinSH 组件 可以很方便的在 Nano 上进行移植而不再依赖 device 框架只需要对接两个必要的函数即可完成 FinSH 移植。自选驱动库可以使用厂商提供的固件驱动库如 ST 的 STD 库、HAL 库、LL 库等可以自行选择。完善的文档包含 内核基础、线程管理 (例程)、时钟管理 (例程)、线程间同步 (例程)、线程间通信 (例程)、内存管理 (例程)、中断管理以及 Nano 版块的移植教程。
小巧
资源占用小对 RAM 与 ROM 的开销非常小在支持 semaphore 和 mailbox 特性并运行两个线程 (main 线程 idle 线程) 情况下ROM 和 RAM 依然保持着极小的尺寸RAM 占用约 1K 左右ROM 占用 4K 左右。
Nano 资源占用情况举例在运行两个线程 (main 线程 idle 线程) 情况下ROM 和 RAM 依然保持着极小的尺寸。以下是基于 Cortex M3 的 MDK 工程编译结果优化等级 3。 Total RO Size (Code RO Data) 4000 ( 3.91kB)Total RW Size (RW Data ZI Data) 1168 ( 1.14kB)Total ROM Size (Code RO Data RW Data) 4092 ( 4.00kB) 获取源码并且移植
正点原子nanoSTM32F103 (rt-thread.org)
使用 CubeMX 移植 (rt-thread.org)
使用 MDK 移植 (rt-thread.org) rt-thread 源码的目录文件说明
rt-thread 目录
下图是打开 rt-thread 源码的目录下表是该目录的简单说明。 目录名描述bspBoard support packageRT-Thread 板级支持包 IAR/MDK 工程在 BSP 目录下的具体的 BSP 中componentsRT-Thread 的各个组件目录documentation一些说明文件如代码风格说明includeRT-Thread 内核的头文件libcpu各类芯片的移植代码此处包含了 STM32 的移植文件srcRT-Thread 内核的源文件toolsRT-Thread 命令构建工具的脚本文件BSP 目录
打开 BSP 目录里面包含 RT-Thread 已经支持的所有 bsp 打开一个 bsp
如打开bsp stm32f407-atk-explorer下表是该目录的简单说明。 目录名描述applicationsRT-Thread 应用程序board与开发板相关的配置文件project.eww project.uvproj project.uvprojxiar 的工程文件 keil4 工程文件 keil5 工程文件出现问题
单独把该文件拿出来编译会出现很多文件找不到的情况因此我们需要提取一些文件出来从keil软件里的路径得知重要文件