/* ----------------------------------------------------------------------------
 * Copyright (c) Huawei Technologies Co., Ltd. 2013-2019. All rights reserved.
 * Description: LiteOS Task Module Implementation HeadFile
 * Author: Huawei LiteOS Team
 * Create: 2013-01-01
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 * 1. Redistributions of source code must retain the above copyright notice, this list of
 * conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
 * of conditions and the following disclaimer in the documentation and/or other materials
 * provided with the distribution.
 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
 * to endorse or promote products derived from this software without specific prior written
 * permission.
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * --------------------------------------------------------------------------- */
/*该函数定义了一些任务错误情况以及一些关于任务处理的函数*/
/**
 * @defgroup los_task Task
 * @ingroup kernel
 */

#ifndef _LOS_TASK_H
#define _LOS_TASK_H

#include "los_base.h"
#include "los_list.h"
#include "los_sys.h"
#include "los_tick.h"
#include "los_event.h"
#include "los_memory.h"
#include "los_err.h"
#include "arch/task.h"

#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */

#define CPUID_TO_AFFI_MASK(cpuid)               (0x1u << (cpuid))

/**
 * @ingroup los_task
 * Flag that indicates the task or task control block status. LOS_TASK_STATUS_DETACHED
 * means the task is in the auto-deleted state. In this state, the task will be deleted
 * automatically after the task is done.
 */
#define LOS_TASK_STATUS_DETACHED                0x0100U
/*LOS_TASK_STATUS_DETACHED是一个任务或者任务控制块状态的标志位。它表示任务处于自动删除状态。在这个状态下，任务会在执行完毕后自动被删除*/
/**
 * @ingroup los_task
 * Task error code: Insufficient memory for task creation.
 *
 * Value: 0x03000200.
 *
 * Solution: Allocate bigger memory partition to task creation.
 */
#define LOS_ERRNO_TSK_NO_MEMORY                 LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x00)
/*任务错误代码：内存不足，无法创建任务。*/
/**
 * @ingroup los_task
 * Task error code: Null parameter.
 *
 * Value: 0x02000201.
 *
 * Solution: Check the parameter.
 */
#define LOS_ERRNO_TSK_PTR_NULL                  LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x01)
/*任务错误代码：参数为Null*/
/**
 * @ingroup los_task
 * Task error code: The task stack is not aligned.
 *
 * Value: 0x02000202.
 *
 * Solution: Align the task stack.
 */
#define LOS_ERRNO_TSK_STKSZ_NOT_ALIGN           LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x02)
/*任务错误代码：任务堆栈未对齐*/
/**
 * @ingroup los_task
 * Task error code: Incorrect task priority.
 *
 * Value: 0x02000203.
 *
 * Solution: Re-configure the task priority by referring to the priority range.
 */
#define LOS_ERRNO_TSK_PRIOR_ERROR               LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x03)
/*任务错误代码：任务优先级不正确*/
/**
 * @ingroup los_task
 * Task error code: The task entrance is NULL.
 *
 * Value: 0x02000204.
 *
 * Solution: Define the task entrance function.
 */
#define LOS_ERRNO_TSK_ENTRY_NULL                LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x04)
/*任务错误代码：任务入口为NULL*/
/**
 * @ingroup los_task
 * Task error code: The task name is NULL.
 *
 * Value: 0x02000205.
 *
 * Solution: Set the task name.
 */
#define LOS_ERRNO_TSK_NAME_EMPTY                LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x05)
/*任务错误代码：任务名称为NULL*/
/**
 * @ingroup los_task
 * Task error code: The task stack size is too small.
 *
 * Value: 0x02000206.
 *
 * Solution: Expand the task stack.
 */
#define LOS_ERRNO_TSK_STKSZ_TOO_SMALL           LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x06)
/*任务错误代码：任务堆栈太小*/
/**
 * @ingroup los_task
 * Task error code: Invalid task ID.
 *
 * Value: 0x02000207.
 *
 * Solution: Check the task ID.
 */
#define LOS_ERRNO_TSK_ID_INVALID                LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x07)
/*任务错误代码：任务ID无效*/
/**
 * @ingroup los_task
 * Task error code: The task is already suspended.
 *
 * Value: 0x02000208.
 *
 * Solution: Suspend the task after it is resumed.
 */
#define LOS_ERRNO_TSK_ALREADY_SUSPENDED         LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x08)
/*任务错误代码：任务已挂起*/
/**
 * @ingroup los_task
 * Task error code: The task is not suspended.
 *
 * Value: 0x02000209.
 *
 * Solution: Suspend the task.
 */
#define LOS_ERRNO_TSK_NOT_SUSPENDED             LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x09)
/*任务错误代码：任务未挂起*/
/**
 * @ingroup los_task
 * Task error code: The task is not created.
 *
 * Value: 0x0200020a.
 *
 * Solution: Create the task.
 */
#define LOS_ERRNO_TSK_NOT_CREATED               LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x0a)
/*任务错误代码：未创建任务*/
/**
 * @ingroup los_task
 * Task error code: The task is locked when it is being deleted.
 *
 * Value: 0x0300020b.
 *
 * Solution: Unlock the task.
 */
#define LOS_ERRNO_TSK_DELETE_LOCKED             LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x0b)
/*任务错误代码：删除任务时该任务被锁定*/
/**
 * @ingroup los_task
 * Task error code: The task message is nonzero.
 *
 * Value: 0x0200020c.
 *
 * Solution: This error code is not in use temporarily.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_MSG_NONZERO               LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x0c)
/*任务错误代码：任务消息为非零*/
/**
 * @ingroup los_task
 * Task error code: The task delay occurs during an interrupt.
 *
 * Value: 0x0300020d.
 *
 * Solution: Perform this operation after exiting from the interrupt.
 */
#define LOS_ERRNO_TSK_DELAY_IN_INT              LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x0d)
/*任务错误代码：任务延迟发生在中断期间*/
/**
 * @ingroup los_task
 * Task error code: The task delay occurs when the task is locked.
 *
 * Value: 0x0200020e.
 *
 * Solution: Perform this operation after unlocking the task.
 */
#define LOS_ERRNO_TSK_DELAY_IN_LOCK             LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x0e)
/*任务错误代码：任务锁定时会出现任务延迟*/
/**
 * @ingroup los_task
 * Task error code: The task yield occurs when the task is locked.
 *
 * Value: 0x0200020f.
 *
 * Solution: Check the task.
 */
#define LOS_ERRNO_TSK_YIELD_IN_LOCK             LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x0f)
/*任务错误代码：当任务被锁定时，任务将产生收益*/
/**
 * @ingroup los_task
 * Task error code: Only one task or no task is available for scheduling.
 *
 * Value: 0x02000210.
 *
 * Solution: Increase the number of tasks.
 */
