基于RTT Nano的多任务嵌入式程序设计【嵌入式】

一、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);

三、运行结果

请添加图片描述

四、参考文献

STM32的RT-Thread-Nano移植

版权声明:本文为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);

三、运行结果

请添加图片描述

四、参考文献

STM32的RT-Thread-Nano移植

版权声明:本文为CSDN博主「ww丶121」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanerXR/article/details/122544665

生成海报
点赞 0

ww丶121

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于STM32的指纹密码锁

设计简介: 本设计是基于单片机的指纹密码锁,主要实现以下功能: 矩阵按键输入密码,并通过按键显示*号可通过按键或手机开门密码可通过按键进行开门可通过蓝牙模块连接手机进行开门可通过指纹进

定时器触发STM32 ADC的采样转换示例

开发板:STM32F446 Nucleo开发板IDE:  keil MDK初始化配置工具:stm32cubeMx例程内容:通过定时器触发ADC规则通道及注入通道的模数转换工作。下面基于STM32CubeMx进行些必要