前言
本次实验需要提前安装好RT-thread Nano。教程如下
https://blog.csdn.net/qq_36075612/article/details/107309750
获取RT-Thread Nano软件包
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
一、RT-Thread与UCOS的简单比较
- 任务或线程调度
RT-Thread可选优先级抢占式调度,256/32/8个优先级,线程数不限。相同优先级线程时间片轮转调度。支持动态创建/销毁线程。
Ucos优先级抢占式调度。不允许相同优先级任务存在。256个优先级,最大256个任务。
FreeRTOS优先级抢占式调度,允许存在相同优先级线程。任务数不受限制。 - 同步/通信机制
RT-Thread支持semaphore、mutex、mailbox、message queue、event。mailbox可存储多条消息,任务等待可按照优先级进行排队。
UCOS信号量、互斥量、事件集、邮箱(邮箱最多只能存放一条消息),消息队列。
FreeRTOS信号量、互斥量、消息队列。 - 内存管理
RT-Thread固定分区内存管理,小内存系统动态内存管理,大内存系统SLAB内存管理。
FreeRTOS动态内存。
UCOS固定大小内存管理。 - 定时器
RT-Thread挂接到系统OS定时器的硬件定时器。
FreeRTOS依赖vTaskDelat()进行时间间隔处理。
UCOS只能使用OSTimeDly进行时间间隔处理。 - 中断嵌套
RT-Thread–允许
FreeRTOS-允许
UCOS --不允许
二、使用RT-Thread开发的理由
免费开源
精巧、稳定、高效的实时内核,同时也是经过产品考核的实时内核。
由国内一批技术功底深厚的开发者进行维护
该系统支持ARM Cortex-M3系统移植分支尤其对STM32提供了功能齐全的BSP开发包。实现驱动包括:串口、网络、SD卡、USB接口等;支持所有系统组件:基本系统、TCP/IP协议栈。文件系统、图形界面。
三、项目创建
-
配置SYS:
-
配置RT-Thread
先选择Select Components
勾选如下
-
配置NVIC:
-
RCC配置
-
配置使USART1(此处使用PA3和PA4)
-
项目配置
四、修改Keil里面的文件
- 新建名为app_rt_thread的文件
代码如下
#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);
}
}
编译后,修改rtconfig.h中的注释
- 修改board.c中uart_init函数里的USART2为USART1
- 修改main
添加
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);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);
rt_thread_delay(1000);
五、运行结果
提示
烧录时Boot0置1
查看结果时Boot0置0,并Reset
参考文章
https://blog.csdn.net/YouthBlood9/article/details/122248262?spm=1001.2014.3001.5501
版权声明:本文为CSDN博主「J-JMF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JMFLFZYF/article/details/122254159
前言
本次实验需要提前安装好RT-thread Nano。教程如下
https://blog.csdn.net/qq_36075612/article/details/107309750
获取RT-Thread Nano软件包
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
一、RT-Thread与UCOS的简单比较
- 任务或线程调度
RT-Thread可选优先级抢占式调度,256/32/8个优先级,线程数不限。相同优先级线程时间片轮转调度。支持动态创建/销毁线程。
Ucos优先级抢占式调度。不允许相同优先级任务存在。256个优先级,最大256个任务。
FreeRTOS优先级抢占式调度,允许存在相同优先级线程。任务数不受限制。 - 同步/通信机制
RT-Thread支持semaphore、mutex、mailbox、message queue、event。mailbox可存储多条消息,任务等待可按照优先级进行排队。
UCOS信号量、互斥量、事件集、邮箱(邮箱最多只能存放一条消息),消息队列。
FreeRTOS信号量、互斥量、消息队列。 - 内存管理
RT-Thread固定分区内存管理,小内存系统动态内存管理,大内存系统SLAB内存管理。
FreeRTOS动态内存。
UCOS固定大小内存管理。 - 定时器
RT-Thread挂接到系统OS定时器的硬件定时器。
FreeRTOS依赖vTaskDelat()进行时间间隔处理。
UCOS只能使用OSTimeDly进行时间间隔处理。 - 中断嵌套
RT-Thread–允许
FreeRTOS-允许
UCOS --不允许
二、使用RT-Thread开发的理由
免费开源
精巧、稳定、高效的实时内核,同时也是经过产品考核的实时内核。
由国内一批技术功底深厚的开发者进行维护
该系统支持ARM Cortex-M3系统移植分支尤其对STM32提供了功能齐全的BSP开发包。实现驱动包括:串口、网络、SD卡、USB接口等;支持所有系统组件:基本系统、TCP/IP协议栈。文件系统、图形界面。
三、项目创建
-
配置SYS:
-
配置RT-Thread
先选择Select Components
勾选如下
-
配置NVIC:
-
RCC配置
-
配置使USART1(此处使用PA3和PA4)
-
项目配置
四、修改Keil里面的文件
- 新建名为app_rt_thread的文件
代码如下
#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);
}
}
编译后,修改rtconfig.h中的注释
- 修改board.c中uart_init函数里的USART2为USART1
- 修改main
添加
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);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);
rt_thread_delay(1000);
五、运行结果
提示
烧录时Boot0置1
查看结果时Boot0置0,并Reset
参考文章
https://blog.csdn.net/YouthBlood9/article/details/122248262?spm=1001.2014.3001.5501
版权声明:本文为CSDN博主「J-JMF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JMFLFZYF/article/details/122254159
暂无评论