#define LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK     LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x10)
/*任务错误代码：只有一个任务或没有任务可用于计划*/
/**
 * @ingroup los_task
 * Task error code: No free task control block is available.
 *
 * Value: 0x02000211.
 *
 * Solution: Increase the number of task control blocks.
 */
#define LOS_ERRNO_TSK_TCB_UNAVAILABLE           LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x11)
/*任务错误代码：没有可用的任务控制块*/
/**
 * @ingroup los_task
 * Task error code: The task hook function is not matchable.
 *
 * Value: 0x02000212.
 *
 * Solution: This error code is not in use temporarily.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_HOOK_NOT_MATCH            LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x12)
/*任务错误代码：任务挂钩函数不匹配*/
/**
 * @ingroup los_task
 * Task error code: The number of task hook functions exceeds the permitted upper limit.
 *
 * Value: 0x02000213.
 *
 * Solution: This error code is not in use temporarily.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_HOOK_IS_FULL              LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x13)
/*任务错误代码：任务挂钩函数的数量超过了允许的上限*/
/**
 * @ingroup los_task
 * Task error code: The operation is performed on the system-level task.
 *       old usage: The operation is performed on the idle task (LOS_ERRNO_TSK_OPERATE_IDLE)
 *
 * Value: 0x02000214.
 *
 * Solution: Check the task ID and do not operate the system-level task.
 */
#define LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK       LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x14)
/*任务错误代码：该操作是在系统级任务上执行的。
*旧用法：该操作在空闲任务上执行（LOS_ERRNO_TSK_OPERATE_idle）*/
/**
 * @ingroup los_task
 * Task error code: The task that is being suspended is locked.
 *
 * Value: 0x03000215.
 *
 * Solution: Suspend the task after unlocking the task.
 */
#define LOS_ERRNO_TSK_SUSPEND_LOCKED            LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x15)
/*任务错误代码：正在挂起的任务已锁定*/
/**
 * @ingroup los_task
 * Task error code: The task stack fails to be freed.
 *
 * Value: 0x02000217
 *
 * Solution: This error code is not in use temporarily.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_FREE_STACK_FAILED         LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x17)
/*任务错误代码：无法释放任务堆栈*/
/**
 * @ingroup los_task
 * Task error code: The task stack area is too small.
 *
 * Value: 0x02000218
 *
 * Solution: This error code is not in use temporarily.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_STKAREA_TOO_SMALL         LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x18)
/*任务错误代码：任务堆栈区域太小*/
/**
 * @ingroup los_task
 * Task error code: The task fails to be activated.
 *
 * Value: 0x03000219.
 *
 * Solution: Perform task switching after creating an idle task.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_ACTIVE_FAILED             LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x19)
/*任务错误代码：任务激活失败*/
/**
 * @ingroup los_task
 * Task error code: Too many task configuration items.
 *
 * Value: 0x0200021a
 *
 * Solution: This error code is not in use temporarily.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_CONFIG_TOO_MANY           LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x1a)
/*任务错误代码：任务配置项过多*/
/**
 * @ingroup los_task
 * Task error code: This error code is not in use temporarily.
 *
 * Value: 0x0200021b
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_CP_SAVE_AREA_NOT_ALIGN    LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x1b)
/*任务错误代码：此错误代码暂时未使用*/
/**
 * @ingroup los_task
 * Task error code: This error code is not in use temporarily.
 *
 * Value: 0x0200021d
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_MSG_Q_TOO_MANY            LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x1d)
/*任务错误代码：此错误代码暂时未使用*/
/**
 * @ingroup los_task
 * Task error code: This error code is not in use temporarily.
 *
 * Value: 0x0200021e
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_CP_SAVE_AREA_NULL         LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x1e)
/*任务错误代码：此错误代码暂时未使用*/
/**
 * @ingroup los_task
 * Task error code: This error code is not in use temporarily.
 *
 * Value: 0x0200021f
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_SELF_DELETE_ERR           LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x1f)
/*任务错误代码：此错误代码暂时未使用*/
/**
 * @ingroup los_task
 * Task error code: The task stack size is too large.
 *
 * Value: 0x02000220.
 *
 * Solution: shrink the task stack size parameter.
 */
#define LOS_ERRNO_TSK_STKSZ_TOO_LARGE           LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x20)
/*任务错误代码：任务堆栈大小太大*/
/**
 * @ingroup los_task
 * Task error code: Suspending software timer task is not allowed.
 *
 * Value: 0x02000221.
 *
 * Solution: Check the task ID and do not suspend software timer task.
 * @deprecated This error code is obsolete since LiteOS 5.0.0.
 */
#define LOS_ERRNO_TSK_SUSPEND_SWTMR_NOT_ALLOWED LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x21)
/*任务错误代码：不允许挂起软件计时器任务*/
/**
 * @ingroup los_task
 * Task error code: The cpu affinity mask is incorrect.
 *
 * Value: 0x03000223.
 *
 * Solution: Please set the correct cpu affinity mask.
 */
#define LOS_ERRNO_TSK_CPU_AFFINITY_MASK_ERR     LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x23)
/*任务错误代码：cpu关联掩码不正确*/
/**
 * @ingroup los_task
 * Task error code: Task yield in interrupt is not permited, which will result in an unexpected result.
 *
 * Value: 0x02000224.
 *
 * Solution: Don't call LOS_TaskYield in Interrupt.
 */
#define LOS_ERRNO_TSK_YIELD_IN_INT              LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x24)
/*任务错误代码：不允许任务在中断中让步，这将导致意外结果*/
/**
 * @ingroup los_task
 * Task error code: Task sync resource (semaphore) allocated failed.
 *
 * Value: 0x02000225.
 *
 * Solution: Expand LOSCFG_BASE_IPC_SEM_LIMIT.
 */
#define LOS_ERRNO_TSK_MP_SYNC_RESOURCE          LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x25)
/*任务错误代码：分配的任务同步资源（信号量）失败*/
/**
 * @ingroup los_task
 * Task error code: Task sync failed on operating running task across cores.
 *
 * Value: 0x02000226.
 *
 * Solution: Check task delete can be handled in user's scenario.
 */
#define LOS_ERRNO_TSK_MP_SYNC_FAILED            LOS_ERRNO_OS_ERROR(LOS_MOD_TSK, 0x26)
/*任务错误代码：在操作跨核心运行的任务时，任务同步失败*/
/**
 * @ingroup los_task
 * Minimum stack size.
 *
 * LOSCFG_BASE_CORE_TSK_MIN_STACK_SIZE bytes, configured in menuconfig.
 * LOS_TASK_MIN_STACK_SIZE bytes, aligned on a boundary of LOSCFG_STACK_POINT_ALIGN_SIZE.
 */
