任务管理

宏定义

#define AOS_TASK_NONE   0x0u
 
#define AOS_TASK_AUTORUN   0x01u
 

类型定义

typedef aos_hdl_t aos_task_t
 
typedef uint32_t aos_task_key_t
 

函数

aos_status_t aos_task_create (aos_task_t *task, const char *name, void(*fn)(void *), void *arg, void *stack_buf, size_t stack_size, int32_t prio, uint32_t options)
 
aos_status_t aos_task_suspend (aos_task_t *task)
 
aos_status_t aos_task_resume (aos_task_t *task)
 
void aos_task_exit (int32_t code)
 
aos_status_t aos_task_delete (aos_task_t *task)
 
aos_status_t aos_task_yield (void)
 
aos_status_t aos_task_name_get (aos_task_t *task, char *buf, size_t buf_size)
 
aos_task_t aos_task_self (void)
 
aos_status_t aos_task_key_create (aos_task_key_t *key)
 
void aos_task_key_delete (aos_task_key_t key)
 
aos_status_t aos_task_setspecific (aos_task_key_t key, void *vp)
 
void * aos_task_getspecific (aos_task_key_t key)
 
aos_status_t aos_task_new (const char *name, void(*fn)(void *), void *arg, size_t stack_size)
 
aos_status_t aos_task_new_ext (aos_task_t *task, const char *name, void(*fn)(void *), void *arg, size_t stack_size, int32_t prio)
 

详细描述

提供AliOS Things系统内核任务管理功能的基础API.

宏定义说明

◆ AOS_TASK_AUTORUN

#define AOS_TASK_AUTORUN   0x01u

表示任务创建后即可被调度执行,当调用aos_task_create()创建任务时,用来指定option参数

在文件 kernel.h66 行定义.

◆ AOS_TASK_NONE

#define AOS_TASK_NONE   0x0u

表示不指定任意选项,当调用aos_task_create()创建任务时,用来指定option参数

在文件 kernel.h65 行定义.

类型定义说明

◆ aos_task_key_t

typedef uint32_t aos_task_key_t

AOS任务私有数据对象句柄类型

在文件 kernel.h175 行定义.

◆ aos_task_t

AOS任务对象句柄类型

在文件 kernel.h98 行定义.

函数说明

◆ aos_task_create()

aos_status_t aos_task_create ( aos_task_t task,
const char *  name,
void(*)(void *)  fn,
void *  arg,
void *  stack_buf,
size_t  stack_size,
int32_t  prio,
uint32_t  options 
)

创建任务,该接口为创建任务分配TCB(任务控制块)并且根据指定的执行体、任务名称、栈大小来初始化对应成员. 该接口任务栈是由内核分配的。

使用约束
该接口不能在中断上下文中调用
错误处理
如果任务执行体入口函数为NULL,或任务名为NULL,或任务句柄为NULL,则返回错误码-EINVAL
如果栈大小为零,则返回错误
如果任务优先级超过配置上限或等于IDLE任务优先级,则返回错误码-EINVAL
参数
[in]task任务对象句柄.
[in]name任务名称.若任务名称为空,则使用默认任务名“default_name”。
[in]fn任务执行体入口函数。
[in]arg任务执行体入口函数的参数。
[in]stack_buf栈空间地址,如果地址为空则内核根据stack_size为任务分配栈空间.
[in]stack_size栈大小(字节为单位)。
[in]prio任务优先级,最大指由配置参数RHINO_CONFIG_USER_PRI_MAX(默认为60)决定.
[in]options任务创建选项,当前支持选项:
AOS_TASK_AUTORUN 任务创建后自动加入就绪队列,可被调度器调度执行.
返回
状态码
返回值
0创建任务成功
-EINVAL输入非法参数导致失败
-ENOMEM内存不足导致失败
-1其他原因导致的失败

◆ aos_task_delete()

aos_status_t aos_task_delete ( aos_task_t task)

删除任务,该接口删除一个任务并回收任务资源,不允许删除IDLE任务。

使用约束
该接口不能在中断上下文中调用
错误处理
如果任务句柄为NULL,则返回错误码-EINVAL
如果删除的任务为IDLE,则返回错误码-EPERM
参数
[in]task任务对象句柄.
返回
状态码
返回值
0恢复任务成功
-EINVAL输入非法参数导致失败
-EPERM尝试删除IDLE任务导致失败
-1其他原因导致的失败

◆ aos_task_exit()

void aos_task_exit ( int32_t  code)

任务退出,该接口功能是任务删除自身,且IDLE任务不允许删除。

