基于野火stm32f407实现多任务动态创建
1.包含FreeRTOS相关头文件和板载外设头文件

2.创建任务句柄

3.进行函数声明

4.在main.c中编写代码如下
int main(void)
{
//创建信息返回值
BaseType_t xReturn = pdPASS;
//板载外设初始化
BSP_Init();
printf("\r\n 这是动态创建多任务的实验 \r\n");
//创建APPTaskCreate任务
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);
}
static void APPTaskCreate(void)
{
//创建返回信息
BaseType_t xReturn = pdPASS;
//进入临界区
taskENTER_CRITICAL();
//创建LED1Task任务
xReturn = xTaskCreate((TaskFunction_t)LED1Task,
(const char *)"LED1Task",
(uint16_t)512,
(void *)NULL,
(UBaseType_t)2,
(TaskHandle_t *)&LED1TaskHandle_t);
if(pdPASS==xReturn)
printf("\r\n LED1任务创建成功 \r\n");
//创建LED2Task任务
xReturn = xTaskCreate((TaskFunction_t)LED2Task,
(const char *)"LED2Task",
(uint16_t)512,
(void *)NULL,
(UBaseType_t)3,
(TaskHandle_t *)&LED2TaskHandle_t);
if(pdPASS==xReturn)
printf("\r\n LED2任务创建成功 \r\n");
//删除任务
vTaskDelete(APPTaskHandle_t);
//退出临界区
taskEXIT_CRITICAL();
}
static void LED1Task(void * params)
{
while(1)
{
LED1_ON;
vTaskDelay(500);
printf("LED1_Task Running,LED1_ON\r\n");
LED1_OFF;
vTaskDelay(500);
printf("LED1_Task Running,LED1_OFF\r\n");
}
}
static void LED2Task(void * params)
{
while(1)
{
LED2_ON;
vTaskDelay(500);
printf("LED2_Task Running,LED2_ON\r\n");
LED2_OFF;
vTaskDelay(500);
printf("LED2_Task Running,LED2_OFF\r\n");
}
}
static void BSP_Init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
LED_GPIO_Config();
Debug_USART_Config();
}
5.编译代码成功如图所示