#define LOS_TASK_MIN_STACK_SIZE (ALIGN(KERNEL_TSK_MIN_STACK_SIZE, LOSCFG_STACK_POINT_ALIGN_SIZE))
/*这段代码是关于任务（task）的最小栈大小的定义通过这段代码，可以看出LOS_TASK_MIN_STACK_SIZE的大小是根据KERNEL_TSK_MIN_STACK_SIZE和
LOSCFG_STACK_POINT_ALIGN_SIZE来计算的并且保证了堆栈大小是按照一定的对齐方式进行分配的。*/
#ifdef LOSCFG_BASE_CORE_TSK_MONITOR
/**
 * @ingroup los_task
 * @brief Define the type of the task switching hook function.
 *
 * @par Description:
 * This API is used to define the type of the task switching hook function.
 * @attention The function type is defined only when #LOSCFG_BASE_CORE_TSK_MONITOR is set to YES.
 *
 * @param None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V100R001C00
 */
typedef VOID (*TSKSWITCHHOOK)(VOID);

/**
 * @ingroup los_task
 * @brief User task switching hook function.
 *
 * @par Description:
 * This API is a user task switching hook register function.
 * @attention The function is used only when #LOSCFG_BASE_CORE_TSK_MONITOR is set to YES.
 *
 * @param  hook [IN] Type #TSKSWITCHHOOK. The user defined hook for task switch.
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V200R005C10
 */
extern VOID LOS_TaskSwitchHookReg(TSKSWITCHHOOK hook);
#endif

/**
 * @ingroup  los_task
 * @brief Define the type of a task entrance function.
 *
 * @par Description:
 * This API is used to define the type of a task entrance function and call it after a task is created and triggered.
 * @attention If LOSCFG_OBSOLETE_API is not defined, one parameter which its type is VOID * will be instead of these
 *            four parameters of the API.
 *
 * @param  param1 [IN] Type #UINTPTR The first parameter passed to the task handling function.
 * @param  param2 [IN] Type #UINTPTR The second parameter passed to the task handling function.
 * @param  param3 [IN] Type #UINTPTR The third parameter passed to the task handling function.
 * @param  param4 [IN] Type #UINTPTR The fourth parameter passed to the task handling function.
 *
 * @retval #VOID*  This API will return the return value of task function.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V100R001C00
 */
#ifdef LOSCFG_OBSOLETE_API
typedef VOID *(*TSK_ENTRY_FUNC)(UINTPTR param1,
                                UINTPTR param2,
                                UINTPTR param3,
                                UINTPTR param4);
#else
typedef VOID *(*TSK_ENTRY_FUNC)(VOID *param);
/*这段代码中使用了条件预处理指令#ifdef，它用于根据预定义的宏LOSOCFG_OBSOLETE_API是否存在来选择不同的类型定义,果LOSOCFG_OBSOLETE_API宏被定义，
则TSK_ENTRY_FUNC被定义为接受四个UINTPTR类型参数并返回VOID指针的函数指针类型；如果LOSOCFG_OBSOLETE_API宏未被定义，则TSK_ENTRY_FUNC被定义为接
受一个VOID指针参数并返回VOID指针的函数指针类型*/
#endif
/**
 * @ingroup los_task
 * Define the structure of the parameters used for task creation.
 *
 * Information of specified parameters passed in during task creation.
 */
typedef struct tagTskInitParam {
    TSK_ENTRY_FUNC  pfnTaskEntry;  /**< Task entrance function */
    UINT16          usTaskPrio;    /**< Task priority */
#ifdef LOSCFG_OBSOLETE_API
    UINTPTR         auwArgs[4];    /**< Task parameters, of which the maximum number is four.
                                        If LOSCFG_OBSOLETE_API is not defined, auwArgs[4] will
                                        be replaced by pArgs which its type is void *.  */
#else
    VOID            *pArgs;        /**< Task Parameter, of which the type is void * */
#endif
    UINT32          uwStackSize;   /**< Task stack size */
    CHAR            *pcName;       /**< Task name */
#ifdef LOSCFG_KERNEL_SMP
    UINT16          usCpuAffiMask; /**< Task cpu affinity mask. It is defined only when LOSCFG_KERNEL_SMP is defined. */
#endif
    UINT32          uwResved;      /**< Task is automatically deleted if uwResved is set to #LOS_TASK_STATUS_DETACHED.
                                        Task will not be deleted automatically if it is set to 0. */
} TSK_INIT_PARAM_S;
/*这段代码定义了一个结构体类型TSK_INIT_PARAM_S，用于传递任务创建时的参数信息
pfnTaskEntry：任务入口函数指针。
usTaskPrio：任务优先级。
auwArgs/pArgs：任务参数，可以是一个指向参数列表的数组或一个指向参数结构体的指针，具体取决于LOSCFG_OBSOLETE_API是否被定义。
uwStackSize：任务栈大小。
pcName：任务名称。
usCpuAffiMask：CPU亲和性掩码，仅在LOSCFG_KERNEL_SMP被定义时有效。
uwResved：保留字段，如果设置为LOS_TASK_STATUS_DETACHED，则任务将自动删除。*/
/**
 * @ingroup los_task
 * Task name length
 *
 */
#define LOS_TASK_NAMELEN                        32

/**
 * @ingroup los_task
 * Task information structure.
 *
 */