使用约束
该接口不能在中断上下文中调用
错误处理
如果挂起任务为IDLE,则直接返回
参数
[in]code未使用.
返回

◆ aos_task_getspecific()

void* aos_task_getspecific ( aos_task_key_t  key)

Get the value currently bound to the specified key.

参数
[in]keykey object.
返回
NULL: get fail, otherwise: get succeed.

◆ aos_task_key_create()

aos_status_t aos_task_key_create ( aos_task_key_t key)

Create a task key.

参数
[out]keypointer of key object.
返回
0: success, -EINVAL: error.

◆ aos_task_key_delete()

void aos_task_key_delete ( aos_task_key_t  key)

Delete a task key.

参数
[in]keykey object.
返回
none.

◆ aos_task_name_get()

aos_status_t aos_task_name_get ( aos_task_t task,
char *  buf,
size_t  buf_size 
)

获取任务名称,该接口将指定任务的任务名称拷贝到用户缓冲区。

使用约束
该接口不能在中断上下文中调用
错误处理
如果任务句柄为NULL,则返回错误码-EINVAL
如果用户缓冲区地址参数为NULL,则返回错误码-EINVAL
如果用户缓冲区大小为0,则返回错误码-EINVAL
参数
[in]task任务对象句柄
[out]buf输出任务名的用户缓冲区地址
[in]buf_size输出任务名的用户缓冲区大小
返回
状态码
返回值
0恢复任务成功
-EINVAL输入非法参数导致失败
-1其他原因导致的失败

◆ aos_task_new()

aos_status_t aos_task_new ( const char *  name,
void(*)(void *)  fn,
void *  arg,
size_t  stack_size 
)

Create a task. Deprecated, not Recommended.

参数
[in]nametask name.
[in]fnfunction to run.
[in]argargument of the function.
[in]stacksizestack-size in bytes.
返回
0: success, otherwise: fail.

◆ aos_task_new_ext()

aos_status_t aos_task_new_ext ( aos_task_t task,
const char *  name,
void(*)(void *)  fn,
void *  arg,
size_t  stack_size,
int32_t  prio 
)

Create a task. Deprecated, not Recommended.

参数
[in]taskhandle.
[in]nametask name.
[in]fntask function.
[in]argargument of the function..
[in]stack_sizestack-size in bytes.
[in]priopriority value, the max is RHINO_CONFIG_USER_PRI_MAX(default 60).
返回
0: success.

◆ aos_task_resume()

aos_status_t aos_task_resume ( aos_task_t task)

恢复任务,该接口将挂起任务恢复,取消暂时不执行状态。

使用约束
该接口不能在中断上下文中调用
错误处理
如果任务句柄为NULL,则返回错误码-EINVAL
参数
[in]task任务对象句柄.
返回
状态码
返回值
0恢复任务成功
-EINVAL输入非法参数导致失败
-1其他原因导致的失败

◆ aos_task_self()

aos_task_t aos_task_self ( void  )

获取当前任务的任务对象句柄。

使用约束
无。
错误处理
无。
参数
[in]无。
返回
任务对象句柄

◆ aos_task_setspecific()

aos_status_t aos_task_setspecific ( aos_task_key_t  key,
void *  vp 
)

Associate a task-specific value with a key.

参数
[in]keykey object.
[in]vppointer of a task-specific value.
返回
the check status, 0: OK, -1: indicates key invalid.

◆ aos_task_suspend()

aos_status_t aos_task_suspend ( aos_task_t task)

挂起任务,该接口将已创建的任务挂起,暂时不执行,挂起的对象既可以是任务自身也可以是其他任务,
但不允许挂起IDLE任务。

使用约束
该接口不能在中断上下文中调用
错误处理
如果任务句柄为NULL,则返回错误码-EINVAL
如果挂起任务为IDLE,则返回错误码-EPERM
参数
[in]task任务对象句柄.
返回
状态码
返回值
0挂起任务成功
-EINVAL输入非法参数导致失败
-EPERM尝试挂起IDLE任务导致失败
-1其他原因导致的失败

◆ aos_task_yield()

aos_status_t aos_task_yield ( void  )

当前任务让出CPU资源,该接口将当前任务唤出,放入就绪队列对尾,暂时放弃CPU的使用权。

使用约束
该接口不能在中断上下文中调用
错误处理
如果任务句柄为NULL,则返回错误码-EINVAL
参数
[in]无.
返回
状态码
返回值
0恢复任务成功
-EINVAL输入非法参数导致失败
-1其他原因导致的失败