个人笔记。
创建一个任务xTaskCreate()需要用到任务入口函数、任务名字、任务栈大小、任务入口函数参数、任务的优先级、任务控制块指针也就是任务句柄。
例:static TaskHandle_t LED_Task_Handle = NULL;/* LED_Task任务句柄 */
int main(void)
{ BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate, /* 任务入口函数 */
(const char* )"AppTaskCreate",/* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL,/* 任务入口函数参数 */
(UBaseType_t )1, /* 任务的优先级 */
(TaskHandle_t* )&AppTaskCreate_Handle);/* 任务控制块指针 */
/* 启动任务调度 */
if(pdPASS == xReturn)
vTaskStartScheduler(); /* 启动任务,开启调度 */
while(1);
}
static void AppTaskCreate(void)
{
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
taskENTER_CRITICAL(); //进入临界区
/* 创建LED_Task任务 */
xReturn = xTaskCreate((TaskFunction_t )LED_Task, /* 任务入口函数 */
(const char* )"LED_Task",/* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )2, /* 任务的优先级 */
(TaskHandle_t* )&LED_Task_Handle);/* 任务控制块指针 */
if(pdPASS == xReturn)
printf("创建LED_Task任务成功\n");
vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
taskEXIT_CRITICAL(); //退出临界区
}
static void LED_Task(void* parameter)
{
while (1)
{
LED1_TOGGLE;
vTaskDelay(1000);/* 延时1000个tick */
}
}
任务就绪函数为vTaskResume(),调用的为任务句柄,任务准备执行
例: vTaskResume(LED_Task_Handle); //LED任务由挂起态转为就绪态
任务挂起函数为vTaskSuspend(),将任务挂起
例:vTaskSuspend(LED_Task_Handle); //LED任务由就绪态转为挂起态
如果在某个任务中使用vTaskSuspend(NULL)则表示将任务自己挂起。