基于野火stm32f407实现动态任务创建点亮LED灯
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)