动态创建/* START_TASK 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define START_TASK_PRIO 1 /* 任务优先级 */ #define START_STK_SIZE 128 /* 任务堆栈大小 */ TaskHandle_t StartTask_Handler; /* 任务句柄 */ void start_task(void *pvParameters); /* 任务函数 */ /* TASK1 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define TASK1_PRIO 2 /* 任务优先级 */ #define TASK1_STK_SIZE 128 /* 任务堆栈大小 */ TaskHandle_t Task1Task_Handler; /* 任务句柄 */ void task1(void *pvParameters); /* 任务函数 */ /* TASK2 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define TASK2_PRIO 3 /* 任务优先级 */ #define TASK2_STK_SIZE 128 /* 任务堆栈大小 */ TaskHandle_t Task2Task_Handler; /* 任务句柄 */ void task2(void *pvParameters); /* 任务函数 */ /* TASK3 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define TASK3_PRIO 4 /* 任务优先级 */ #define TASK3_STK_SIZE 128 /* 任务堆栈大小 */ TaskHandle_t Task3Task_Handler; /* 任务句柄 */ void task3(void *pvParameters); /* 任务函数 */ /** * brief FreeRTOS例程入口函数 * param 无 * retval 无 */ void freertos_demo(void) { lcd_show_string(10, 10, 220, 32, 32, STM32, RED); lcd_show_string(10, 47, 220, 24, 24, Task Create Del, RED); lcd_show_string(10, 76, 220, 16, 16, ATOMALIENTEK, RED); lcd_draw_rectangle(5, 110, 115, 314, BLACK); lcd_draw_rectangle(125, 110, 234, 314, BLACK); lcd_draw_line(5, 130, 115, 130, BLACK); lcd_draw_line(125, 130, 234, 130, BLACK); lcd_show_string(15, 111, 110, 16, 16, Task1: 000, BLUE); lcd_show_string(135, 111, 110, 16, 16, Task2: 000, BLUE); xTaskCreate((TaskFunction_t )start_task, /* 任务函数 */ (const char* )start_task, /* 任务名称 */ (uint16_t )START_STK_SIZE, /* 任务堆栈大小 */ (void* )NULL, /* 传入给任务函数的参数 */ (UBaseType_t )START_TASK_PRIO, /* 任务优先级 */ (TaskHandle_t* )StartTask_Handler); /* 任务句柄 */ vTaskStartScheduler(); } /** * brief start_task * param pvParameters : 传入参数(未用到) * retval 无 */ void start_task(void *pvParameters) { taskENTER_CRITICAL(); /* 进入临界区 */ /* 创建任务1 */ xTaskCreate((TaskFunction_t )task1, /* 任务函数 */ (const char* )task1, /* 任务名称 */ (uint16_t )TASK1_STK_SIZE, /* 任务堆栈大小 */ (void* )NULL, /* 传入给任务函数的参数 */ (UBaseType_t )TASK1_PRIO, /* 任务优先级 */ (TaskHandle_t* )Task1Task_Handler); /* 任务句柄 */ /* 创建任务2 */ xTaskCreate((TaskFunction_t )task2, /* 任务函数 */ (const char* )task2, /* 任务名称 */ (uint16_t )TASK2_STK_SIZE, /* 任务堆栈大小 */ (void* )NULL, /* 传入给任务函数的参数 */ (UBaseType_t )TASK2_PRIO, /* 任务优先级 */ (TaskHandle_t* )Task2Task_Handler); /* 任务句柄 */ /* 创建任务3 */ xTaskCreate((TaskFunction_t )task3, /* 任务函数 */ (const char* )task3, /* 任务名称 */ (uint16_t )TASK3_STK_SIZE, /* 任务堆栈大小 */ (void* )NULL, /* 传入给任务函数的参数 */ (UBaseType_t )TASK3_PRIO, /* 任务优先级 */ (TaskHandle_t* )Task3Task_Handler); /* 任务句柄 */ vTaskDelete(StartTask_Handler); /* 删除开始任务 */ taskEXIT_CRITICAL(); /* 退出临界区 */ }静态创建/* START_TASK 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define START_TASK_PRIO 1 /* 任务优先级 */ #define START_STK_SIZE 128 /* 任务堆栈大小 */ StackType_t StartTaskStack[START_STK_SIZE]; /* 任务堆栈 */ StaticTask_t StartTaskTCB; /* 任务控制块 */ TaskHandle_t StartTask_Handler; /* 任务句柄 */ void start_task(void *pvParameters); /* 任务函数 */ /* TASK1 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define TASK1_PRIO 2 /* 任务优先级 */ #define TASK1_STK_SIZE 128 /* 任务堆栈大小 */ StackType_t Task1TaskStack[TASK1_STK_SIZE]; /* 任务堆栈 */ StaticTask_t Task1TaskTCB; /* 任务控制块 */ TaskHandle_t Task1Task_Handler; /* 任务句柄 */ void task1(void *pvParameters); /* 任务函数 */ /* TASK2 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define TASK2_PRIO 3 /* 任务优先级 */ #define TASK2_STK_SIZE 128 /* 任务堆栈大小 */ StackType_t Task2TaskStack[TASK2_STK_SIZE]; /* 任务堆栈 */ StaticTask_t Task2TaskTCB; /* 任务控制块 */ TaskHandle_t Task2Task_Handler; /* 任务句柄 */ void task2(void *pvParameters); /* 任务函数 */ /* TASK3 任务 配置 * 包括: 任务句柄 任务优先级 堆栈大小 创建任务 */ #define TASK3_PRIO 4 /* 任务优先级 */ #define TASK3_STK_SIZE 128 /* 任务堆栈大小 */ StackType_t Task3TaskStack[TASK3_STK_SIZE]; /* 任务堆栈 */ StaticTask_t Task3TaskTCB; /* 任务控制块 */ TaskHandle_t Task3Task_Handler; /* 任务句柄 */ void task3(void *pvParameters); /* 任务函数 */ /** * brief FreeRTOS例程入口函数 * param 无 * retval 无 */ void freertos_demo(void) { lcd_show_string(10, 10, 220, 32, 32, STM32, RED); lcd_show_string(10, 47, 220, 24, 24, Task Create Del, RED); lcd_show_string(10, 76, 220, 16, 16, ATOMALIENTEK, RED); lcd_draw_rectangle(5, 110, 115, 314, BLACK); lcd_draw_rectangle(125, 110, 234, 314, BLACK); lcd_draw_line(5, 130, 115, 130, BLACK); lcd_draw_line(125, 130, 234, 130, BLACK); lcd_show_string(15, 111, 110, 16, 16, Task1: 000, BLUE); lcd_show_string(135, 111, 110, 16, 16, Task2: 000, BLUE); StartTask_Handler xTaskCreateStatic((TaskFunction_t )start_task, /* 任务函数 */ (const char* )start_task, /* 任务名称 */ (uint32_t )START_STK_SIZE, /* 任务堆栈大小 */ (void* )NULL, /* 传递给任务函数的参数 */ (UBaseType_t )START_TASK_PRIO, /* 任务优先级 */ (StackType_t* )StartTaskStack, /* 任务堆栈 */ (StaticTask_t* )StartTaskTCB); /* 任务控制块 */ vTaskStartScheduler(); } /** * brief start_task * param pvParameters : 传入参数(未用到) * retval 无 */ void start_task(void *pvParameters) { taskENTER_CRITICAL(); /* 进入临界区 */ /* 创建任务1 */ Task1Task_Handler xTaskCreateStatic((TaskFunction_t )task1, /* 任务函数 */ (const char* )task1, /* 任务名称 */ (uint32_t )TASK1_STK_SIZE,/* 任务堆栈大小 */ (void* )NULL, /* 传递给任务函数的参数 */ (UBaseType_t )TASK1_PRIO, /* 任务优先级 */ (StackType_t* )Task1TaskStack,/* 任务堆栈 */ (StaticTask_t* )Task1TaskTCB);/* 任务控制块 */ /* 创建任务2 */ Task2Task_Handler xTaskCreateStatic((TaskFunction_t )task2, /* 任务函数 */ (const char* )task2, /* 任务名称 */ (uint32_t )TASK2_STK_SIZE,/* 任务堆栈大小 */ (void* )NULL, /* 传递给任务函数的参数 */ (UBaseType_t )TASK2_PRIO, /* 任务优先级 */ (StackType_t* )Task2TaskStack,/* 任务堆栈 */ (StaticTask_t* )Task2TaskTCB);/* 任务控制块 */ /* 创建任务3 */ Task3Task_Handler xTaskCreateStatic((TaskFunction_t )task3, /* 任务函数 */ (const char* )task3, /* 任务名称 */ (uint32_t )TASK3_STK_SIZE,/* 任务堆栈大小 */ (void* )NULL, /* 传递给任务函数的参数 */ (UBaseType_t )TASK3_PRIO, /* 任务优先级 */ (StackType_t* )Task3TaskStack,/* 任务堆栈 */ (StaticTask_t* )Task3TaskTCB);/* 任务控制块 */ vTaskDelete(StartTask_Handler); /* 删除开始任务 */ taskEXIT_CRITICAL(); /* 退出临界区 */ }