RT-thread Nano移植并实现多线程任务

一、RT-Thread优势

无论是stm32和51单片机工程师转过来学习操作系统都需一个认识的过程的,RT-thread是一个轻量级的操作系统,很小,但是也是一个操作系统。主要优势有这些:

跨芯片平台:支持所有主流微控制器,解决设备碎片化问题。

实时操作系统内核:完全自主开发,硬实时,精致,高效,高度可定制。

云端一体化:设备端和云端一体化设计,轻松接入各类主流物联网设备云平台。

超低功耗设计:最大限度的降低系统功耗,针对不同应用场景,采用自动功耗控制策略。

快速启动:上电即启动,毫秒级启动时间,真正零等待开机。

安全性设计:层次化的系统安全架构,提供各类安全机制,保障应用和系统安全。

智能AI引擎:集成音频,图像相关的各类算法和智能引擎。

开放平台:独立第三方开放平台,支持各类,第三方软件包和SDK,扩展系统功能

开发者说,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。

RT-Thread 系统完全开源,3.1.0 及以前的版本遵循 GPL V2 + 开源许可协议。从 3.1.0 以后的版本遵循 Apache License 2.0 开源许可协议,可以免费在商业产品中使用,并且不需要公开私有代码。

二、RT-Thread 的架构

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

RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。

它具体包括以下部分:

内核层: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。

三、添加组件包

1、下载组件包
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
2、添加教程
https://blog.csdn.net/qq_36075612/article/details/107309750

四、配置Cube

配置RT-Thread组件
在这里插入图片描述

其他配置

在这里插入图片描述

五、配置Keil

在在Application/USER文件夹下新建app_rt_thread.c文件
添加代码;

#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led1_thread;
rt_uint8_t rt_led1_thread_stack[128];
void led1_task_entry(void *parameter);
struct rt_thread led2_thread;
rt_uint8_t rt_led2_thread_stack[128];
void led2_task_entry(void *parameter);
 
//初始化线程函数
void MX_RT_Thread_Init(void)
{
	//初始化LED1线程
	rt_thread_init(&led1_thread,"led1",led1_task_entry,RT_NULL,&rt_led1_thread_stack[0],sizeof(rt_led1_thread_stack),3,20);
    rt_thread_init(&led1_thread,"led2",led2_task_entry,RT_NULL,&rt_led2_thread_stack[0],sizeof(rt_led2_thread_stack),3,20);
	//开启线程调度
	rt_thread_startup(&led1_thread);
    rt_thread_startup(&led1_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
	printf("Hello RT_Thread!!!");
	rt_thread_delay(2000);
}
 
//LED1任务
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_RESET);
		rt_thread_delay(100);
		HAL_GPIO_WritePin(GPIOB,GPI0_PIN_0, GPIO_PIN_SET);
		rt_thread_delay(100);
	}
}
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1, GPIO_PIN_RESET);
		rt_thread_delay(500);
		HAL_GPIO_WritePin(GPIOB,GPI0_PIN_1, GPIO_PIN_SET);
		rt_thread_delay(500);
	}
}

找到Middlewares/RT-Thread/RTOS/kernel文件夹下的board.c文件,修改串口USART2为USART1

在这里插入图片描述
main.c

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
/* USER CODE END PTD */

六、编译运行

在这里插入图片描述
在这里插入图片描述
一个一个以100ms的频率不断闪烁,另一个以500ms的频率不断闪烁。

七、总结

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统,通过本次实验我对RT-Thread有了一定的认识与理解,通过开发发现RT-Thread是最简洁,优雅的开源操作系统之一,简单易用。

七、参考博客

https://www.21ic.com/article/704094.html

版权声明:本文为CSDN博主「Chleto」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/changlingMYlove/article/details/122252446

一、RT-Thread优势

无论是stm32和51单片机工程师转过来学习操作系统都需一个认识的过程的,RT-thread是一个轻量级的操作系统,很小,但是也是一个操作系统。主要优势有这些:

跨芯片平台:支持所有主流微控制器,解决设备碎片化问题。

实时操作系统内核:完全自主开发,硬实时,精致,高效,高度可定制。

云端一体化:设备端和云端一体化设计,轻松接入各类主流物联网设备云平台。

超低功耗设计:最大限度的降低系统功耗,针对不同应用场景,采用自动功耗控制策略。

快速启动:上电即启动,毫秒级启动时间,真正零等待开机。

安全性设计:层次化的系统安全架构,提供各类安全机制,保障应用和系统安全。

智能AI引擎:集成音频,图像相关的各类算法和智能引擎。

开放平台:独立第三方开放平台,支持各类,第三方软件包和SDK,扩展系统功能

开发者说,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。

RT-Thread 系统完全开源,3.1.0 及以前的版本遵循 GPL V2 + 开源许可协议。从 3.1.0 以后的版本遵循 Apache License 2.0 开源许可协议,可以免费在商业产品中使用,并且不需要公开私有代码。

二、RT-Thread 的架构

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

RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。

它具体包括以下部分:

内核层: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。

三、添加组件包

1、下载组件包
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
2、添加教程
https://blog.csdn.net/qq_36075612/article/details/107309750

四、配置Cube

配置RT-Thread组件
在这里插入图片描述

其他配置

在这里插入图片描述

五、配置Keil

在在Application/USER文件夹下新建app_rt_thread.c文件
添加代码;

#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led1_thread;
rt_uint8_t rt_led1_thread_stack[128];
void led1_task_entry(void *parameter);
struct rt_thread led2_thread;
rt_uint8_t rt_led2_thread_stack[128];
void led2_task_entry(void *parameter);
 
//初始化线程函数
void MX_RT_Thread_Init(void)
{
	//初始化LED1线程
	rt_thread_init(&led1_thread,"led1",led1_task_entry,RT_NULL,&rt_led1_thread_stack[0],sizeof(rt_led1_thread_stack),3,20);
    rt_thread_init(&led1_thread,"led2",led2_task_entry,RT_NULL,&rt_led2_thread_stack[0],sizeof(rt_led2_thread_stack),3,20);
	//开启线程调度
	rt_thread_startup(&led1_thread);
    rt_thread_startup(&led1_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
	printf("Hello RT_Thread!!!");
	rt_thread_delay(2000);
}
 
//LED1任务
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_RESET);
		rt_thread_delay(100);
		HAL_GPIO_WritePin(GPIOB,GPI0_PIN_0, GPIO_PIN_SET);
		rt_thread_delay(100);
	}
}
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1, GPIO_PIN_RESET);
		rt_thread_delay(500);
		HAL_GPIO_WritePin(GPIOB,GPI0_PIN_1, GPIO_PIN_SET);
		rt_thread_delay(500);
	}
}

找到Middlewares/RT-Thread/RTOS/kernel文件夹下的board.c文件,修改串口USART2为USART1

在这里插入图片描述
main.c

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
/* USER CODE END PTD */

六、编译运行

在这里插入图片描述
在这里插入图片描述
一个一个以100ms的频率不断闪烁,另一个以500ms的频率不断闪烁。

七、总结

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统,通过本次实验我对RT-Thread有了一定的认识与理解,通过开发发现RT-Thread是最简洁,优雅的开源操作系统之一,简单易用。

七、参考博客

https://www.21ic.com/article/704094.html

版权声明:本文为CSDN博主「Chleto」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/changlingMYlove/article/details/122252446

生成海报
点赞 0

Chleto

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