文章目录[隐藏]
一、RT-Thread 操作系统的特点和优势
RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件
内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。
RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。
有Bootloader框架,RT-Thread Nano-RTC-设备驱动框架,RT-Thread Nano-IWDT-设备驱动框架
二、准备工作
2.1 CubeMX 上下载 RT-Thread Nano pack 安装包
- Help -> Manage embedded software packages
- 添加NANO软件包
点击 From Url 按钮,进入 User Defined Packs Manager 界面,其次点击 new,填入网址https://www.st.com/en/development-tools/stm32cubemx.html
,然后点击 check,
安装软件包,点击install now
2.2 创建工程
芯片选择stm32f103c8
选择 Nano 组件
点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread
配置Nano:
这时会新增Software Packs展开就可以看见添加的RealThread.RT_Thread,勾选相应内容
RCC配置
SYS配置
串口配置
添加引脚A5,A6
NVIC取消选择
取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)
时钟树配置
三、代码修改
3.1 Keil添加 RT-Thread Nano 到工程
找到 RTOS,勾选 kernel,点击 OK
现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:
3.2 代码修改
创建任务
两个LED任务,一个灯每隔0.5秒闪烁,另一个灯在main.c中每隔一秒闪烁
在Application/USER文件夹下新建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_TogglePin(GPIOA,GPIO_PIN_6);
rt_thread_delay(500);
}
}
找到board.c文件,RT-Thread Nano 3.1.5生成的默认端口USART2,改为USART1
找到Application/User/Core里app_rt_thread.c下的rtconfig.h
在main.c文件中添加代码:
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
在main函数里添加如下代码
MX_RT_Thread_Init();
while循环中添加代码
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
rt_thread_delay(1000);
结果:
四、总结
RT-Thread与RTOS的主要区别之一,它不仅仅是一个实时内核,还具备了丰富的中间层组件。其内存资源占用极小。Nano开源免费,小巧,简单是它的优点。由 C 语言开发,采用面向对象的编程思维
五、参考文献
https://blog.csdn.net/weixin_56102526/article/details/121952050
版权声明:本文为CSDN博主「保护奶猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_55691662/article/details/122016507
一、RT-Thread 操作系统的特点和优势
RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件
内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。
RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。
有Bootloader框架,RT-Thread Nano-RTC-设备驱动框架,RT-Thread Nano-IWDT-设备驱动框架
二、准备工作
2.1 CubeMX 上下载 RT-Thread Nano pack 安装包
- Help -> Manage embedded software packages
- 添加NANO软件包
点击 From Url 按钮,进入 User Defined Packs Manager 界面,其次点击 new,填入网址https://www.st.com/en/development-tools/stm32cubemx.html
,然后点击 check,
安装软件包,点击install now
2.2 创建工程
芯片选择stm32f103c8
选择 Nano 组件
点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread
配置Nano:
这时会新增Software Packs展开就可以看见添加的RealThread.RT_Thread,勾选相应内容
RCC配置
SYS配置
串口配置
添加引脚A5,A6
NVIC取消选择
取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)
时钟树配置
三、代码修改
3.1 Keil添加 RT-Thread Nano 到工程
找到 RTOS,勾选 kernel,点击 OK
现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:
3.2 代码修改
创建任务
两个LED任务,一个灯每隔0.5秒闪烁,另一个灯在main.c中每隔一秒闪烁
在Application/USER文件夹下新建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_TogglePin(GPIOA,GPIO_PIN_6);
rt_thread_delay(500);
}
}
找到board.c文件,RT-Thread Nano 3.1.5生成的默认端口USART2,改为USART1
找到Application/User/Core里app_rt_thread.c下的rtconfig.h
在main.c文件中添加代码:
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
在main函数里添加如下代码
MX_RT_Thread_Init();
while循环中添加代码
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
rt_thread_delay(1000);
结果:
四、总结
RT-Thread与RTOS的主要区别之一,它不仅仅是一个实时内核,还具备了丰富的中间层组件。其内存资源占用极小。Nano开源免费,小巧,简单是它的优点。由 C 语言开发,采用面向对象的编程思维
五、参考文献
https://blog.csdn.net/weixin_56102526/article/details/121952050
版权声明:本文为CSDN博主「保护奶猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_55691662/article/details/122016507
暂无评论