2.1 任务创建函数:xTaskCreate() 用于创建一个任务。
/*********************************************************************************
* 函数名: xTaskCreate
* 功能: 任务创建
* 输入: pxTaskCode [任务函数名]
* pcName [任务名]
* usStackDepth[任务堆栈大小]
* pvParameters[任务函数参数]
* uxPriority[任务优先级]
* pxCreatedTask[任务句柄]
* 输出: pdPASS [创建成功]
* 其他 [创建失败]
*********************************************************************************/
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
const char * const pcName,
const uint16_t usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask );
2.2 任务删除函数: vTaskDelete() 用于删除xTaskCreate()创建的任务。
/*********************************************************************************
* 函数名: vTaskDelete
* 功能: 任务删除
* 输入: xTaskToDelete[任务句柄]
* 输出: 无
*********************************************************************************/
void vTaskDelete( TaskHandle_t xTaskToDelete );
2.3 示例
#define TASK1_TASK_PRIO 2 //任务优先级
#define TASK1_STK_SIZE 256 //任务堆栈大小
TaskHandle_t Task1Task_Handler; //任务句柄
void task1_task(void *pvParameters); //任务函数
#define TASK2_TASK_PRIO 3 //任务优先级
#define TASK2_STK_SIZE 256 //任务堆栈大小
TaskHandle_t Task2Task_Handler; //任务句柄
void task2_task(void *pvParameters); //任务函数
int main()
{
// 创建任务一
BaseType_t res = xTaskCreate((TaskFunction_t )task1_task, // 入口函数
(const char* )"task1_task", // 任务名
(uint16_t )TASK1_STK_SIZE, // 任务堆栈大小
(void* )NULL, // 入口函数参数
(UBaseType_t )TASK1_TASK_PRIO, // 任务优先级
(TaskHandle_t* )&Task1Task_Handler); // 任务句柄
if(pdPASS != res) // 创建任务失败
{
while(1);// 打断处理
}
// 创建任务二
BaseType_t res2 = xTaskCreate((TaskFunction_t )task2_task, // 入口函数
(const char* )"task2_task", // 任务名
(uint16_t )TASK2_STK_SIZE, // 任务堆栈大小
(void* )NULL, // 入口函数参数
(UBaseType_t )TASK2_TASK_PRIO, // 任务优先级
(TaskHandle_t* )&Task2Task_Handler); // 任务句柄
if(pdPASS != res2) // 创建任务失败
{
while(1);// 打断处理
}
vTaskStartScheduler();
}
// 创建任务成功并开始调度后,下面函数便可以执行
void task1_task(void *pvParameters)
{
while(1)
{
printf("task1 is running\r\n");
vTaskDelay(1000);
}
}
// 创建任务成功并开始调度后,下面函数便可以执行
void task2_task(void *pvParameters)
{
vTaskDelete(Task1Task_Handler); // 删除任务1,删除后task1_task函数将不再运行,并删除对应空间
while(1)
{
printf("task2 is running\r\n");
vTaskDelay(10);
}
}