【LiteOS】小白进阶之如何创建 LiteOS 任务(三)
【摘要】
1、任务结构体
typedef struct tagTskInitParam{ TSK_ENTRY_FUNC pfnTaskEntry; &nbs...
1、任务结构体
-
typedef struct tagTskInitParam
-
{
-
TSK_ENTRY_FUNC pfnTaskEntry; /**< Task entrance function */
-
UINT16 usTaskPrio; /**< Task priority */
-
UINT32 auwArgs[4]; /**< Task parameters, of which the maximum number is four */
-
UINT32 uwStackSize; /**< Task stack size */
-
CHAR *pcName; /**< Task name */
-
UINT32 uwResved; /**< Reserved. It is automatically deleted if set to LOS_TASK_STATUS_DETACHED. It is unable to be deleted if set to 0.*/
-
} TSK_INIT_PARAM_S;
auwArgs:
是指任务入口参数,比如任务入口参数为 void Task1(UINT32 arg);
在创建任务时将xx.auwArgs[0]=0,在刚开始调取任务时就会将 0 传到 Task1 函数。
pcName:
任务名称,这个是不能给空的
uwResved:
这个并不是保留的,而是定义在任务执行完后要不要自删除,LOS_TASK_STATUS_DETACHED
2、任务创建
-
UINT32 g_uwTskLoID;
-
UINT32 g_uwTskHiID;
-
#define TSK_PRIOR_HI 4
-
#define TSK_PRIOR_LO 5
2.1、创建两个任务
创建任务时要锁任务调度。
-
UINT32 Example_TskCaseEntry(VOID)
-
{
-
UINT32 uwRet;
-
TSK_INIT_PARAM_S stInitParam;
-
-
// 锁任务调度
-
LOS_TaskLock();
-
-
printf("LOS_TaskLock() Success!\r\n");
-
-
stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskHi;
-
stInitParam.usTaskPrio = TSK_PRIOR_HI;
-
stInitParam.pcName = "HIGH_NAME";
-
stInitParam.uwStackSize = 0x400;
-
stInitParam.uwResved = LOS_TASK_STATUS_DETACHED;
-
-
// 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行
-
uwRet = LOS_TaskCreate(&g_uwTskHiID, &stInitParam);
-
if (uwRet != LOS_OK)
-
{
-
LOS_TaskUnlock();
-
-
printf("Example_TaskHi create Failed!\r\n");
-
return LOS_NOK;
-
}
-
-
printf("Example_TaskHi create Success!\r\n");
-
-
stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskLo;
-
stInitParam.usTaskPrio = TSK_PRIOR_LO;
-
stInitParam.pcName = "LOW_NAME";
-
stInitParam.uwStackSize = 0x400;
-
stInitParam.uwResved = LOS_TASK_STATUS_DETACHED;
-
-
/*创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行*/
-
uwRet = LOS_TaskCreate(&g_uwTskLoID, &stInitParam);
-
if (uwRet != LOS_OK)
-
{
-
LOS_TaskUnlock();
-
-
printf("Example_TaskLo create Failed!\r\n");
-
return LOS_NOK;
-
}
-
-
printf("Example_TaskLo create Success!\r\n");
-
-
// 解锁任务调度,此时会发生任务调度,执行就绪列表中最高优先级任务
-
LOS_TaskUnlock();
-
-
while(1){};
-
-
return LOS_OK;
-
}
2.2、高优先级任务
-
UINT32 Example_TaskHi()
-
{
-
UINT32 uwRet;
-
UINT32 uwCurrentID;
-
TSK_INFO_S stTaskInfo;
-
-
printf("Enter TaskHi Handler.\r\n");
-
-
// 延时 2 个 Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(g_uwTskLoID任务)
-
uwRet = LOS_TaskDelay(2);
-
if (uwRet != LOS_OK)
-
{
-
printf("Delay Task Failed.\r\n");
-
return LOS_NOK;
-
}
-
-
// 2 个 Tick 时间到了后,该任务恢复,继续执行
-
printf("TaskHi LOS_TaskDelay Done.\r\n");
-
-
// 挂起自身任务
-
uwRet = LOS_TaskSuspend(g_uwTskHiID);
-
if (uwRet != LOS_OK)
-
{
-
printf("Suspend TaskHi Failed.\r\n");
-
return LOS_NOK;
-
}
-
-
printf("TaskHi LOS_TaskResume Success.\r\n");
-
}
2.3、低优先级任务
-
UINT32 Example_TaskLo()
-
{
-
UINT32 uwRet;
-
UINT32 uwCurrentID;
-
TSK_INFO_S stTaskInfo;
-
-
printf("Enter TaskLo Handler.\r\n");
-
-
// 延时2个Tick,延时后该任务会挂起,执行剩余任务中就高优先级的任务(背景任务)
-
uwRet = LOS_TaskDelay(2);
-
if (uwRet != LOS_OK)
-
{
-
printf("Delay TaskLo Failed.\r\n");
-
return LOS_NOK;
-
}
-
-
printf("TaskHi LOS_TaskSuspend Success.\r\n");
-
-
// 恢复被挂起的任务 g_uwTskHiID
-
uwRet = LOS_TaskResume(g_uwTskHiID);
-
if (uwRet != LOS_OK)
-
{
-
printf("Resume TaskHi Failed.\r\n");
-
return LOS_NOK;
-
}
-
-
printf("TaskHi LOS_TaskDelete Success.\r\n");
-
}
-
文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/liwei16611/article/details/86580941
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)