文章目录[隐藏]
一、CubeMX创建项目
1.添加RT-Thread操作系统组件
获取RT-Thread Nano软件包链接:
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
打开CubeMX:
2.配置项目
开发板选择STM32F103C8T6
设置引脚PA3,PA4为GPIO_Output
,用来点亮LED
设置SYS:
设置NVIC:
配置好了之后下载项目
二、创建任务
在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);
//初始化线程函数
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);
}
}
找到Middlewares/RT-Thread/RTOS/kernel文件夹下的board.c文件,修改串口USART2为USART1。
取消注释#include "finsh_config.h"
在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 */
main函数中while添加一个新线程:
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
rt_thread_delay(1000);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);
三、运行结果
四、参考文献
版权声明:本文为CSDN博主「ww丶121」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanerXR/article/details/122544665
一、RT-Thread 操作系统的特点和优势
RT-Thread可选优先级抢占式调度,256/32/8个优先级,线程数不限。相同优先级线程时间片轮转调度。支持动态创建/销毁线程.RT-Thread固定分区内存管理,小内存系统动态内存管理,大内存系统SLAB内存管理.RT-Thread支持semaphore、mutex、mailbox、message queue、event。mailbox可存储多条消息,任务等待可按照优先级进行排队。
UCOS信号量、互斥量、事件集、邮箱(邮箱最多只能存放一条消息),消息队列。
RT-Thread是由中国开源社区主导开发的开源实时操作系统。它的优点是精巧、高效、稳定的实时内核。
二、准备工作
2.1 CubeMX 上下载 RT-Thread Nano pack 安装包
1.Help -> Manage embedded software packages
点击 From Url 按钮,进入 User Defined Packs Manager 界面,其次点击 new,填入网址https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc,然后点击 check,
2.2 创建工程
芯片选择stm32f103c8
选择 Nano 组件
点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread
配置Nano:
RCC配置:
SYS配置:
串口配置:
添加引脚A5,A6
NVIC取消选择
取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)
时钟树配置:
三、代码修改
在网上下载RT-THREAD:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil
3.1 Keil添加 RT-Thread Nano 到工程
找到 RTOS,勾选 kernel,点击 OK
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);
MX_RT_Thread_Init();
while循环中添加代码:
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
rt_thread_delay(1000);
参考文献:https://blog.csdn.net/qq_55691662/article/details/122016507?spm=1001.2014.3001.5501
版权声明:本文为CSDN博主「xieyang929」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xieyang929/article/details/122559553
一、RT-Thread 操作系统的特点和优势
RT-Thread可选优先级抢占式调度,256/32/8个优先级,线程数不限。相同优先级线程时间片轮转调度。支持动态创建/销毁线程.RT-Thread固定分区内存管理,小内存系统动态内存管理,大内存系统SLAB内存管理.RT-Thread支持semaphore、mutex、mailbox、message queue、event。mailbox可存储多条消息,任务等待可按照优先级进行排队。
UCOS信号量、互斥量、事件集、邮箱(邮箱最多只能存放一条消息),消息队列。
RT-Thread是由中国开源社区主导开发的开源实时操作系统。它的优点是精巧、高效、稳定的实时内核。
二、准备工作
2.1 CubeMX 上下载 RT-Thread Nano pack 安装包
1.Help -> Manage embedded software packages
点击 From Url 按钮,进入 User Defined Packs Manager 界面,其次点击 new,填入网址https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc,然后点击 check,
2.2 创建工程
芯片选择stm32f103c8
选择 Nano 组件
点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread
配置Nano:
RCC配置:
SYS配置:
串口配置:
添加引脚A5,A6
NVIC取消选择
取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)
时钟树配置:
三、代码修改
在网上下载RT-THREAD:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil
3.1 Keil添加 RT-Thread Nano 到工程
找到 RTOS,勾选 kernel,点击 OK
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);
MX_RT_Thread_Init();
while循环中添加代码:
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
rt_thread_delay(1000);
参考文献:https://blog.csdn.net/qq_55691662/article/details/122016507?spm=1001.2014.3001.5501
版权声明:本文为CSDN博主「xieyang929」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xieyang929/article/details/122559553
一、CubeMX创建项目
1.添加RT-Thread操作系统组件
获取RT-Thread Nano软件包链接:
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
打开CubeMX:
2.配置项目
开发板选择STM32F103C8T6
设置引脚PA3,PA4为GPIO_Output
,用来点亮LED
设置SYS:
设置NVIC:
配置好了之后下载项目
二、创建任务
在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);
//初始化线程函数
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);
}
}
找到Middlewares/RT-Thread/RTOS/kernel文件夹下的board.c文件,修改串口USART2为USART1。
取消注释#include "finsh_config.h"
在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 */
main函数中while添加一个新线程:
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
rt_thread_delay(1000);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);
三、运行结果
四、参考文献
版权声明:本文为CSDN博主「ww丶121」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanerXR/article/details/122544665
暂无评论