task
task 提供内核线程的创建、销毁、优先级设置与调度控制功能,支持多操作系统(linux liteos freertos)下的任务管理与休眠延时。
头文件清单
接口清单
Functions
osal_kthread_create
osal_task *osal_kthread_create(osal_kthread_handler handler, void *data, const char *name, unsigned int stack_size)
头文件清单
功能说明
- 提供内核线程创建接口,内部调用 kthread_run 创建内核线程
- 若创建的线程栈大小小于等于 MINIMAL_STACK_SIZE,则将栈大小设为 MINIMAL_STACK_SIZE
- 栈大小需足够大以避免任务栈溢出
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:模块已初始化完成,内核调度已启动或即将启动
- 参数约束:handler 函数指针不为 NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| handler | osal_kthread_handler | 线程入口函数 | 非 NULL,函数签名为 int ()(void ) |
| data | void * | 传递给线程入口函数的参数 | 可为 NULL |
| name | const char * | 线程名称 | 非 NULL,字符串标识 |
| stack_size | unsigned int | 线程栈空间大小(字节) | 大于 0,小于等于 MINIMAL_STACK_SIZE 时自动设为 MINIMAL_STACK_SIZE |
返回值
- 返回类型:
osal_task *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非 NULL 指针 | 线程创建成功 | 线程成功创建并返回线程指针 |
| NULL | 线程创建失败 | 参数无效或内存分配失败或底层任务创建失败 |
参考案例
application/3322/input_wear/input_feature/input_feature.c#input_device_taskapplication/ux/solution/system/ux_api_system_config.c#ux_system_execute_format
osal_kthread_create_static_ext
头文件清单
功能说明
- 以静态栈方式创建内核线程,调用者自行分配栈空间
- 通过 osal_kthread_init 结构体传入线程参数,支持设置优先级、调度策略等扩展属性
- 支持系统:liteos
前置条件
- 调用时序约束:内核调度已启动或即将启动
- 依赖关系:init_handle 不为 NULL,topStack 不为 NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| init_handle | osal_kthread_init * | 线程初始化参数结构体 | 非 NULL |
| topStack | void * | 任务栈指针 | 非 NULL,由调用者分配 |
返回值
- 返回类型:
osal_task *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非 NULL 指针 | 线程创建成功 | 线程成功创建并返回线程指针 |
| NULL | 线程创建失败 | 参数无效或底层任务创建失败 |
osal_kthread_create_ext
头文件清单
功能说明
- 以扩展参数方式创建内核线程,通过 osal_kthread_init 结构体传入线程参数
- 支持设置优先级、调度策略等扩展属性
- 支持系统:liteos
前置条件
- 调用时序约束:内核调度已启动或即将启动
- 依赖关系:init_handle 不为 NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| init_handle | osal_kthread_init * | 线程初始化参数结构体 | 非 NULL |
返回值
- 返回类型:
osal_task *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非 NULL 指针 | 线程创建成功 | 线程成功创建并返回线程指针 |
| NULL | 线程创建失败 | 参数无效或底层任务创建失败 |
osal_kthread_set_priority
头文件清单
功能说明
- 设置指定线程的优先级
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_create 成功创建
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 目标线程句柄 | 非 NULL,须为 osal_kthread_create 返回的有效指针 |
| priority | unsigned int | 待设置的优先级 | OSAL_TASK_PRIORITY_HIGH(3) / OSAL_TASK_PRIORITY_MIDDLE(6) / OSAL_TASK_PRIORITY_LOW(10)(LiteOS/FreeRTOS 模式) |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 设置成功 | 优先级设置成功 |
| OSAL_FAILURE(-1) | 设置失败 | task 为 NULL |
| 其他非零值 | 底层返回码 | 底层 LOS_TaskPriSet 返回非 LOS_OK |
参考案例
application/3322/input_wear/input_feature/input_feature.c
osal_kthread_set_policy
头文件清单
功能说明
- 设置指定线程的调度策略
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_create 成功创建
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 目标线程句柄 | 非 NULL,须为 osal_kthread_create 返回的有效指针 |
| policy | osal_thread_policy | 调度策略 | OSAL_THREAD_POLICY_DEFAULT(0) / OSAL_THREAD_POLICY_RT(1) / OSAL_THREAD_POLICY_CFS(2) |
osal_kthread_set_affinity
头文件清单
功能说明
- 设置线程的 CPU 亲和性,指定线程可在哪些 CPU 核上运行
- 支持系统:linux liteos
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_create 成功创建
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 目标线程句柄 | 非 NULL |
| cpu_mask | int | CPU 亲和性掩码 | OSAL_CPU_ALL / OSAL_CPU_0 / OSAL_CPU_1 / OSAL_CPU_2 / OSAL_CPU_3 |
osal_kthread_should_stop
头文件清单
功能说明
- 检查当前线程是否应停止运行
- 用于内核线程的退出判断
- 支持系统:linux liteos
前置条件
- 调用时序约束:当前线程为通过 osal_kthread_create 创建的内核线程
- 上下文限制:需在任务上下文中调用
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 线程继续运行 | 当前线程未被要求停止 |
| 1 | 线程应停止 | 当前线程被 kthread_stop 停止 |
osal_kthread_wakeup_process
头文件清单
功能说明
- 唤醒指定的线程
- 支持系统:linux
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_create 成功创建
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 待唤醒的线程句柄 | 非 NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 唤醒成功 | 线程成功被唤醒 |
| -1 | 唤醒失败 | 唤醒操作失败 |
osal_kthread_bind
头文件清单
功能说明
- 将指定线程绑定到特定 CPU 核上运行
- 支持系统:linux
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_create 成功创建
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 目标线程句柄 | 非 NULL |
| cpu | unsigned int | 绑定的 CPU 核编号 | 有效 CPU 核编号 |
osal_kthread_lock
头文件清单
功能说明
- 锁定任务调度,锁定后不会发生任务切换
- 若任务调度已锁定但中断未禁用,任务仍可被中断
- 每次调用将任务调度锁计数加一,须与 osal_kthread_unlock 配对使用
- 支持系统:liteos freertos
前置条件
- 上下文限制:须与 osal_kthread_unlock 配对使用,确保锁计数最终归零
- 调用时序约束:内核调度已启动
osal_kthread_unlock
头文件清单
功能说明
- 解锁任务调度,调用后将任务锁计数减一
- 若任务被多次锁定,仅在锁计数归零时才会真正解锁
- 须与 osal_kthread_lock 配对使用
- 支持系统:liteos freertos
前置条件
- 调用时序约束:此前已调用 osal_kthread_lock
- 上下文限制:须与 osal_kthread_lock 配对使用
osal_kthread_destroy
头文件清单
功能说明
- 停止并销毁指定的内核线程
- 调用此接口会释放 task 内存,调用者需将指针置 NULL
- 若要销毁线程,该线程不能在调用此函数前已自行结束,否则将触发异常
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:目标线程由 osal_kthread_create 创建,且线程函数尚未自行退出
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 待销毁的线程句柄 | 非 NULL,须为 osal_kthread_create 返回的有效指针 |
| stop_flag | unsigned int | 是否停止当前线程的标志 | 0:不停止线程;非 0:停止线程 |
osal_kthread_schedule
头文件清单
功能说明
- 设置当前线程为 TASK_UNINTERRUPTIBLE 状态并休眠指定纳秒数
- 在此状态下线程不能被外部信号唤醒,只能由内核在休眠时间到达后唤醒
- 支持系统:linux
前置条件
- 上下文限制:当前处于任务上下文
- 调用时序约束:内核调度已启动
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| sleep_ns | unsigned int | 休眠时间(纳秒) | 大于 0 |
osal_kthread_set_uninterrupt
头文件清单
功能说明
- 设置当前线程为 TASK_UNINTERRUPTIBLE 状态
- 在此状态下线程不能被外部信号唤醒,只能由内核自身唤醒
- 支持系统:linux
前置条件
- 上下文限制:当前处于任务上下文
- 调用时序约束:内核调度已启动
osal_kthread_set_running
头文件清单
功能说明
- 设置当前线程状态为 TASK_RUNNING
- 处于可运行状态不意味着已分配到 CPU,需等待调度器选择
- 支持系统:linux
前置条件
- 上下文限制:当前处于任务上下文
- 调用时序约束:内核调度已启动
osal_cond_resched
头文件清单
功能说明
- 主动让出 CPU 资源,防止内核态长时间运行导致软锁定或长调度延迟
- 支持系统:linux
前置条件
- 上下文限制:当前处于内核态任务上下文
- 调用时序约束:内核调度已启动
osal_schedule
头文件清单
功能说明
- 将当前任务放回就绪队列并尝试执行调度
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
osal_kneon_begin
头文件清单
功能说明
- 启用 NEON 算法加速
- 仅在定义了 CONFIG_KERNEL_MODE_NEON 时生效,否则不做任何操作
- 支持系统:linux
前置条件
- 依赖关系:CONFIG_KERNEL_MODE_NEON 宏已定义
- 上下文限制:需在内核态任务上下文中调用
osal_kneon_end
头文件清单
功能说明
- 停用 NEON 算法加速
- 仅在定义了 CONFIG_KERNEL_MODE_NEON 时生效,否则不做任何操作
- 支持系统:linux
前置条件
- 依赖关系:CONFIG_KERNEL_MODE_NEON 宏已定义,此前已调用 osal_kneon_begin
- 上下文限制:需在内核态任务上下文中调用
osal_yield
头文件清单
功能说明
- 暂停当前线程,释放 CPU 时间片,使线程重新参与调度竞争
- 当前线程可能重新获得 CPU,也可能被其他线程获得
- 支持系统:linux freertos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
osal_get_current_pid
头文件清单
功能说明
- 获取当前线程的 PID (Process Identifier)
- 支持系统:linux liteos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
返回值
- 返回类型:long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 大于 0 | 当前线程的 PID | 获取成功 |
| 其他 | 获取失败 | 内核未就绪 |
osal_get_current_tid
头文件清单
功能说明
- 获取当前线程的 TID (Thread Identifier)
- 支持系统:linux liteos seliteos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
返回值
- 返回类型:long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 大于 0 | 当前线程的 TID | 获取成功 |
| 其他 | 获取失败 | 内核未就绪 |
osal_get_current_tgid
头文件清单
功能说明
- 获取当前线程的 TGID (Thread Group Identifier)
- 支持系统:linux
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 大于 0 | 当前线程的 TGID | 获取成功 |
| 其他 | 获取失败 | 内核未就绪 |
osal_get_current_taskname
头文件清单
功能说明
- 获取当前线程的名称
- 支持系统:linux
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
返回值
- 返回类型:
char *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非 NULL | 当前线程名称字符串 | 获取成功 |
| NULL | 获取失败 | 内核未就绪 |
osal_msleep
头文件清单
功能说明
- 以毫秒为单位使当前线程休眠
- 定时器到期时返回 0,否则返回剩余毫秒数
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:当前处于任务上下文
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| msecs | unsigned int | 休眠时间(毫秒) | 大于 0 |
返回值
- 返回类型:unsigned long
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 定时器已到期 | 休眠时间完整度过 |
| 非 0 剩余毫秒数 | 休眠被提前唤醒 | 休眠期间被信号中断 |
osal_msleep_uninterruptible
头文件清单
功能说明
- 以毫秒为单位进行不可中断休眠,即使等待队列中断也能安全休眠
- 支持系统:linux liteos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:当前处于任务上下文
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| msecs | unsigned int | 休眠时间(毫秒) | 大于 0 |
osal_udelay
头文件清单
功能说明
- 以微秒为单位的忙等待延时
- 不释放 CPU,通过忙循环实现精确短延时
- 支持系统:linux liteos freertos
前置条件
- 调用上下文约束:适用于需要精确短延时的场景,禁止在中断上下文中长时间延时
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| usecs | unsigned int | 延时时间(微秒) | 大于 0 |
osal_mdelay
头文件清单
功能说明
- 以毫秒为单位的忙等待延时
- 不释放 CPU,通过忙循环实现精确短延时
- 支持系统:linux liteos freertos
前置条件
- 调用上下文约束:适用于需要精确短延时的场景,禁止在中断上下文中长时间延时
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| msecs | unsigned int | 延时时间(毫秒) | 大于 0 |
osal_kthread_suspend
头文件清单
功能说明
- 挂起指定线程,将其从就绪队列中移除
- 支持系统:liteos
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_create 成功创建
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 待挂起的线程句柄 | 非 NULL |
osal_kthread_resume
头文件清单
功能说明
- 恢复已挂起的线程
- 支持系统:liteos
前置条件
- 调用时序约束:目标线程已通过 osal_kthread_suspend 挂起
- 依赖关系:task 须为 osal_kthread_create 返回的有效指针
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| task | osal_task * | 待恢复的线程句柄 | 非 NULL |
osal_kthread_recycle
头文件清单
功能说明
- 回收所有僵尸线程
- 支持系统:liteos
前置条件
- 调用时序约束:内核调度已启动
- 上下文限制:需在任务上下文中调用
osal_kernel_init
头文件清单
功能说明
- 初始化内核
- 支持系统:liteos
前置条件
- 调用时序约束:系统启动阶段,内核尚未启动
- 调用上下文约束:需在主线程中调用
返回值
- 返回类型:unsigned int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 初始化成功 | 内核初始化成功 |
| OSAL_FAILURE(-1) | 初始化失败 | 内核初始化失败 |
osal_kernel_start
头文件清单
功能说明
- 启动内核调度
- 支持系统:liteos
前置条件
- 调用时序约束:内核已通过 osal_kernel_init 成功初始化
- 调用上下文约束:需在主线程中调用
返回值
- 返回类型:unsigned int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 启动成功 | 内核启动成功 |
| OSAL_FAILURE(-1) | 启动失败 | 内核启动失败 |
osal_kernel_get_state
头文件清单
功能说明
- 获取内核当前运行状态
- 支持系统:liteos
前置条件
- 调用时序约束:内核已初始化
- 上下文限制:需在任务上下文中调用
返回值
- 返回类型:osal_kernel_status
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_KERNEL_STATUS_INACTIVE(0) | 内核未激活 | 内核尚未启动 |
| OSAL_KERNEL_STATUS_READY(1) | 内核就绪 | 内核已初始化就绪 |
| OSAL_KERNEL_STATUS_RUNING(2) | 内核运行中 | 内核正在运行 |
| OSAL_KERNEL_STATUS_SCHEDULE_LOCK(3) | 内核调度被锁定 | 调度锁生效 |
| OSAL_KERNEL_STATUS_ERROR(-1) | 内核状态错误 | 状态异常 |
Type definitions
osal_kthread_handler
使用说明
- 用于 osal_kthread_create 的线程入口函数指针类型
- 调用时机:线程被内核调度器选中运行时,由内核调用该回调函数
- 参数 data:由 osal_kthread_create 的 data 参数透传而来
- 返回值处理:线程入口函数的返回值由调用者自行处理,内核不检查返回值
Enumerations
osal_thread_policy
typedef enum {
OSAL_THREAD_POLICY_DEFAULT = 0, // Rt/RR/FIFO.
OSAL_THREAD_POLICY_RT = 1, // Rt/RR/FIFO.
OSAL_THREAD_POLICY_CFS = 2, // CFS.
} osal_thread_policy;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| OSAL_THREAD_POLICY_DEFAULT | 0 | 默认调度策略(RT/RR/FIFO) |
| OSAL_THREAD_POLICY_RT | 1 | 实时调度策略(RT/RR/FIFO) |
| OSAL_THREAD_POLICY_CFS | 2 | 完全公平调度策略(CFS) |
osal_kernel_status
typedef enum {
OSAL_KERNEL_STATUS_INACTIVE = 0, // Inactive.
OSAL_KERNEL_STATUS_READY = 1, // Ready.
OSAL_KERNEL_STATUS_RUNING = 2, // Running.
OSAL_KERNEL_STATUS_SCHEDULE_LOCK = 3, // Blocked.
OSAL_KERNEL_STATUS_ERROR = -1 // Error.
} osal_kernel_status;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| OSAL_KERNEL_STATUS_INACTIVE | 0 | 内核未激活 |
| OSAL_KERNEL_STATUS_READY | 1 | 内核就绪 |
| OSAL_KERNEL_STATUS_RUNING | 2 | 内核运行中 |
| OSAL_KERNEL_STATUS_SCHEDULE_LOCK | 3 | 内核调度被锁定 |
| OSAL_KERNEL_STATUS_ERROR | -1 | 内核状态错误 |
Structures
osal_task
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| task | void * | 底层任务句柄指针 |
osal_kthread_init
typedef struct {
osal_kthread_handler handler; /**< Task entrance function */
unsigned int taskprio; /**< Task priority */
unsigned int stacksize; /**< Task stack size */
char *taskname; /**< Task name */
void *data; /**< data */
osal_thread_policy policy;
} osal_kthread_init;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| handler | osal_kthread_handler | 线程入口函数 |
| taskprio | unsigned int | 任务优先级 |
| stacksize | unsigned int | 任务栈大小(字节) |
| taskname | char * | 任务名称 |
| data | void * | 传递给线程入口函数的数据 |
| policy | osal_thread_policy | 线程调度策略 |