更新时间:2021-07-08 GMT+08:00
编程实例
实例描述
本实例介绍基本的任务操作方法,包含2个不同优先级任务的创建、任务延时、任务锁与解锁调度、挂起和恢复等操作,阐述任务优先级调度的机制以及各接口的应用。
编程示例
前提条件:在menuconfig菜单中完成任务模块的配置。
UINT32 g_taskHiId; UINT32 g_taskLoId; #define TSK_PRIOR_HI 4 #define TSK_PRIOR_LO 5 UINT32 Example_TaskHi(VOID) { UINT32 ret; printf("Enter TaskHi Handler.\r\n"); /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(g_taskLoId任务) */ ret = LOS_TaskDelay(2); if (ret != LOS_OK) { printf("Delay Task Failed.\r\n"); return LOS_NOK; } /* 2个Tick时间到了后,该任务恢复,继续执行 */ printf("TaskHi LOS_TaskDelay Done.\r\n"); /* 挂起自身任务 */ ret = LOS_TaskSuspend(g_taskHiId); if (ret != LOS_OK) { printf("Suspend TaskHi Failed.\r\n"); return LOS_NOK; } printf("TaskHi LOS_TaskResume Success.\r\n"); return ret; } /* 低优先级任务入口函数 */ UINT32 Example_TaskLo(VOID) { UINT32 ret; printf("Enter TaskLo Handler.\r\n"); /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(背景任务) */ ret = LOS_TaskDelay(2); if (ret != LOS_OK) { printf("Delay TaskLo Failed.\r\n"); return LOS_NOK; } printf("TaskHi LOS_TaskSuspend Success.\r\n"); /* 恢复被挂起的任务g_taskHiId */ ret = LOS_TaskResume(g_taskHiId); if (ret != LOS_OK) { printf("Resume TaskHi Failed.\r\n"); return LOS_NOK; } printf("TaskHi LOS_TaskDelete Success.\r\n"); return ret; } /* 任务测试入口函数,创建两个不同优先级的任务 */ UINT32 Example_TskCaseEntry(VOID) { UINT32 ret; TSK_INIT_PARAM_S initParam; /* 锁任务调度,防止新创建的任务比本任务高而发生调度 */ LOS_TaskLock(); printf("LOS_TaskLock() Success!\r\n"); initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskHi; initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "TaskHi"; initParam.uwStackSize = LOSCFG_TASK_MIN_STACK_SIZE; initParam.uwResved = LOS_TASK_STATUS_DETACHED; /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskHiId, &initParam); if (ret != LOS_OK) { LOS_TaskUnlock(); printf("Example_TaskHi create Failed!\r\n"); return LOS_NOK; } printf("Example_TaskHi create Success!\r\n"); initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskLo; initParam.usTaskPrio = TSK_PRIOR_LO; initParam.pcName = "TaskLo"; initParam.uwStackSize = LOSCFG_TASK_MIN_STACK_SIZE; initParam.uwResved = LOS_TASK_STATUS_DETACHED; /* 创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskLoId, &initParam); if (ret != LOS_OK) { LOS_TaskUnlock(); printf("Example_TaskLo create Failed!\r\n"); return LOS_NOK; } printf("Example_TaskLo create Success!\r\n"); /* 解锁任务调度,此时会发生任务调度,执行就绪队列中最高优先级任务 */ LOS_TaskUnlock(); return LOS_OK; }
结果验证
编译运行得到的结果为:
LOS_TaskLock() Success! Example_TaskHi create Success! Example_TaskLo create Success! Enter TaskHi Handler. Enter TaskLo Handler. TaskHi LOS_TaskDelay Done. TaskHi LOS_TaskSuspend Success. TaskHi LOS_TaskResume Success. TaskHi LOS_TaskDelete Success.
完整实例代码
父主题: 任务