基于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

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

暂无评论

发表评论

相关推荐

三相电机相电感,相电阻和极对数的测量

相电阻测量: 方法一:可使用万用表电阻档直接测量其中两端 方法二:可使用LCR数字电桥仪器测量 万用表操作: 将万用表旋转到电阻档的适当量程内 将万用表上的两表笔接触在电机的其中任意

DDR3基础详解

DDR3基础详解最近在IMX6平台下做DDR3的测试接口开发,以前在学习嵌入式时,用的是官方源码,没有做过多的研究。此时需要仔细研究DDR3的引脚与时序,此篇是我在学习DDR3做的归纳与总

STM32G474_FDCAN的普通CAN模式使用

由于鄙人比较懒,因此本文章只是对 FDCAN 的 经典模式 的简单使用介绍。对于我不需要使用的功能 我就没有深入研究,因此本文只是 CAN 的常用方式的笔记,深入研究的话可以详细阅读手册,