typedef struct tagTskInfo {
    CHAR                acName[LOS_TASK_NAMELEN];   /**< Task name, the default value of
	                                                     #LOS_TASK_NAMELEN is 32  */
    UINT32              uwTaskID;                   /**< Task ID                  */
    UINT16              usTaskStatus;               /**< Task status              */
    UINT16              usTaskPrio;                 /**< Task priority            */
    VOID                *pTaskSem;                  /**< Semaphore pointer        */
    VOID                *pTaskMux;                  /**< Mutex pointer            */
    EVENT_CB_S          uwEvent;                    /**< Event                    */
    UINT32              uwEventMask;                /**< Event mask               */
    UINT32              uwStackSize;                /**< Task stack size          */
    UINTPTR             uwTopOfStack;               /**< Task stack top           */
    UINTPTR             uwBottomOfStack;            /**< Task stack bottom        */
    UINTPTR             uwSP;                       /**< Task SP pointer          */
    UINT32              uwCurrUsed;                 /**< Current task stack usage */
    UINT32              uwPeakUsed;                 /**< Task stack usage peak    */
    BOOL                bOvf;                       /**< Flag that indicates whether a task stack overflow
	                                                     occurs or not            */
} TSK_INFO_S;
/*这段代码定义了一个结构体类型TSK_INFO_S，用于保存任务的信息
TSK_INFO_S结构体包含以下成员：
acName：任务名称，长度为LOS_TASK_NAMELEN，默认值为32。
uwTaskID：任务ID。
usTaskStatus：任务状态。
usTaskPrio：任务优先级。
pTaskSem：信号量指针。
pTaskMux：互斥锁指针。
uwEvent：事件。
uwEventMask：事件掩码。
uwStackSize：任务栈大小。
uwTopOfStack：任务栈顶部。
uwBottomOfStack：任务栈底部。
uwSP：任务SP指针。
uwCurrUsed：当前任务栈使用量。
uwPeakUsed：任务栈使用峰值。
bOvf：表示任务栈是否发生溢出的标志。*/
#ifdef LOSCFG_TASK_STATIC_ALLOCATION
/**
 * @ingroup  los_task
 * @brief Create a task with User defines stack space and suspend .
 *
 * @par Description:
 * This API is used to create a task and suspend it. This task will not be added to the queue of ready tasks before
 * resume it.
 * User should allocate memory for task's stack and assign its addr to para topStack, the uwStackSize in taskInitParam
 * must fit the stack memory size. When the task is deleted, the stack's memory should be free in time by users.
 *
 * @attention
 * <ul>
 * <li>The task name is a pointer and is not allocated memory.</li>
 * <li>If the size of the task stack of the task to be created is 0, configure #LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE
 * to specify the default task stack size. The stack size should be a reasonable value, if the size is too large, may
 * cause memory exhaustion.</li>
 * <li>The task stack size must be aligned on the boundary of 8 bytes. The size is determined by whether it is big
 * enough to avoid task stack overflow.</li>
 * <li>Less parameter value indicates higher task priority.</li>
 * <li>The task name cannot be null.</li>
 * <li>The pointer to the task executing function cannot be null.</li>
 * <li>The two parameters of this interface is pointer, it should be a correct value, otherwise, the system may be
 * abnormal.</li>
 * <li>If user mode is enabled, user should input user stack pointer and size, the size must fit the stack pointer,
 * uwStackSize remain as the kernel stack size.</li>
 * </ul>
 *
 * @param  taskId        [OUT] Type  #UINT32 * Task Id.
 * @param  initParam     [IN]  Type  #TSK_INIT_PARAM_S * Parameter for task creation.
 * @param  topStack      [IN]  Type  #VOID* Parameter for task's top of stack address.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID        Invalid Task ID, param puwTaskID is NULL.
 * @retval #LOS_ERRNO_TSK_PTR_NULL          Param pstInitParam is NULL.
 * @retval #LOS_ERRNO_TSK_NAME_EMPTY        The task name is NULL.
 * @retval #LOS_ERRNO_TSK_ENTRY_NULL        The task entrance is NULL.
 * @retval #LOS_ERRNO_TSK_PRIOR_ERROR       Incorrect task priority.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_LARGE   The task stack size is too large.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_SMALL   The task stack size is too small.
 * @retval #LOS_ERRNO_TSK_TCB_UNAVAILABLE   No free task control block is available.
 * @retval #LOS_ERRNO_TSK_NO_MEMORY         Insufficient memory for task creation.
 * @retval #LOS_OK                          The task is successfully created.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * <ul><li>los_config.h: the header file that contains system configuration items.</li></ul>
 * @see LOS_TaskCreateStatic | LOS_TaskDeleteStatic
 * @since Huawei LiteOS V200R005C10
 */
extern UINT32 LOS_TaskCreateOnlyStatic(UINT32 *taskId, TSK_INIT_PARAM_S *initParam, VOID *topStack);
/*该函数的作用是创建一个静态分配的任务，并将其挂起。静态分配任务的栈空间由用户自行分配和释放，需要在删除任务时及时释放栈空间。

函数的参数如下：
taskId：[OUT] 任务ID，类型为UINT32指针。
initParam：[IN] 任务创建的参数，类型为TSK_INIT_PARAM_S结构体指针。
topStack：[IN] 任务栈的顶部地址，类型为VOID指针。

函数的返回值为操作结果，可能的返回值如下：
LOS_ERRNO_TSK_ID_INVALID：无效的任务ID，taskId参数为NULL。
LOS_ERRNO_TSK_PTR_NULL：initParam参数为NULL。
LOS_ERRNO_TSK_NAME_EMPTY：任务名称为NULL。
LOS_ERRNO_TSK_ENTRY_NULL：任务执行函数为NULL。
LOS_ERRNO_TSK_PRIOR_ERROR：任务优先级错误。
LOS_ERRNO_TSK_STKSZ_TOO_LARGE：任务栈大小太大。
LOS_ERRNO_TSK_STKSZ_TOO_SMALL：任务栈大小太小。
LOS_ERRNO_TSK_TCB_UNAVAILABLE：没有可用的任务控制块。
LOS_ERRNO_TSK_NO_MEMORY：任务创建时内存不足。
LOS_OK：任务成功创建。*/
/**
 * @ingroup  los_task
 * @brief Create a task.
 *
 * @par Description:
 * This API is used to create a task. If the priority of the task created after system initialized is higher than
 * the current task and task scheduling is not locked, it is scheduled for running.
 * User should allocate memory for task's stack and assign its addr to para topStack, the uwStackSize in taskInitParam
 * must fit the stack memory size. When the task is deleted, the stack's memory should be free in time by users.
 * If not, the created task is added to the queue of ready tasks.
 *
 * @attention
 * <ul>
 * <li>The task name is a pointer and is not allocated memory.</li>
 * <li>If the size of the task stack of the task to be created is 0, configure #LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE
 * to specify the default task stack size.</li>
 * <li>The task stack size must be aligned on the boundary of 8 bytes. The size is determined by whether it is big
 * enough to avoid task stack overflow.</li>
 * <li>Less parameter value indicates higher task priority.</li>
 * <li>The task name cannot be null.</li>
 * <li>The pointer to the task executing function cannot be null.</li>
 * <li>The two parameters of this interface is pointer, it should be a correct value, otherwise, the system may be
 * abnormal.</li>
 * <li>If user mode is enabled, user should input user stack pointer and size, the size must fit the stack pointer,
 * uwStackSize remain as the kernel stack size.</li>
 * <li>If LOSCFG_STATIC_ALLOC_MEM is enabled, user should define a static stack memory and assign to stack pointer,
 * the uwStackSize must fit the stack memory size.</li>
 * </ul>
 *
 * @param  taskId        [OUT] Type  #UINT32 * Task Id.
 * @param  initParam     [IN]  Type  #TSK_INIT_PARAM_S * Parameter for task creation.
 * @param  topStack      [IN]  Type  #VOID * Parameter for task's top of stack address.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID        Invalid Task ID, param puwTaskID is NULL.
 * @retval #LOS_ERRNO_TSK_PTR_NULL          Param pstInitParam is NULL.
 * @retval #LOS_ERRNO_TSK_NAME_EMPTY        The task name is NULL.
 * @retval #LOS_ERRNO_TSK_ENTRY_NULL        The task entrance is NULL.
 * @retval #LOS_ERRNO_TSK_PRIOR_ERROR       Incorrect task priority.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_LARGE   The task stack size is too large.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_SMALL   The task stack size is too small.
 * @retval #LOS_ERRNO_TSK_TCB_UNAVAILABLE   No free task control block is available.
 * @retval #LOS_ERRNO_TSK_NO_MEMORY         Insufficient memory for task creation.
 * @retval #LOS_OK                          The task is successfully created.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * <ul><li>los_config.h: the header file that contains system configuration items.</li></ul>
 * @see LOS_TaskCreateOnlyStatic | LOS_TaskDeleteStatic
 * @since Huawei LiteOS V200R005C10
 */
