基于野火stm32f407实现动态任务创建点亮LED灯
本文介绍了在STM32F4平台上使用FreeRTOS实现动态任务创建的过程。主要内容包括:1)添加FreeRTOS和板级支持包头文件;2)创建任务句柄和声明任务函数;3)在main()中初始化硬件并通过xTaskCreate()创建主任务APPTaskCreate;4)在主任务中动态创建LEDTask,控制LED闪烁并输出状态信息;5)使用任务调度器启动系统。代码实现了优先级为2的LED任务,每5
1.在main.c中添加FreeRTOS相关头文件和板载外设的头文件

2.创建需要的任务句柄

3.声明任务函数

4.main.c中的代码如下
/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"
/* 板载外设头文件 */
#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./usart/bsp_debug_usart.h"
/*****************任务句柄***********************/
static TaskHandle_t APPTaskHandle_t = NULL;
static TaskHandle_t LEDTaskHandle_t = NULL;
/*****************函数声明********************/
static void Bsp_Init(void);
static void APPTaskCreate(void);
static void LEDTask(void * params);
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
BaseType_t xReturn = pdPASS;
Bsp_Init();
printf("\r\n 这是一个任务动态创建实验 \r\n");
xReturn = xTaskCreate((TaskFunction_t)APPTaskCreate,
(const char*)"APPTaskCreate",
(uint16_t)128,
(void *)NULL,
(UBaseType_t)1,
(TaskHandle_t *)&APPTaskHandle_t);
if(pdPASS==xReturn)
//开启任务调度
vTaskStartScheduler();
else
return -1;
while(1);
}
//APPTaskCreate任务
static void APPTaskCreate(void)
{
//创建信息返回值
BaseType_t xReturn = pdPASS;
//进入临界区
taskENTER_CRITICAL();
xReturn = xTaskCreate((TaskFunction_t)LEDTask,
(const char*)"LEDTask",
(uint16_t)128,
(void *)NULL,
(UBaseType_t)2,
(TaskHandle_t *)&LEDTaskHandle_t);
if(pdPASS==xReturn)
printf("\r\n LED_Task任务创建成功 \r\n");
//删除任务
vTaskDelete(APPTaskHandle_t);
taskEXIT_CRITICAL();
}
//创建LEDTask
static void LEDTask(void * params)
{
while(1)
{
LED1_ON;
vTaskDelay(500);
printf("LED_Task Running,LED1_ON\r\n");
LED1_OFF;
vTaskDelay(500);
printf("LED_Task Running,LED1_OFF\r\n");
}
}
static void Bsp_Init(void)
{
LED_GPIO_Config();
Debug_USART_Config();
}
5.编译代码,成功如图所示

更多推荐


所有评论(0)