From 741326c1b3a341f2ab2d992e3d03c99caf9d6c84 Mon Sep 17 00:00:00 2001 From: zhushengle Date: Tue, 14 Dec 2021 17:29:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=86=85=E6=A0=B8=E6=96=B0=E5=A2=9ELOS?= =?UTF-8?q?=5FTaskJoin=E5=92=8CLOS=5FTaskDetach=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E6=A1=A3=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close #I4MHL2 Signed-off-by: zhushengle Change-Id: I522a2ee2b91a6da5e14573a2d6dcdcd56dd7623e --- .../kernel/kernel-mini-basic-task-guide.md | 26 ++++++++++++++++--- .../kernel-small-basic-process-thread.md | 26 ++++++++++++++++--- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/zh-cn/device-dev/kernel/kernel-mini-basic-task-guide.md b/zh-cn/device-dev/kernel/kernel-mini-basic-task-guide.md index a4b3148e293..29b1538d8b4 100644 --- a/zh-cn/device-dev/kernel/kernel-mini-basic-task-guide.md +++ b/zh-cn/device-dev/kernel/kernel-mini-basic-task-guide.md @@ -40,7 +40,7 @@ OpenHarmony LiteOS-M内核的任务管理模块提供下面几种功能,接口

删除指定的任务。

-

控制任务状态

+

控制任务状态

LOS_TaskResume

@@ -49,7 +49,17 @@ OpenHarmony LiteOS-M内核的任务管理模块提供下面几种功能,接口

LOS_TaskSuspend

-

挂起指定的任务,然后切换任务

+

挂起指定的任务,然后切换任务。

+ + +

LOS_TaskJoin

+ +

挂起当前任务,等待指定任务运行结束并回收其任务控制块资源。

+ + +

LOS_TaskDetach

+ +

修改任务的joinable属性为detach属性,detach属性的任务运行结束会自动回收任务控制块资源。

LOS_TaskDelay

@@ -244,7 +254,7 @@ UINT32 Example_TaskLo(VOID) UINT32 Example_TskCaseEntry(VOID) { UINT32 ret; - TSK_INIT_PARAM_S initParam; + TSK_INIT_PARAM_S initParam = { 0 }; /* 锁任务调度,防止新创建的任务比本任务高而发生调度 */ LOS_TaskLock(); @@ -255,7 +265,7 @@ UINT32 Example_TskCaseEntry(VOID) initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "TaskHi"; initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; - + initParam.uwResved = LOS_TASK_ATTR_JOINABLE; /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskHiId, &initParam); if (ret != LOS_OK) { @@ -271,6 +281,7 @@ UINT32 Example_TskCaseEntry(VOID) initParam.usTaskPrio = TSK_PRIOR_LO; initParam.pcName = "TaskLo"; initParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; + initParam.uwResved = 0; /* detach 属性 */ /* 创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskLoId, &initParam); @@ -285,6 +296,12 @@ UINT32 Example_TskCaseEntry(VOID) /* 解锁任务调度,此时会发生任务调度,执行就绪队列中最高优先级任务 */ LOS_TaskUnlock(); + ret = LOS_TaskJoin(g_taskHiId, NULL); + if (ret != LOS_OK) { + printf("Join Example_TaskHi Failed!\n"); + } else { + printf("Join Example_TaskHi Success!\n"); + } return LOS_OK; } ``` @@ -302,5 +319,6 @@ Enter TaskLo Handler. TaskHi LOS_TaskDelay Done. TaskHi LOS_TaskSuspend Success. TaskHi LOS_TaskResume Success. +Join Example_TaskHi Success! ``` diff --git a/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md b/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md index 8d7a436a8ba..5a534c847a6 100644 --- a/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md +++ b/zh-cn/device-dev/kernel/kernel-small-basic-process-thread.md @@ -101,7 +101,7 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起

删除指定的任务

-

任务状态控制

+

任务状态控制

LOS_TaskResume

@@ -113,6 +113,16 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起

挂起指定的任务

+

LOS_TaskJoin

+ +

挂起当前任务,等待指定任务运行结束并回收其任务控制块资源

+ + +

LOS_TaskDetach

+ +

修改任务的joinable属性为detach属性,detach属性的任务运行结束会自动回收任务控制块资源

+ +

LOS_TaskDelay

任务延时等待

@@ -208,11 +218,11 @@ OpenHarmony 任务管理模块提供任务创建、任务延时、任务挂起 - 指定任务名 - 指定任务的栈大小 - 指定任务的优先级 - - 指定任务的属性,是否支持LOS\_TASK\_STATUS\_DETACHED属性 + - 指定任务的属性,LOS\_TASK\_ATTR\_JOINABLE和LOS\_TASK\_STATUS\_DETACHED属性 - 多核运行时,可以选择设置任务的绑核属性 2. 任务参与调度运行,执行用户指定的业务代码。 -3. 任务执行结束,如果任务设置了LOS\_TASK\_STATUS\_DETACHED属性,则任务运行结束后自动回收任务资源,如果未设置LOS\_TASK\_STATUS\_DETACHED属性,则需要调用LOS\_TaskDelete接口回收任务资源。 +3. 任务执行结束,如果设置了LOS\_TASK\_STATUS\_DETACHED属性,则自动回收任务资源,如果任务设置了LOS\_TASK\_ATTR\_JOINABLE属性,则需要调用LOS_TaskJoin回收任务资源,默认为LOS\_TASK\_STATUS\_DETACHED属性。 >![](../public_sys-resources/icon-note.gif) **说明:** >- 内核态具有最高权限,可以操作任意进程内的任务。 @@ -283,7 +293,7 @@ UINT32 ExampleTaskCaseEntry(VOID) initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "HIGH_NAME"; initParam.uwStackSize = LOS_TASK_MIN_STACK_SIZE; - initParam.uwResved = LOS_TASK_STATUS_DETACHED; + initParam.uwResved = LOS_TASK_ATTR_JOINABLE; /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskHiID, &initParam); @@ -312,6 +322,13 @@ UINT32 ExampleTaskCaseEntry(VOID) /* 解锁任务调度,此时会发生任务调度,执行就绪列表中最高优先级任务 */ LOS_TaskUnlock(); + ret = LOS_TaskJoin(g_taskHiID, NULL); + if (ret != LOS_OK) { + PRINTK("Join ExampleTaskHi Failed!\n"); + } else { + PRINTK("Join ExampleTaskHi Success!\n"); + } + while(1){}; return LOS_OK; } @@ -329,5 +346,6 @@ TaskHi LOS_TaskDelay Done. TaskHi LOS_TaskSuspend Success. TaskHi LOS_TaskResume Success. TaskHi LOS_TaskDelete Success. +Join ExampleTaskHi Success! ``` -- Gitee