1、简介
通过STM32CubeMX配置Freertos后,建立的任务都在freertos.c文件中,不易于观察,并且每次生成新任务还需要打开STM32CubeMX,本次教程讲解一种通过STM32CubeMX配置Freertos后在程序中进行任务创建,起到类似添加传感器建立新的文件的效果。
2、文件添加
在源文件目录中建立Thread文件:
接着在Thread文件中建立Src、Inc文件分别建立新的线程MainThread.cpp、MainThread.h文件:
3、 Keil 5程序设计
3.1 MainThread.cpp文件添加
/**
******************************************************************************
* File Name : MainThread.cpp
* Description : 主控制线程
******************************************************************************
* @attention
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "MainThread.h"
/* Functions -----------------------------------------------------------------*/
/**
* @brief 主线程函数(应用层)
* @retval None
*/
void MainTask(void *argument){
//
while(1){
osDelay(4);
}
}
/**
* @brief 主控制线程初始化
* @retval None
*/
void MainThread_Init(void){
const osThreadAttr_t MainTask_attributes = {"MainTask",0,0,0,0,128,(osPriority_t) osPriorityNormal};
osThreadNew(MainTask, NULL, &MainTask_attributes);//创建主线程
}
/**********************************END OF FILE*********************************/
3.2 MainThread.h文件添加
/**
******************************************************************************
* File Name : MainThread.h
* Description :
******************************************************************************
* @attention
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MainThread_H
#define __MainThread_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "cmsis_os.h"
#include "FreeRTOS.h"
#include "task.h"
void MainThread_Init(void);
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/
/**
* @}
*/
/**********************************END OF FILE***********************************/
4、线程的建立与初始化
在源文件中对线程的名称进行设定,例如本次建立的任务命名为MainTask,仅仅需要对MainThread_Init()函数在main.c中进行初始化即可建立MainTask任务。
4.1 头文件添加
#include "MainThread.h"
4.2 任务初始化
4.3 任务测试
HAL_UART_Transmit(&huart1,(uint8_t *)"MainTask任务\r\n",12,0xFFFF);
osDelay(400);
测试结果:
上文如有错误恳请各位大佬指正!