extern UINT32 LOS_TaskCreateStatic(UINT32 *taskId, TSK_INIT_PARAM_S *initParam, VOID *topStack);
#endif
/*这段代码是关于任务创建的函数LOS_TaskCreateStatic的声明。
函数的功能是创建一个任务并将其挂起。如果系统初始化后创建的任务的优先级高于当前任务并且任务调度未被锁定，则会调度该任务运行.静态分配任务的栈空间由用户自行分配和释放，需要在删除任务时及时释放栈空间。
该函数的调用需要传入任务ID、任务创建参数和任务栈的顶部地址，返回创建结果*/
/**
 * @ingroup  los_task
 * @brief Create a task and suspend.
 *
 * @par Description:
 * This API is used to create a task and suspend it. This task will not be added to the queue of ready tasks
 * before resume it.
 *
 * @attention
 * <ul>
 * <li>During task creation, the task control block and task stack of the task that is previously automatically deleted
 * are deallocated.</li>
 * <li>The task name is a pointer and is not allocated memory.</li>
 * <li>If the size of the task stack of the task to be created is 0, configure #LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE
 * to specify the default task stack size. The stack size should be a reasonable value, if the size is too large, may
 * cause memory exhaustion.</li>
 * <li>The task stack size must be aligned on the boundary of 8 bytes. The size is determined by whether it is big
 * enough to avoid task stack overflow.</li>
 * <li>Less parameter value indicates higher task priority.</li>
 * <li>The task name cannot be null.</li>
 * <li>The pointer to the task executing function cannot be null.</li>
 * <li>The two parameters of this interface is pointer, it should be a correct value, otherwise, the system may be
 * abnormal.</li>
 * </ul>
 *
 * @param  taskId    [OUT] Type  #UINT32 * Task ID.
 * @param  initParam [IN]  Type  #TSK_INIT_PARAM_S * Parameter for task creation.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID        Invalid Task ID, param taskId is NULL.
 * @retval #LOS_ERRNO_TSK_PTR_NULL          Param initParam is NULL.
 * @retval #LOS_ERRNO_TSK_NAME_EMPTY        The task name is NULL.
 * @retval #LOS_ERRNO_TSK_ENTRY_NULL        The task entrance is NULL.
 * @retval #LOS_ERRNO_TSK_PRIOR_ERROR       Incorrect task priority.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_LARGE   The task stack size is too large.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_SMALL   The task stack size is too small.
 * @retval #LOS_ERRNO_TSK_TCB_UNAVAILABLE   No free task control block is available.
 * @retval #LOS_ERRNO_TSK_NO_MEMORY         Insufficient memory for task creation.
 * @retval #LOS_OK                          The task is successfully created.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * <ul><li>los_config.h: the header file that contains system configuration items.</li></ul>
 * @see LOS_TaskDelete | LOS_TaskCreate
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskCreateOnly(UINT32 *taskId, TSK_INIT_PARAM_S *initParam);
/*这段代码是关于任务创建的函数LOS_TaskCreateOnly的声明。

函数的功能是创建一个任务并将其挂起。在任务创建后，该任务不会被添加到就绪任务队列中。*/
/**
 * @ingroup  los_task
 * @brief Create a task.
 *
 * @par Description:
 * This API is used to create a task. If the priority of the task created after system initialized is higher than
 * the current task and task scheduling is not locked, it is scheduled for running.
 * If not, the created task is added to the queue of ready tasks.
 *
 * @attention
 * <ul>
 * <li>During task creation, the task control block and task stack of the task that is previously automatically
 * deleted are deallocated.</li>
 * <li>The task name is a pointer and is not allocated memory.</li>
 * <li>If the size of the task stack of the task to be created is 0, configure #LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE
 * to specify the default task stack size.</li>
 * <li>The task stack size must be aligned on the boundary of 8 bytes. The size is determined by whether it is big
 * enough to avoid task stack overflow.</li>
 * <li>Less parameter value indicates higher task priority.</li>
 * <li>The task name cannot be null.</li>
 * <li>The pointer to the task executing function cannot be null.</li>
 * <li>The two parameters of this interface is pointer, it should be a correct value, otherwise, the system may be
 * abnormal.</li>
 * </ul>
 *
 * @param  taskId    [OUT] Type  #UINT32 * Task ID.
 * @param  initParam [IN]  Type  #TSK_INIT_PARAM_S * Parameter for task creation.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID        Invalid Task ID, param taskId is NULL.
 * @retval #LOS_ERRNO_TSK_PTR_NULL          Param initParam is NULL.
 * @retval #LOS_ERRNO_TSK_NAME_EMPTY        The task name is NULL.
 * @retval #LOS_ERRNO_TSK_ENTRY_NULL        The task entrance is NULL.
 * @retval #LOS_ERRNO_TSK_PRIOR_ERROR       Incorrect task priority.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_LARGE   The task stack size is too large.
 * @retval #LOS_ERRNO_TSK_STKSZ_TOO_SMALL   The task stack size is too small.
 * @retval #LOS_ERRNO_TSK_TCB_UNAVAILABLE   No free task control block is available.
 * @retval #LOS_ERRNO_TSK_NO_MEMORY         Insufficient memory for task creation.
 * @retval #LOS_OK                          The task is successfully created.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * <ul><li>los_config.h: the header file that contains system configuration items.</li></ul>
 * @see LOS_TaskDelete | LOS_TaskCreateOnly
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskCreate(UINT32 *taskId, TSK_INIT_PARAM_S *initParam);
/*该函数的功能是创建一个任务。如果在系统初始化之后创建的任务的优先级比当前任务高并且任务调度未被锁定，则将其调度运行。如果不是，则创建的任务将添加到就绪任务队列中*/
/**
 * @ingroup  los_task
 * @brief Resume a task.
 *
 * @par Description:
 * This API is used to resume a suspended task.
 *
 * @attention
 * <ul>
 * <li>If the task is delayed or blocked, resume the task without adding it to the queue of ready tasks.</li>
 * <li>If the priority of the task resumed after system initialized is higher than the current task and task scheduling
 * is not locked, it is scheduled for running.</li>
 * </ul>
 *
 * @param  taskId [IN] Type #UINT32 Task ID. The task id value is obtained from task creation.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID        Invalid Task ID
 * @retval #LOS_ERRNO_TSK_NOT_CREATED       The task is not created.
 * @retval #LOS_ERRNO_TSK_NOT_SUSPENDED     The task is not suspended.
 * @retval #LOS_OK                          The task is successfully resumed.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskSuspend
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskResume(UINT32 taskId);
/*这是华为LiteOS中用于恢复（Resume）任务的函数LOS_TaskResume的声明。

该函数的功能是恢复一个被挂起（Suspended）的任务。*/
/**
 * @ingroup  los_task
 * @brief Suspend a task.
 *
 * @par Description:
 * This API is used to suspend a specified task, and the task will be removed from the queue of ready tasks.
 *
 * @attention
 * <ul>
 * <li>The task that is running and locked cannot be suspended.</li>
 * <li>The idle task and swtmr task cannot be suspended.</li>
 * </ul>
 *
 * @param  taskId [IN] Type #UINT32 Task ID. The task id value is obtained from task creation.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID                    Invalid Task ID
 * @retval #LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK           Check the task ID and do not operate the system-level
 *                                                      task, like idle or swtmr task.
 * @retval #LOS_ERRNO_TSK_NOT_CREATED                   The task is not created.
 * @retval #LOS_ERRNO_TSK_ALREADY_SUSPENDED             The task is already suspended.
 * @retval #LOS_ERRNO_TSK_SUSPEND_LOCKED                The task being suspended is current task and task
 *                                                      scheduling is locked.
 * @retval #LOS_OK                                      The task is successfully suspended.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskResume
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskSuspend(UINT32 taskId);
/*这是华为LiteOS中用于挂起（Suspend）任务的函数LOS_TaskSuspend的声明。

该函数的功能是挂起指定的任务，并将其从就绪任务队列中移除。*/
/**
 * @ingroup  los_task
 * @brief Delete a task.
 *
 * @par Description:
 * This API is used to delete a specified task and release the resources for its task stack and task control block.
 *
 * @attention
 * <ul>
 * <li>The idle task and swtmr task cannot be deleted.</li>
 * <li>If delete current task maybe cause unexpected error.</li>
 * <li>If a task get a mutex is deleted or automatically deleted before release this mutex, other tasks pended
 * this mutex maybe never be shchduled.</li>
 * </ul>
 *
 * @param  taskId [IN] Type #UINT32 Task ID. The task id value is obtained from task creation.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID                    Invalid Task ID
 * @retval #LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK           Check the task ID and do not operate the system-level
 *                                                      task, like idle or swtmr task.
 * @retval #LOS_ERRNO_TSK_NOT_CREATED                   The task is not created.
 * @retval #LOS_ERRNO_TSK_DELETE_LOCKED                 The task being deleted is current task and task scheduling
 *                                                      is locked.
 * @retval #LOS_OK                                      The task is successfully deleted.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskCreate | LOS_TaskCreateOnly
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskDelete(UINT32 taskId);
/*这是华为LiteOS中用于删除任务的函数LOS_TaskDelete的声明。

该函数的功能是删除指定的任务并释放其任务栈和任务控制块的资源。*/
/**
 * @ingroup  los_task
 * @brief Delay a task.
 *
 * @par Description:
 * This API is used to delay the execution of the current task. The task is able to be scheduled after it is delayed
 * for a specified number of Ticks.
 *
 * @attention
 * <ul>
 * <li>The task fails to be delayed if it is being delayed during interrupt processing or it is locked.</li>
 * <li>If 0 is passed in and the task scheduling is not locked, execute the next task in the queue of tasks with
 * the same priority of the current task.
 * If no ready task with the priority of the current task is available, the task scheduling will not occur, and the
 * current task continues to be executed.</li>
 * <li>Using the interface before system initialized is not allowed.</li>
 * <li>DO NOT call this API in software timer callback. </li>
 * </ul>
 *
 * @param  tick [IN] Type #UINT32 Number of Ticks for which the task is delayed.
 *
 * @retval #LOS_ERRNO_TSK_DELAY_IN_INT              The task delay occurs during an interrupt.
 * @retval #LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK       The current task is a system-level task, like idle or swtmr
 *                                                  task. This is not allowed.
 * @retval #LOS_ERRNO_TSK_DELAY_IN_LOCK             The task delay occurs when the task scheduling is locked.
 * @retval #LOS_ERRNO_TSK_ID_INVALID                Invalid Task ID
 * @retval #LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK     No tasks with the same priority is available for scheduling.
 * @retval #LOS_OK                                  The task is successfully delayed.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskDelay(UINT32 tick);
/*这是华为LiteOS中用于延迟（Delay）任务的函数LOS_TaskDelay的声明。

该函数的功能是延迟当前任务的执行。在延迟了指定数量的Ticks后，任务可以被调度到就绪任务队列中。*/
/**
 * @ingroup  los_task
 * @brief Lock the task scheduling.
 *
 * @par Description:
 * This API is used to lock the task scheduling. Task switching will not occur if the task scheduling is locked.
 *
 * @attention
 * <ul>
 * <li>If the task scheduling is locked, but interrupts are not disabled, tasks are still able to be interrupted.</li>
 * <li>One is added to the number of task scheduling locks if this API is called. The number of locks is decreased by
 * one if the task scheduling is unlocked. Therefore, this API should be used together with LOS_TaskUnlock.</li>
 * </ul>
 *
 * @param  None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskUnlock
 * @since Huawei LiteOS V100R001C00
 */
