32#ifndef _LOS_TASK_PRI_H
33#define _LOS_TASK_PRI_H
51#define SIGNAL_KILL (1U << 0)
52#define SIGNAL_SUSPEND (1U << 1)
53#define SIGNAL_AFFI (1U << 2)
57#define SCHEDULER_LOCK(state) LOS_SpinLockSave(&g_taskSpin, &(state))
58#define SCHEDULER_UNLOCK(state) LOS_SpinUnlockRestore(&g_taskSpin, state)
61#define OS_TASK_INVALID_CPUID 0xFFFF
68#define OS_TASK_ERRORID 0xFFFFFFFF
76#define OS_TASK_STATUS_UNUSED 0x0400U
84#define OS_TASK_FLAG_PTHREAD_JOIN 0x0800U
92#define OS_TASK_FLAG_USER_MODE 0x1000U
100#define OS_TASK_FLAG_SYSTEM_TASK 0x2000U
108#define OS_TASK_FLAG_NO_DELETE 0x4000U
116#define OS_TASK_FLAG_EXIT_KILL 0x8000U
124#define OS_TASK_FLAG_SPECIFIES_PROCESS 0x0U
131#define OS_TASK_STACK_SIZE_ALIGN 16U
138#define OS_TASK_STACK_ADDR_ALIGN 8U
144#define OS_TSK_PRINUM (OS_TASK_PRIORITY_LOWEST - OS_TASK_PRIORITY_HIGHEST + 1)
161#define OS_TSK_GET_INDEX(taskID) (taskID)
178#define OS_TCB_FROM_PENDLIST(ptr) LOS_DL_LIST_ENTRY(ptr, LosTaskCB, pendList)
195#define OS_TCB_FROM_TID(taskID) (((LosTaskCB *)g_taskCBArray) + (taskID))
197#ifndef LOSCFG_STACK_POINT_ALIGN_SIZE
198#define LOSCFG_STACK_POINT_ALIGN_SIZE (sizeof(UINTPTR) * 2)
201#define OS_TASK_RESOURCE_STATIC_SIZE 0x1000
202#define OS_TASK_RESOURCE_FREE_PRIORITY 5
203#define OS_RESOURCE_EVENT_MASK 0xFF
204#define OS_RESOURCE_EVENT_OOM 0x02
205#define OS_RESOURCE_EVENT_FREE 0x04
252 return OS_TCB_FROM_TID(taskID);
257 return ((taskCB->
taskStatus & OS_TASK_STATUS_UNUSED) != 0);
262 return ((taskCB->
taskStatus & OS_TASK_FLAG_EXIT_KILL) != 0);
267 return ((taskCB->
taskStatus & OS_TASK_FLAG_USER_MODE) != 0);
270#define OS_TID_CHECK_INVALID(taskID) ((UINT32)(taskID) >= g_taskMaxNum)
273#define OS_ALL_TASK_MASK 0xFFFFFFFF
275#define OS_TASK_WAIT_ANYPROCESS (1 << 0U)
276#define OS_TASK_WAIT_PROCESS (1 << 1U)
277#define OS_TASK_WAIT_GID (1 << 2U)
278#define OS_TASK_WAIT_SEM (OS_TASK_WAIT_GID + 1)
279#define OS_TASK_WAIT_QUEUE (OS_TASK_WAIT_SEM + 1)
280#define OS_TASK_WAIT_JOIN (OS_TASK_WAIT_QUEUE + 1)
281#define OS_TASK_WAIT_SIGNAL (OS_TASK_WAIT_JOIN + 1)
282#define OS_TASK_WAIT_LITEIPC (OS_TASK_WAIT_SIGNAL + 1)
283#define OS_TASK_WAIT_MUTEX (OS_TASK_WAIT_LITEIPC + 1)
284#define OS_TASK_WAIT_FUTEX (OS_TASK_WAIT_MUTEX + 1)
285#define OS_TASK_WAIT_EVENT (OS_TASK_WAIT_FUTEX + 1)
286#define OS_TASK_WAIT_COMPLETE (OS_TASK_WAIT_EVENT + 1)
UINT32 g_taskMaxNum
任务最大数量 默认128个
LosTaskCB * g_taskCBArray
外部变量 任务池 默认128个
STATIC INLINE LosTaskCB * OsCurrTaskGet(VOID)
VOID OsInactiveTaskDelete(LosTaskCB *taskCB)
VOID OsWriteResourceEventUnsafe(UINT32 events)
UINT32 OsCreateUserTask(UINT32 processID, TSK_INIT_PARAM_S *initParam)
创建一个用户态任务
LosTaskCB * OsGetMainTask(VOID)
INT32 OsSetTaskName(LosTaskCB *taskCB, const CHAR *name, BOOL setPName)
UINT32 OsResourceFreeTaskCreate(VOID)
创建一个回收资源的任务
UINT32 OsTaskJoinPendUnsafe(LosTaskCB *taskCB)
挂起任务,任务进入等待链表,Join代表是支持通过一个任务去唤醒其他的任务
STATIC INLINE LosTaskCB * OsGetTaskCB(UINT32 taskID)
通过任务ID获取任务实体,task由任务池分配,本质是个数组,彼此都挨在一块
VOID OsTaskContextLoad(LosTaskCB *newTask)
VOID OsTaskEntry(UINT32 taskID)
UINT32 OsIdleTaskCreate(VOID)
创建一个空闲任务
STATIC INLINE VOID OsTaskWaitSetPendMask(UINT16 mask, UINTPTR lockID, UINT32 timeout)
设置事件阻塞掩码,即设置任务的等待事件.
STATIC INLINE VOID OsTaskWakeClearPendMask(LosTaskCB *resumeTask)
清除事件阻塞掩码,即任务不再等待任何事件.
VOID OsTaskCBRecycleToFree(VOID)
INT32 OsTcbDispatch(LosTaskCB *stcb, siginfo_t *info)
给任务(线程)发送一个信号
INT32 OsUserProcessOperatePermissionsCheck(const LosTaskCB *taskCB, UINT32 processID)
int(* ForEachTaskCB)(LosTaskCB *tcb, void *arg)
回调任务函数,例如:进程被kill 9 时,通知所有任务善后处理
VOID OsRunningTaskToExit(LosTaskCB *runTask, UINT32 status)
UINT32 OsGetIdleTaskId(VOID)
获取IdletaskId,每个CPU核都对Task进行了内部管理,做到真正的并行处理
STATIC INLINE BOOL OsTaskIsUserMode(const LosTaskCB *taskCB)
VOID OsTaskJoinPostUnsafe(LosTaskCB *taskCB)
OsTaskJoinPostUnsafe 查找task 通过 OS_TCB_FROM_PENDLIST 来完成,相当于由LOS_DL_LIST找到LosTaskCB,...
BOOL OsTaskCpuAffiSetUnsafe(UINT32 taskID, UINT16 newCpuAffiMask, UINT16 *oldCpuAffiMask)
CPU亲和性(affinity)将任务绑在指定CPU上,用于多核CPU情况,(该函数仅在SMP模式下支持)
STATIC INLINE BOOL OsTaskIsKilled(const LosTaskCB *taskCB)
UINT32 OsTaskSetDetachUnsafe(LosTaskCB *taskCB)
任务设置分离模式 Deatch和JOIN是一对有你没我的状态
UINT32 OsShellCmdTskInfoGet(UINT32 taskID, VOID *seqfile, UINT16 flag)
STATIC INLINE BOOL OsTaskIsUnused(const LosTaskCB *taskCB)
任务是否在使用
VOID OsTaskInsertToRecycleList(LosTaskCB *taskCB)
VOID OsIdleTask(VOID)
空闲任务,每个CPU都有自己的空闲任务
INT32 OsUserTaskOperatePermissionsCheck(const LosTaskCB *taskCB)
VOID OsWriteResourceEvent(UINT32 events)
VOID OsTaskSchedule(LosTaskCB *, LosTaskCB *)
VOID OsTaskProcSignal(VOID)
UINT32 OsShellCmdDumpTask(INT32 argc, const CHAR **argv)