函数 | |
LITE_OS_SEC_BSS | SPIN_LOCK_INIT (g_taskSpin) |
STATIC VOID | OsConsoleIDSetHook (UINT32 param1, UINT32 param2) __attribute__((weakref("OsSetConsoleID"))) |
LosTaskCB * | OsGetMainTask () |
VOID | OsSetMainTask () |
LITE_OS_SEC_TEXT WEAK VOID | OsIdleTask (VOID) |
空闲任务,每个CPU都有自己的空闲任务 更多... | |
VOID | OsTaskInsertToRecycleList (LosTaskCB *taskCB) |
LITE_OS_SEC_TEXT_INIT VOID | OsTaskJoinPostUnsafe (LosTaskCB *taskCB) |
OsTaskJoinPostUnsafe 查找task 通过 OS_TCB_FROM_PENDLIST 来完成,相当于由LOS_DL_LIST找到LosTaskCB, 将那些和参数任务绑在一起的task唤醒. 更多... | |
LITE_OS_SEC_TEXT UINT32 | OsTaskJoinPendUnsafe (LosTaskCB *taskCB) |
挂起任务,任务进入等待链表,Join代表是支持通过一个任务去唤醒其他的任务 更多... | |
LITE_OS_SEC_TEXT UINT32 | OsTaskSetDetachUnsafe (LosTaskCB *taskCB) |
任务设置分离模式 Deatch和JOIN是一对有你没我的状态 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | OsTaskInit (VOID) |
UINT32 | OsGetIdleTaskId (VOID) |
获取IdletaskId,每个CPU核都对Task进行了内部管理,做到真正的并行处理 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | OsIdleTaskCreate (VOID) |
创建一个空闲任务 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_CurTaskIDGet (VOID) |
Obtain current running task ID. 更多... | |
STATIC INLINE UINT32 | OsTaskSyncCreate (LosTaskCB *taskCB) |
创建指定任务同步信号量 更多... | |
STATIC INLINE VOID | OsTaskSyncDestroy (UINT32 syncSignal) |
销毁指定任务同步信号量 更多... | |
STATIC INLINE UINT32 | OsTaskSyncWait (const LosTaskCB *taskCB) |
OsTaskSyncWait 任务同步等待,通过信号量保持同步 更多... | |
STATIC INLINE VOID | OsTaskSyncWake (const LosTaskCB *taskCB) |
同步唤醒 更多... | |
STATIC INLINE VOID | OsInsertTCBToFreeList (LosTaskCB *taskCB) |
STATIC VOID | OsTaskKernelResourcesToFree (UINT32 syncSignal, UINTPTR topOfStack) |
STATIC VOID | OsTaskResourcesToFree (LosTaskCB *taskCB) |
LITE_OS_SEC_TEXT VOID | OsTaskCBRecycleToFree () |
LITE_OS_SEC_TEXT_INIT VOID | OsTaskEntry (UINT32 taskID) |
LITE_OS_SEC_TEXT_INIT STATIC UINT32 | OsTaskCreateParamCheck (const UINT32 *taskID, TSK_INIT_PARAM_S *initParam, VOID **pool) |
任务创建参数检查 更多... | |
LITE_OS_SEC_TEXT_INIT STATIC VOID | OsTaskStackAlloc (VOID **topStack, UINT32 stackSize, VOID *pool) |
任务栈(内核态)内存分配,由内核态进程空间提供,即 KProcess 的进程空间 更多... | |
STATIC VOID | TaskCBBaseInit (LosTaskCB *taskCB, const VOID *stackPtr, const VOID *topStack, const TSK_INIT_PARAM_S *initParam) |
任务基本信息的初始化 更多... | |
STATIC UINT32 | OsTaskCBInit (LosTaskCB *taskCB, const TSK_INIT_PARAM_S *initParam, const VOID *stackPtr, const VOID *topStack) |
任务初始化 更多... | |
LITE_OS_SEC_TEXT LosTaskCB * | OsGetFreeTaskCB (VOID) |
获取一个空闲TCB 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_TaskCreateOnly (UINT32 *taskID, TSK_INIT_PARAM_S *initParam) |
LOS_TaskCreateOnly 创建任务,并使该任务进入suspend状态,不对该任务进行调度。如果需要调度,可以调用LOS_TaskResume使该任务进入ready状态 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_TaskCreate (UINT32 *taskID, TSK_INIT_PARAM_S *initParam) |
创建任务,并使该任务进入ready状态,如果就绪队列中没有更高优先级的任务,则运行该任务 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_TaskResume (UINT32 taskID) |
恢复挂起的任务,使该任务进入ready状态 更多... | |
LITE_OS_SEC_TEXT_INIT STATIC BOOL | OsTaskSuspendCheckOnRun (LosTaskCB *taskCB, UINT32 *ret) |
LITE_OS_SEC_TEXT STATIC UINT32 | OsTaskSuspend (LosTaskCB *taskCB) |
任务暂停,参数可以不是当前任务,也就是说 A任务可以让B任务处于阻塞状态,挂起指定的任务,然后切换任务 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_TaskSuspend (UINT32 taskID) |
外部接口,对OsTaskSuspend的封装 更多... | |
STATIC INLINE VOID | OsTaskStatusUnusedSet (LosTaskCB *taskCB) |
设置任务为不使用状态 更多... | |
STATIC VOID | OsTaskReleaseHoldLock (LosTaskCB *taskCB) |
LITE_OS_SEC_TEXT VOID | OsRunningTaskToExit (LosTaskCB *runTask, UINT32 status) |
LITE_OS_SEC_TEXT VOID | OsInactiveTaskDelete (LosTaskCB *taskCB) |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_TaskDelete (UINT32 taskID) |
Delete a task. 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_TaskDelay (UINT32 tick) |
任务延时等待,释放CPU,等待时间到期后该任务会重新进入ready状态 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT16 | LOS_TaskPriGet (UINT32 taskID) |
获取任务的优先级 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_TaskPriSet (UINT32 taskID, UINT16 taskPrio) |
设置指定任务的优先级 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_CurTaskPriSet (UINT16 taskPrio) |
设置当前任务的优先级 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_TaskYield (VOID) |
Change the scheduling sequence of tasks with the same priority. 更多... | |
LITE_OS_SEC_TEXT_MINOR VOID | LOS_TaskLock (VOID) |
Lock the task scheduling. 更多... | |
LITE_OS_SEC_TEXT_MINOR VOID | LOS_TaskUnlock (VOID) |
Unlock the task scheduling. 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_TaskInfoGet (UINT32 taskID, TSK_INFO_S *taskInfo) |
Obtain a task information structure. 更多... | |
LITE_OS_SEC_TEXT BOOL | OsTaskCpuAffiSetUnsafe (UINT32 taskID, UINT16 newCpuAffiMask, UINT16 *oldCpuAffiMask) |
CPU亲和性(affinity)将任务绑在指定CPU上,用于多核CPU情况,(该函数仅在SMP模式下支持) 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_TaskCpuAffiSet (UINT32 taskID, UINT16 cpuAffiMask) |
Set the affinity mask of the task scheduling cpu. 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT16 | LOS_TaskCpuAffiGet (UINT32 taskID) |
查询任务被绑在哪个CPU上 更多... | |
LITE_OS_SEC_TEXT_MINOR VOID | OsTaskProcSignal (VOID) |
LITE_OS_SEC_TEXT INT32 | OsSetTaskName (LosTaskCB *taskCB, const CHAR *name, BOOL setPName) |
INT32 | OsUserTaskOperatePermissionsCheck (const LosTaskCB *taskCB) |
INT32 | OsUserProcessOperatePermissionsCheck (const LosTaskCB *taskCB, UINT32 processID) |
LITE_OS_SEC_TEXT_INIT STATIC UINT32 | OsCreateUserTaskParamCheck (UINT32 processID, TSK_INIT_PARAM_S *param) |
创建任务之前,检查用户态任务栈的参数,是否地址在用户空间 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | OsCreateUserTask (UINT32 processID, TSK_INIT_PARAM_S *initParam) |
创建一个用户态任务 更多... | |
LITE_OS_SEC_TEXT INT32 | LOS_GetTaskScheduler (INT32 taskID) |
获取任务的调度方式 更多... | |
LITE_OS_SEC_TEXT INT32 | LOS_SetTaskScheduler (INT32 taskID, UINT16 policy, UINT16 priority) |
Set the scheduling policy and priority for the task. 更多... | |
STATIC UINT32 | OsTaskJoinCheck (UINT32 taskID) |
UINT32 | LOS_TaskJoin (UINT32 taskID, UINTPTR *retval) |
Wait for the specified task to finish and reclaim its resources. 更多... | |
UINT32 | LOS_TaskDetach (UINT32 taskID) |
Change the joinable attribute of the task to detach. 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_GetSystemTaskMaximum (VOID) |
Gets the maximum number of threads supported by the system. 更多... | |
LITE_OS_SEC_TEXT VOID | OsWriteResourceEvent (UINT32 events) |
LITE_OS_SEC_TEXT VOID | OsWriteResourceEventUnsafe (UINT32 events) |
STATIC VOID | OsResourceRecoveryTask (VOID) |
资源回收任务 更多... | |
LITE_OS_SEC_TEXT UINT32 | OsResourceFreeTaskCreate (VOID) |
创建一个回收资源的任务 更多... | |
LOS_MODULE_INIT (OsResourceFreeTaskCreate, LOS_INIT_LEVEL_KMOD_TASK) | |
变量 | |
LITE_OS_SEC_BSS LosTaskCB * | g_taskCBArray |
外部变量 任务池 默认128个 更多... | |
LITE_OS_SEC_BSS LOS_DL_LIST | g_losFreeTask |
LITE_OS_SEC_BSS LOS_DL_LIST | g_taskRecycleList |
LITE_OS_SEC_BSS UINT32 | g_taskMaxNum |
任务最大数量 默认128个 更多... | |
LITE_OS_SEC_BSS UINT32 | g_taskScheduled |
LITE_OS_SEC_BSS EVENT_CB_S | g_resourceEvent |
LITE_OS_SEC_BSS STATIC LosTaskCB | g_mainTask [LOSCFG_KERNEL_CORE_NUM] |
基本概念 从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、 使用内存空间等系统资源,并独立于其它任务运行。 任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。具有如下特性: 支持多任务。 一个任务表示一个线程。 抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。 相同优先级任务支持时间片轮转调度方式。 共有32个优先级[0-31],最高优先级为0,最低优先级为31。 任务状态通常分为以下四种: 就绪(Ready):该任务在就绪队列中,只等待CPU。 运行(Running):该任务正在执行。 阻塞(Blocked):该任务不在就绪队列中。包含任务被挂起(suspend状态)、任务被延时(delay状态)、 任务正在等待信号量、读写队列或者等待事件等。 退出态(Dead):该任务运行结束,等待系统回收资源。 任务状态迁移说明 就绪态→运行态 任务创建后进入就绪态,发生任务切换时,就绪队列中最高优先级的任务被执行, 从而进入运行态,但此刻该任务依旧在就绪队列中。 运行态→阻塞态 正在运行的任务发生阻塞(挂起、延时、读信号量等)时,该任务会从就绪队列中删除, 任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪队列中最高优先级任务。 阻塞态→就绪态(阻塞态→运行态) 阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被 恢复的任务会被加入就绪队列,从而由阻塞态变成就绪态;此时如果被恢复任务的优先级高于 正在运行任务的优先级,则会发生任务切换,该任务由就绪态变成运行态。 就绪态→阻塞态 任务也有可能在就绪态时被阻塞(挂起),此时任务状态由就绪态变为阻塞态,该任务 从就绪队列中删除,不会参与任务调度,直到该任务被恢复。 运行态→就绪态 有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪队列中最高优先级任务 变为运行态,那么原先运行的任务由运行态变为就绪态,依然在就绪队列中。 运行态→退出态 运行中的任务运行结束,任务状态由运行态变为退出态。退出态包含任务运行结束的正常退出状态 以及Invalid状态。例如,任务运行结束但是没有自删除,对外呈现的就是Invalid状态,即退出态。 阻塞态→退出态 阻塞的任务调用删除接口,任务状态由阻塞态变为退出态。 主要术语 任务ID 任务ID,在任务创建时通过参数返回给用户,是任务的重要标识。系统中的ID号是唯一的。用户可以 通过任务ID对指定任务进行任务挂起、任务恢复、查询任务名等操作。 任务优先级 优先级表示任务执行的优先顺序。任务的优先级决定了在发生任务切换时即将要执行的任务, 就绪队列中最高优先级的任务将得到执行。 任务入口函数 新任务得到调度后将执行的函数。该函数由用户实现,在任务创建时,通过任务创建结构体设置。 任务栈 每个任务都拥有一个独立的栈空间,我们称为任务栈。栈空间里保存的信息包含局部变量、寄存器、函数参数、函数返回地址等。 任务上下文 任务在运行过程中使用的一些资源,如寄存器等,称为任务上下文。当这个任务挂起时,其他任务继续执行, 可能会修改寄存器等资源中的值。如果任务切换时没有保存任务上下文,可能会导致任务恢复后出现未知错误。 因此,Huawei LiteOS在任务切换时会将切出任务的任务上下文信息,保存在自身的任务栈中,以便任务恢复后, 从栈空间中恢复挂起时的上下文信息,从而继续执行挂起时被打断的代码。 任务控制块TCB 每个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer)、任务状态、 任务优先级、任务ID、任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。 任务切换 任务切换包含获取就绪队列中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。 运作机制 用户创建任务时,系统会初始化任务栈,预置上下文。此外,系统还会将“任务入口函数” 地址放在相应位置。这样在任务第一次启动进入运行态时,将会执行“任务入口函数”。 *
pathname |
在文件 los_task.c 中定义.
LOS_MODULE_INIT | ( | OsResourceFreeTaskCreate | , |
LOS_INIT_LEVEL_KMOD_TASK | |||
) |
LITE_OS_SEC_TEXT_INIT UINT32 OsCreateUserTask | ( | UINT32 | processID, |
TSK_INIT_PARAM_S * | initParam | ||
) |
创建一个用户态任务
在文件 los_task.c 第 1434 行定义.
LITE_OS_SEC_TEXT_INIT STATIC UINT32 OsCreateUserTaskParamCheck | ( | UINT32 | processID, |
TSK_INIT_PARAM_S * | param | ||
) |
创建任务之前,检查用户态任务栈的参数,是否地址在用户空间
在文件 los_task.c 第 1406 行定义.
LITE_OS_SEC_TEXT LosTaskCB * OsGetFreeTaskCB | ( | VOID | ) |
获取一个空闲TCB
在文件 los_task.c 第 636 行定义.
UINT32 OsGetIdleTaskId | ( | VOID | ) |
获取IdletaskId,每个CPU核都对Task进行了内部管理,做到真正的并行处理
在文件 los_task.c 第 295 行定义.
LosTaskCB * OsGetMainTask | ( | ) |
在文件 los_task.c 第 162 行定义.
LITE_OS_SEC_TEXT WEAK VOID OsIdleTask | ( | VOID | ) |
LITE_OS_SEC_TEXT_INIT UINT32 OsIdleTaskCreate | ( | VOID | ) |
创建一个空闲任务
在文件 los_task.c 第 300 行定义.
LITE_OS_SEC_TEXT VOID OsInactiveTaskDelete | ( | LosTaskCB * | taskCB | ) |
在文件 los_task.c 第 947 行定义.
STATIC INLINE VOID OsInsertTCBToFreeList | ( | LosTaskCB * | taskCB | ) |
在文件 los_task.c 第 407 行定义.
LITE_OS_SEC_TEXT UINT32 OsResourceFreeTaskCreate | ( | VOID | ) |
创建一个回收资源的任务
在文件 los_task.c 第 1672 行定义.
STATIC VOID OsResourceRecoveryTask | ( | VOID | ) |
资源回收任务
在文件 los_task.c 第 1652 行定义.
在文件 los_task.c 第 908 行定义.
VOID OsSetMainTask | ( | ) |
在文件 los_task.c 第 167 行定义.
在文件 los_task.c 第 1337 行定义.
STATIC UINT32 OsTaskCBInit | ( | LosTaskCB * | taskCB, |
const TSK_INIT_PARAM_S * | initParam, | ||
const VOID * | stackPtr, | ||
const VOID * | topStack | ||
) |
任务初始化
在文件 los_task.c 第 594 行定义.
LITE_OS_SEC_TEXT VOID OsTaskCBRecycleToFree | ( | ) |
LITE_OS_SEC_TEXT BOOL OsTaskCpuAffiSetUnsafe | ( | UINT32 | taskID, |
UINT16 | newCpuAffiMask, | ||
UINT16 * | oldCpuAffiMask | ||
) |
LITE_OS_SEC_TEXT_INIT STATIC UINT32 OsTaskCreateParamCheck | ( | const UINT32 * | taskID, |
TSK_INIT_PARAM_S * | initParam, | ||
VOID ** | pool | ||
) |
任务创建参数检查
在文件 los_task.c 第 515 行定义.
LITE_OS_SEC_TEXT_INIT VOID OsTaskEntry | ( | UINT32 | taskID | ) |
在文件 los_task.c 第 493 行定义.
LITE_OS_SEC_TEXT_INIT UINT32 OsTaskInit | ( | VOID | ) |
在文件 los_task.c 第 259 行定义.
VOID OsTaskInsertToRecycleList | ( | LosTaskCB * | taskCB | ) |
挂起任务,任务进入等待链表,Join代表是支持通过一个任务去唤醒其他的任务
在文件 los_task.c 第 224 行定义.
LITE_OS_SEC_TEXT_INIT VOID OsTaskJoinPostUnsafe | ( | LosTaskCB * | taskCB | ) |
OsTaskJoinPostUnsafe 查找task 通过 OS_TCB_FROM_PENDLIST 来完成,相当于由LOS_DL_LIST找到LosTaskCB, 将那些和参数任务绑在一起的task唤醒.
taskCB |
在文件 los_task.c 第 212 行定义.
在文件 los_task.c 第 417 行定义.
LITE_OS_SEC_TEXT_MINOR VOID OsTaskProcSignal | ( | VOID | ) |
由其他CPU核触发阻塞进程的信号 函数由汇编代码调用 ..\arch\arm\arm\src\los_dispatch.S
在文件 los_task.c 第 1298 行定义.
STATIC VOID OsTaskReleaseHoldLock | ( | LosTaskCB * | taskCB | ) |
在文件 los_task.c 第 883 行定义.
STATIC VOID OsTaskResourcesToFree | ( | LosTaskCB * | taskCB | ) |
在文件 los_task.c 第 424 行定义.
LITE_OS_SEC_TEXT_INIT STATIC VOID OsTaskStackAlloc | ( | VOID ** | topStack, |
UINT32 | stackSize, | ||
VOID * | pool | ||
) |
任务栈(内核态)内存分配,由内核态进程空间提供,即 KProcess 的进程空间
在文件 los_task.c 第 560 行定义.
STATIC INLINE VOID OsTaskStatusUnusedSet | ( | LosTaskCB * | taskCB | ) |
任务暂停,参数可以不是当前任务,也就是说 A任务可以让B任务处于阻塞状态,挂起指定的任务,然后切换任务
在文件 los_task.c 第 835 行定义.
创建指定任务同步信号量
在文件 los_task.c 第 341 行定义.
STATIC INLINE VOID OsTaskSyncDestroy | ( | UINT32 | syncSignal | ) |
销毁指定任务同步信号量
在文件 los_task.c 第 354 行定义.
OsTaskSyncWait
任务同步等待,通过信号量保持同步
taskCB |
在文件 los_task.c 第 372 行定义.
STATIC INLINE VOID OsTaskSyncWake | ( | const LosTaskCB * | taskCB | ) |
同步唤醒
在文件 los_task.c 第 398 行定义.
在文件 los_task.c 第 1380 行定义.
LITE_OS_SEC_TEXT VOID OsWriteResourceEvent | ( | UINT32 | events | ) |
在文件 los_task.c 第 1642 行定义.
LITE_OS_SEC_TEXT VOID OsWriteResourceEventUnsafe | ( | UINT32 | events | ) |
LITE_OS_SEC_BSS SPIN_LOCK_INIT | ( | g_taskSpin | ) |
STATIC VOID TaskCBBaseInit | ( | LosTaskCB * | taskCB, |
const VOID * | stackPtr, | ||
const VOID * | topStack, | ||
const TSK_INIT_PARAM_S * | initParam | ||
) |
LITE_OS_SEC_BSS LOS_DL_LIST g_losFreeTask |
在文件 los_task.c 第 148 行定义.
LITE_OS_SEC_BSS STATIC LosTaskCB g_mainTask[LOSCFG_KERNEL_CORE_NUM] |
在文件 los_task.c 第 160 行定义.
LITE_OS_SEC_BSS EVENT_CB_S g_resourceEvent |
在文件 los_task.c 第 152 行定义.
LITE_OS_SEC_BSS LOS_DL_LIST g_taskRecycleList |
在文件 los_task.c 第 149 行定义.
LITE_OS_SEC_BSS UINT32 g_taskScheduled |
在文件 los_task.c 第 151 行定义.