extern VOID LOS_TaskLock(VOID);
/*这是华为LiteOS中用于锁定任务调度的函数LOS_TaskLock的声明。

该函数的功能是锁定任务调度。如果任务调度被锁定，则不会发生任务切换。*/
/**
 * @ingroup  los_task
 * @brief Unlock the task scheduling.
 *
 * @par Description:
 * This API is used to unlock the task scheduling. Calling this API will decrease the number of task locks by one.
 * If a task is locked more than once, the task scheduling will be unlocked only when the number of locks becomes zero.
 *
 * @attention
 * The number of locks is decreased by one if this API is called. One is added to the number of task scheduling
 * locks if the task scheduling is locked. Therefore, this API should be used together with LOS_TaskLock.
 *
 * @param  None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskLock
 * @since Huawei LiteOS V100R001C00
 */
extern VOID LOS_TaskUnlock(VOID);
/*这是华为LiteOS中用于解锁任务调度的函数LOS_TaskUnlock的声明。

该函数的功能是解锁任务调度。调用此API将减少任务锁的数量。如果一个任务被锁定多次，则只有在锁的数量变为零时才会解锁任务调度*/
/**
 * @ingroup  los_task
 * @brief Set a task priority.
 *
 * @par Description:
 * This API is used to set the priority of a specified task.
 *
 * @attention
 * <ul>
 * <li>If the set priority is higher than the priority of the current running task, task scheduling
 * probably occurs.</li>
 * <li>Changing the priority of the current running task also probably causes task scheduling.</li>
 * <li>Using the interface to change the priority of software timer task and idle task is not allowed.</li>
 * <li>Using the interface in the interrupt is not allowed.</li>
 * </ul>
 *
 * @param  taskId   [IN] Type #UINT32 Task ID. The task id value is obtained from task creation.
 * @param  taskPrio [IN] Type #UINT16 Task priority.
 *
 * @retval #LOS_ERRNO_TSK_PRIOR_ERROR          Incorrect task priority.Re-configure the task priority
 * @retval #LOS_ERRNO_TSK_ID_INVALID           Invalid Task ID
 * @retval #LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK  Check the task ID and do not operate the system-level
 *                                             task, like idle or swtmr task.
 * @retval #LOS_ERRNO_TSK_NOT_CREATED          The task is not created.
 * @retval #LOS_OK                             The priority of the current running task is successfully
 *                                             set to a specified priority.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskPriGet
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskPriSet(UINT32 taskId, UINT16 taskPrio);
/*这是华为LiteOS中用于设置任务优先级的函数LOS_TaskPriSet的声明。

该函数的功能是设置指定任务的优先级*/
/**
 * @ingroup  los_task
 * @brief Set the priority of the current running task to a specified priority.
 *
 * @par Description:
 * This API is used to set the priority of the current running task to a specified priority.
 *
 * @attention
 * <ul>
 * <li>Changing the priority of the current running task probably causes task scheduling.</li>
 * <li>Using the interface to change the priority of software timer task and idle task is not allowed.</li>
 * <li>Using the interface in the interrupt is not allowed.</li>
 * </ul>
 *
 * @param  taskPrio [IN] Type #UINT16 Task priority.
 *
 * @retval #LOS_ERRNO_TSK_PRIOR_ERROR          Incorrect task priority.Re-configure the task priority.
 * @retval #LOS_ERRNO_TSK_ID_INVALID           The current task ID is invalid.
 * @retval #LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK  The current task is a system-level task, like idle or swtmr
 *                                             task. This is not allowed.
 * @retval #LOS_ERRNO_TSK_NOT_CREATED          The task is not created.
 * @retval #LOS_OK                             The priority of the current running task is successfully set
 *                                             to a specified priority.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskPriSet | LOS_TaskPriGet
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_CurTaskPriSet(UINT16 taskPrio);
/*这是华为LiteOS中用于将当前运行任务的优先级设置为指定优先级的函数LOS_CurTaskPriSet的声明。

该函数的功能是将当前运行任务的优先级设置为指定的优先级。*/
/**
 * @ingroup  los_task
 * @brief Change the scheduling sequence of tasks with the same priority.
 *
 * @par Description:
 * This API is used to move current task in a queue of tasks with the same priority to the tail of the queue of ready
 * tasks.
 *
 * @attention
 * At least two ready tasks need to be included in the queue of ready tasks with the same priority. If the
 * less than two ready tasks are included in the queue, an error is reported.
 *
 * @param  None.
 *
 * @retval #LOS_ERRNO_TSK_YIELD_IN_INT                  The task yield occurs during an interrupt.
 * @retval #LOS_ERRNO_TSK_YIELD_IN_LOCK                 The task yield occurs when the task is locked.
 * @retval #LOS_ERRNO_TSK_ID_INVALID                    The current task ID is invalid.
 * @retval #LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK         No tasks with the same priority is available for scheduling.
 * @retval #LOS_OK                                      The scheduling sequence of tasks with same priority is
 *                                                      successfully changed.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskYield(VOID);
/*这是华为LiteOS中用于改变具有相同优先级的任务调度顺序的函数LOS_TaskYield的声明。

该函数的功能是将当前任务移动到具有相同优先级的就绪任务队列的队尾。*/
/**
 * @ingroup  los_task
 * @brief Obtain a task priority.
 *
 * @par Description:
 * This API is used to obtain the priority of a specified task.
 *
 * @attention None.
 *
 * @param  taskId [IN] Type #UINT32 Task ID. The task id value is obtained from task creation.
 *
 * @retval #OS_INVALID      Fails to obtain the task priority.
 * @retval #UINT16          The task priority.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskPriSet
 * @since Huawei LiteOS V100R001C00
 */
