RT-thread Nano移植



一、RT-thread

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈libc接口图形用户界面等。


1. 特点

RT-Thread特点:

  • 支持任务并发处理
  • 容易扩展新的功能
  • 破解应用的复杂性
  • 增强代码可移植性
  • 节省软件开发时间

2. 框架

近年来,物联网(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。



二、添加Nano软件包

RT-Thread Nano软件包地址:https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

打开CubeMX,选择Help下的Manage embedded software packages:

在这里插入图片描述


选择From Url...:
在这里插入图片描述


点击New,并添加上述的Nano软件包地址https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

在这里插入图片描述


勾选并OK后,成功:
在这里插入图片描述


同时,安装RT-Thread:

在这里插入图片描述


同意:
在这里插入图片描述


安装成功:
在这里插入图片描述



三、新建工程


在这里插入图片描述


RCC配置:
在这里插入图片描述


SYS设置:
在这里插入图片描述


时钟树设置:
在这里插入图片描述


选择组件:
在这里插入图片描述


选择RT-Thread组件,OK:
在这里插入图片描述


将选择的模块进行勾选:
在这里插入图片描述

NVIC配置:
在这里插入图片描述


生成代码:
在这里插入图片描述
在这里插入图片描述



四、代码编写


添加新文件:
在这里插入图片描述


添加.c文件:
在这里插入图片描述


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);
 
//初始化线程函数
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_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(GPIOA,GPIO_PIN_3, GPIO_PIN_RESET);
		rt_thread_delay(500);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3, GPIO_PIN_SET);
		rt_thread_delay(500);
	}
}

修改board.c的77行:
在这里插入图片描述


rtconfig.h的145行取消注释:
在这里插入图片描述


main.c中添加代码:

extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);

在这里插入图片描述


while循环中添加以下代码:
在这里插入图片描述

	  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
		rt_thread_delay(1000);


五、总结

RT-Thread十分方便。相比其他操作系统,RT-Thread 的主打特性是 “小而美的物联网操作系统”。



参考

STM32的RT-Thread-Nano移植

基于 STM32CubeMX 添加 RT-Thread 操作系统组件(一)- 详细介绍操作步骤

从菜鸟到起飞的 RT-Thread 开发指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baker_Streets

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值