目录
- 一、RT-thread Nano移植
- 二、基于 CubeMX 移植 RT-Thread Nano
- 三、添加 RT-Thread Nano 到工程
-
- 1. 选择 Nano 组件
- 2. 配置 Nano
- 3. 中断与异常处理
- 四、创建任务
- 五、总结
- 六、参考
一、RT-thread Nano移植
RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。
下图是 RT-Thread Nano 的软件框图,包含支持的 CPU 架构与内核源码,还有可拆卸的 FinSH 组件:
支持架构: ARM:Cortex M0/ M3/ M4/ M7 等、RISC-V 及其他。
功能: 线程管理、线程间同步与通信、时钟管理、中断管理、内存管理。
二、基于 CubeMX 移植 RT-Thread Nano
- 获取
RT-Thread Nano
软件包
进入打开CubeMX
,从菜单栏help
进入Manage embedded software packages
界面,点击From Url
按钮,进入User Defined Packs Manager
界面,其次点击new
,填入上述网址,然后点击check
,如下图所示:
check
通过后,点击OK
回到User Defined Packs Manager
界面,再次点击OK
,CubeMX
自动连接服务器,获取包描述文件。回到Manage embedded software packages
界面,就会发现RT-Thread Nano 3.1.5
软件包,选择该软件包,点击Install Now
,如下图所示:
点击安装之后,弹出Licensing Agreement
,同意协议,点击Finish
,如下图所示:
等待安装完成,成功安装后,版本前面的小蓝色框变成填充的黄绿色,现象如下图所示:
至此,RT-Thread Nano
软件包安装完毕,退出Manage embedded software packages
界面,进入CubeMX
主界面。
三、添加 RT-Thread Nano 到工程
1. 选择 Nano 组件
选中芯片型号之后,点击Softwares Packages->Select Components
,进入组件配置界面,选择RealThread
, 然后根据需求选择RT-Thread
组件,然后点击OK
按钮,如下图所示:
2. 配置 Nano
选择组件之后,对组件参数进行配置。在工程界面 Pinout & Configuration
中,进入所选组件参数配置区,按照下图进行配置
3. 中断与异常处理
RT-Thread 操作系统重定义HardFault_Handle
r、PendSV_Handler
、SysTick_Handler
中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt
, Pendable request
, Time base :System tick timer
),最后点击生成代码,具体操作如下图 所示:
四、创建任务
创建两个线程
线程一的灯500ms闪烁一次
线程二的灯1000ms闪烁一次
新建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(GPIOF,GPIO_PIN_9, GPIO_PIN_RESET);
rt_thread_delay(500);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9, GPIO_PIN_SET);
rt_thread_delay(500);
}
}
在main函数的while循环前创建线程
MX_RT_Thread_Init();
while (1)
{
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10);
rt_thread_delay(1000);
}
编译烧录
五、总结
本文介绍了如何基于 CubeMX 移植 RT-Thread Nano,并说明生成代码工程的步骤。
六、参考
本文转自 https://blog.csdn.net/YangMax1/article/details/122026363,如有侵权,请联系删除。