extern UINT16 LOS_TaskPriGet(UINT32 taskId);
/*这是华为LiteOS中获取指定任务优先级的函数LOS_TaskPriGet的声明。

该函数的功能是获取指定任务的优先级。*/
/**
 * @ingroup  los_task
 * @brief Obtain current running task ID.
 *
 * @par Description:
 * This API is used to obtain the ID of current running task.
 *
 * @attention
 * This interface should not be called before system initialized.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID    Can not get current running task.
 * @retval #UINT32                      Task ID.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_CurTaskIDGet(VOID);
/*这是华为LiteOS中获取当前正在运行的任务ID的函数LOS_CurTaskIDGet的声明。

该函数的功能是获取当前正在运行的任务的ID。*/
/**
 * @ingroup  los_task
 * @brief Obtain a task information structure.
 *
 * @par Description:
 * This API is used to obtain a task information structure.
 *
 * @attention
 * One parameter of this interface is a pointer, it should be a correct value, otherwise, the system may be
 * abnormal.
 *
 * @param  taskId    [IN]  Type  #UINT32 Task ID. The task id value is obtained from task creation.
 * @param  taskInfo [OUT] Type  #TSK_INFO_S* Pointer to the task information structure to be obtained.
 *
 * @retval #LOS_ERRNO_TSK_PTR_NULL        Null parameter.
 * @retval #LOS_ERRNO_TSK_ID_INVALID      Invalid task ID.
 * @retval #LOS_ERRNO_TSK_NOT_CREATED     The task is not created.
 * @retval #LOS_OK                        The task information structure is successfully obtained.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V100R001C00
 */
extern UINT32 LOS_TaskInfoGet(UINT32 taskId, TSK_INFO_S *taskInfo);
/*这是华为LiteOS中获取任务信息结构的函数LOS_TaskInfoGet的声明。

该函数的功能是获取一个任务信息结构。*/
/**
 * @ingroup  los_task
 * @brief Set the affinity mask of the task scheduling cpu.
 *
 * @par Description:
 * This API is used to set the affinity mask of the task scheduling cpu.
 *
 * @attention
 * If any low #LOSCFG_KERNEL_CORE_NUM bit of the mask is not set or the system task is set, an error is reported.
 *
 * @param  taskId        [IN]  Type  #UINT32 Task ID. The task id value is obtained from task creation.
 * @param  usCpuAffiMask [IN]  Type  #UINT16 The scheduling cpu mask.The low to high bit of the mask corresponds to
 *                             the cpu number, the high bit that exceeding the CPU number is ignored.
 *
 * @retval #LOS_ERRNO_TSK_ID_INVALID                Invalid task ID.
 * @retval #LOS_ERRNO_TSK_NOT_CREATED               The task is not created.
 * @retval #LOS_ERRNO_TSK_CPU_AFFINITY_MASK_ERR     The task cpu affinity mask is incorrect.
 * @retval #LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK       The task is system task.
 * @retval #LOS_OK                                  The task cpu affinity mask is successfully set.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskCpuAffiGet
 * @since Huawei LiteOS V200R003C00
 */
extern UINT32 LOS_TaskCpuAffiSet(UINT32 taskId, UINT16 usCpuAffiMask);
/*这是华为LiteOS中设置任务调度CPU亲和性掩码的函数LOS_TaskCpuAffiSet的声明。

该函数的功能是设置任务调度CPU亲和性掩码，即指定任务允许运行在哪些CPU核心上*/
/**
 * @ingroup  los_task
 * @brief Get the affinity mask of the task scheduling cpu.
 *
 * @par Description:
 * This API is used to get the affinity mask of the task scheduling cpu.
 *
 * @attention None.
 *
 * @param  taskId       [IN]  Type  #UINT32 Task ID. The task id value is obtained from task creation.
 *
 * @retval 0            Fail to obtain the cpu affinity mask.
 * @retval #UINT16      The scheduling cpu mask. The low to high bit of the mask corresponds to the cpu number.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see LOS_TaskCpuAffiSet
 * @since Huawei LiteOS V200R003C00
 */
extern UINT16 LOS_TaskCpuAffiGet(UINT32 taskId);
/*这是华为LiteOS中获取任务调度CPU亲和性掩码的函数LOS_TaskCpuAffiGet的声明。

该函数的功能是获取任务调度CPU的亲和性掩码，即获取指定任务允许运行在哪些CPU核心上*/
/**
 * @ingroup  los_task
 * @brief Recycle task stack resource.
 *
 * @par Description:
 * This API is used to recycle task stack resource.
 *
 * @attention None.
 *
 * @param  None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see None.
 * @since Huawei LiteOS V200R003C00
 */
extern VOID LOS_TaskResRecycle(VOID);
/*这是华为LiteOS中回收任务堆栈资源的函数LOS_TaskResRecycle的声明。

该函数的功能是回收已经被删除的任务的堆栈资源。当任务被删除时，它的堆栈内存块不会立即释放，而是留给后续新创建的任务使用。但如果一段时间后没有新任务创建，
则这些堆栈内存块会浪费系统资源，应该通过调用此函数进行回收*/
#ifdef LOSCFG_OBSOLETE_API
    #define LOS_TASK_PARAM_INIT_ARG_0(initParam, arg) \
            initParam.auwArgs[0] = (UINTPTR)arg
    #define LOS_TASK_PARAM_INIT_ARG(initParam, arg) LOS_TASK_PARAM_INIT_ARG_0(initParam, arg)
#else
    #define LOS_TASK_PARAM_INIT_ARG(initParam, arg) \
            initParam.pArgs = (VOID *)arg
#endif
/*这段代码是关于任务参数初始化宏的定义*/
/**
 * @ingroup los_task
 * @brief Define the lowpower framework process function type.
 *
 * @par Description:
 * This API is used to define the lowpower framework entry function type.
 *
 * @attention None.
 *
 * @param None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see None.
 * @since Huawei LiteOS V200R005C10
 */
typedef VOID (*LOWPOWERIDLEHOOK)(VOID);
/*这段代码定义了一个函数指针类型LOWPOWERIDLEHOOK，用于定义低功耗框架的处理函数*/
/**
 * @ingroup  los_task
 * @brief Register a hook to enter lowpower framework process.
 *
 * @par Description:
 * This API is used to register lowpower framework entry function.
 *
 * @attention None.
 *
 * @param  hook [IN] The lowpower framework hook.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see None.
 * @since Huawei LiteOS V200R005C10
 */
extern VOID LOS_LowpowerHookReg(LOWPOWERIDLEHOOK hook);
/*这段代码是关于注册低功耗处理函数的函数LOS_LowpowerHookReg的声明。

该函数的功能是向系统注册一个用于处理低功耗操作的函数。此函数将会在系统进入低功耗模式时被调用，以执行特定的低功耗操作或处理*/
/**
 * @ingroup los_task
 * @brief Define the type of idle handler hook function.
 *
 * @par Description:
 * This API is used to define the type of idle handler hook function.
 * @attention None.
 *
 * @param None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @since Huawei LiteOS V200R005C20
 */
typedef VOID (*IDLEHANDLERHOOK)(VOID);
/*这段代码定义了一个函数指针类型IDLEHANDLERHOOK，用于定义空闲处理函数的类型。

该函数指针类型的函数原型为VOID (*IDLEHANDLERHOOK)(VOID)，表示该函数没有任何参数，也没有返回值。

在系统空闲状态时，可以使用IDLEHANDLERHOOK类型的函数指针来定义一个空闲处理函数。这个处理函数会在系统处于空闲状态时被调用，可以用于执行一些特定的任务或操作*/
/**
 * @ingroup  los_task
 * @brief Register the hook function for idle task.
 *
 * @par Description:
 * This API is used to register a hook function called when system idle.
 *
 * @attention The hook will be called when system idle.
 *
 * @param None.
 *
 * @retval None.
 * @par Dependency:
 * <ul><li>los_task.h: the header file that contains the API declaration.</li></ul>
 * @see None.
 * @since Huawei LiteOS V200R005C20
 */
extern VOID LOS_IdleHandlerHookReg(IDLEHANDLERHOOK hook);
/*这段代码是关于注册空闲处理函数的函数LOS_IdleHandlerHookReg的声明。

该函数的功能是向系统注册一个用于处理空闲状态的函数。此函数将会在系统进入空闲状态时被调用，以执行特定的任务或操作*/
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cplusplus */
#endif /* __cplusplus */

#endif /* _LOS_TASK_H */
