XFusion API v1.3.0
载入中...
搜索中...
未找到
ntask

无栈协程。 更多...

ntask 的协作图:

结构体

struct  _xf_ntask_sem_t
 ntask 信号量结构体。 更多...
 

宏定义

#define XF_TASK_TYPE_NTASK   XF_TASK_TYPE_ntask
 ntask 类型值。 XF_TASK_TYPE_ntask 通过 xf_task_reg.inc 拼接而来。
 
#define XF_NTASK_BEGIN(ntask)
 
#define XF_NTASK_END()
 
#define xf_ntask_yield()
 
#define xf_ntask_until(compare_cb)
 
#define xf_ntask_delay(delay_ms)
 
#define xf_ntask_until_timeout(compare_cb, timeout_ms)
 
#define xf_ntask_exit()
 
#define xf_await(func)
 

类型定义

typedef struct _xf_ntask_sem_t xf_ntask_sem_t
 ntask 信号量结构体。
 
typedef int(* xf_ntask_compare_func_t) (xf_task_t task)
 
typedef enum _xf_ntask_status_t xf_ntask_status_t
 
typedef void xf_async_t
 

枚举

enum  _xf_ntask_status_t {
  XF_NTASK_NONE = -1 , XF_NTASK_WAITING , XF_NTASK_YIELDED , XF_NTASK_EXITED ,
  XF_NTASK_ENDED , XF_NTASK_FINSHED
}
 

函数

static xf_task_t xf_ntask_create_with_manager (xf_task_manager_t manager, xf_task_func_t func, void *func_arg, uint16_t priority)
 创建无栈协程
 
void xf_ntask_set_compare (xf_task_t task, xf_ntask_compare_func_t compare)
 设置比较函数,回调函数返回 0,则任务继续进行,单次有效
 
int xf_ntask_args_get_int (xf_task_t *task, const char *name)
 获取保存的整数变量
 
float xf_ntask_args_get_float (xf_task_t *task, const char *name)
 获取保存的浮点变量
 
void * xf_ntask_args_get_array (xf_task_t *task, const char *name)
 获取保存的数组
 
xf_err_t xf_ntask_args_set_int (xf_task_t *task, const char *name, int value)
 保存整数变量
 
xf_err_t xf_ntask_args_set_float (xf_task_t *task, const char *name, float value)
 保存浮点变量
 
xf_err_t xf_ntask_args_set_array (xf_task_t *task, const char *name, void *value, unsigned int size, unsigned int len)
 保存数组
 
uint32_t xf_ntask_get_lc (xf_task_t *task, const char *name)
 获取上下文位置 (给宏调用)
 
xf_err_t xf_ntask_set_lc (xf_task_t *task, const char *name, uint32_t lc)
 设置上下文位置 (给宏调用)
 
xf_ntask_status_t xf_ntask_get_exit_status (xf_task_t *task)
 获取退出状态 (给宏调用)
 
xf_err_t xf_ntask_set_exit_status (xf_task_t *task, xf_ntask_status_t status)
 设置退出状态 (给宏调用)
 
bool xf_ntask_lc_is_first (xf_task_t *task, const char *name)
 获取是否是最外层函数
 

详细描述

无栈协程。

宏定义说明

◆ XF_TASK_TYPE_NTASK

#define XF_TASK_TYPE_NTASK   XF_TASK_TYPE_ntask

ntask 类型值。 XF_TASK_TYPE_ntask 通过 xf_task_reg.inc 拼接而来。

在文件 xf_ntask.h38 行定义.

◆ XF_NTASK_BEGIN

#define XF_NTASK_BEGIN (   ntask)
值:
xf_task_t *_ntask = ntask; \
switch (xf_ntask_get_lc(ntask, __func__)) \
{ \
case 0:
uint32_t xf_ntask_get_lc(xf_task_t *task, const char *name)
获取上下文位置 (给宏调用)
Definition xf_ntask.c:177
static void ntask(xf_task_t task)
Definition xf_main.c:48
void * xf_task_t
任务句柄。
示例
examples/task/ntask/main/xf_main.c, examples/wireless/wifi/get_started/station/main/xf_main.c, examples/wireless/wifi/scan/base_scan/main/xf_main.c, examples/wireless/wifi/scan/scan_and_connect/main/xf_main.c , 以及 examples/wireless/wifi/static_ip/station/main/xf_main.c.

在文件 xf_ntask.h193 行定义.

◆ XF_NTASK_END

#define XF_NTASK_END ( )
值:
} \
xf_ntask_set_lc(_ntask, __func__, 0); \
if(xf_ntask_lc_is_first(_ntask, __func__)) { \
xf_ntask_set_exit_status(_ntask, XF_NTASK_FINSHED); \
} else { \
xf_ntask_set_exit_status(_ntask, XF_NTASK_ENDED); \
}\
return
bool xf_ntask_lc_is_first(xf_task_t *task, const char *name)
获取是否是最外层函数
Definition xf_ntask.c:202
@ XF_NTASK_ENDED
Definition xf_ntask.h:56
@ XF_NTASK_FINSHED
Definition xf_ntask.h:57
示例
examples/task/ntask/main/xf_main.c, examples/wireless/wifi/get_started/station/main/xf_main.c, examples/wireless/wifi/scan/base_scan/main/xf_main.c, examples/wireless/wifi/scan/scan_and_connect/main/xf_main.c , 以及 examples/wireless/wifi/static_ip/station/main/xf_main.c.

在文件 xf_ntask.h199 行定义.

◆ xf_ntask_yield

#define xf_ntask_yield ( )
值:
do \
{ \
xf_task_trigger(_ntask); \
xf_ntask_set_lc(_ntask, __func__, __LINE__); \
xf_ntask_set_exit_status(_ntask, XF_NTASK_YIELDED); \
return; \
case __LINE__:; \
} while (0)
@ XF_NTASK_YIELDED
Definition xf_ntask.h:54

在文件 xf_ntask.h209 行定义.

◆ xf_ntask_until

#define xf_ntask_until (   compare_cb)
值:
do \
{ \
xf_ntask_set_compare(_ntask, compare_cb); \
xf_ntask_set_lc(_ntask, __func__, __LINE__); \
xf_ntask_set_exit_status(_ntask, XF_NTASK_WAITING); \
return; \
case __LINE__:; \
} while (0)
@ XF_NTASK_WAITING
Definition xf_ntask.h:53

在文件 xf_ntask.h219 行定义.

◆ xf_ntask_delay

#define xf_ntask_delay (   delay_ms)
值:
do \
{ \
xf_task_set_delay(_ntask, delay_ms); \
xf_ntask_set_lc(_ntask, __func__, __LINE__); \
xf_ntask_set_exit_status(_ntask, XF_NTASK_WAITING); \
return; \
case __LINE__:; \
} while (0)
示例
examples/task/ntask/main/xf_main.c, examples/wireless/wifi/get_started/station/main/xf_main.c, examples/wireless/wifi/scan/base_scan/main/xf_main.c, examples/wireless/wifi/scan/scan_and_connect/main/xf_main.c , 以及 examples/wireless/wifi/static_ip/station/main/xf_main.c.

在文件 xf_ntask.h229 行定义.

◆ xf_ntask_until_timeout

#define xf_ntask_until_timeout (   compare_cb,
  timeout_ms 
)
值:
do \
{ \
xf_task_set_delay(_ntask, timeout_ms); \
xf_ntask_set_compare(_ntask, compare_cb); \
xf_ntask_set_lc(_ntask, __func__, __LINE__); \
xf_ntask_set_exit_status(_ntask, XF_NTASK_WAITING); \
return; \
case __LINE__:; \
} while (0)

在文件 xf_ntask.h239 行定义.

◆ xf_ntask_exit

#define xf_ntask_exit ( )
值:
do \
{ \
xf_ntask_set_lc(_ntask, __func__, 0); \
if(xf_ntask_lc_is_first(_ntask, __func__)) { \
xf_ntask_set_exit_status(_ntask, XF_NTASK_FINSHED); \
} else { \
xf_ntask_set_exit_status(_ntask, XF_NTASK_ENDED); \
} \
return; \
} while (0)

在文件 xf_ntask.h250 行定义.

◆ xf_await

#define xf_await (   func)
值:
case __LINE__: \
func;\
int _async_status = xf_ntask_get_exit_status(_ntask);\
if (_async_status == XF_NTASK_YIELDED || _async_status == XF_NTASK_WAITING) \
{\
xf_ntask_set_lc(_ntask, __func__, __LINE__); \
return; \
}\
else\
{\
xf_ntask_set_exit_status(_ntask, XF_NTASK_NONE);\
}
xf_ntask_status_t xf_ntask_get_exit_status(xf_task_t *task)
获取退出状态 (给宏调用)
Definition xf_ntask.c:214
@ XF_NTASK_NONE
Definition xf_ntask.h:52
示例
examples/task/ntask/main/xf_main.c.

在文件 xf_ntask.h264 行定义.

类型定义说明

◆ xf_ntask_sem_t

ntask 信号量结构体。

◆ xf_ntask_compare_func_t

typedef int(* xf_ntask_compare_func_t) (xf_task_t task)

在文件 xf_ntask.h49 行定义.

◆ xf_ntask_status_t

◆ xf_async_t

typedef void xf_async_t

在文件 xf_ntask.h262 行定义.

枚举类型说明

◆ _xf_ntask_status_t

枚举值
XF_NTASK_NONE 
XF_NTASK_WAITING 
XF_NTASK_YIELDED 
XF_NTASK_EXITED 
XF_NTASK_ENDED 
XF_NTASK_FINSHED 

在文件 xf_ntask.h51 行定义.

函数说明

◆ xf_ntask_create_with_manager()

static xf_task_t xf_ntask_create_with_manager ( xf_task_manager_t  manager,
xf_task_func_t  func,
void *  func_arg,
uint16_t  priority 
)
inlinestatic

创建无栈协程

参数
manager任务调度器
func任务执行函数
func_arg任务参数
priority任务优先级
返回
xf_task_t 任务对象,NULL 表示创建失败

在文件 xf_ntask.h72 行定义.

◆ xf_ntask_set_compare()

void xf_ntask_set_compare ( xf_task_t  task,
xf_ntask_compare_func_t  compare 
)

设置比较函数,回调函数返回 0,则任务继续进行,单次有效

参数
task任务对象
compare比较回调函数

在文件 xf_ntask.c80 行定义.

◆ xf_ntask_args_get_int()

int xf_ntask_args_get_int ( xf_task_t task,
const char *  name 
)

获取保存的整数变量

参数
task任务对象
name整数变量名称
返回
int 获取到的整数变量

在文件 xf_ntask.c87 行定义.

◆ xf_ntask_args_get_float()

float xf_ntask_args_get_float ( xf_task_t task,
const char *  name 
)

获取保存的浮点变量

参数
task任务对象
name浮点变量名称
返回
float 获取到的浮点变量

在文件 xf_ntask.c96 行定义.

◆ xf_ntask_args_get_array()

void * xf_ntask_args_get_array ( xf_task_t task,
const char *  name 
)

获取保存的数组

参数
task任务对象
name数组名称
返回
void* 数组地址

在文件 xf_ntask.c105 行定义.

◆ xf_ntask_args_set_int()

xf_err_t xf_ntask_args_set_int ( xf_task_t task,
const char *  name,
int  value 
)

保存整数变量

参数
task任务对象
name变量名称
value整数变量值
返回
xf_err_t 返回错误码

在文件 xf_ntask.c114 行定义.

◆ xf_ntask_args_set_float()

xf_err_t xf_ntask_args_set_float ( xf_task_t task,
const char *  name,
float  value 
)

保存浮点变量

参数
task任务对象
name变量名称
value浮点变量值
返回
xf_err_t 返回错误码

在文件 xf_ntask.c135 行定义.

◆ xf_ntask_args_set_array()

xf_err_t xf_ntask_args_set_array ( xf_task_t task,
const char *  name,
void *  value,
unsigned int  size,
unsigned int  len 
)

保存数组

参数
task任务对象
name数组变量名称
value数组变量值
size数组元素大小
len数组元素个数
返回
xf_err_t 返回错误码

在文件 xf_ntask.c156 行定义.

◆ xf_ntask_get_lc()

uint32_t xf_ntask_get_lc ( xf_task_t task,
const char *  name 
)

获取上下文位置 (给宏调用)

参数
task任务对象
name函数上下文名称
返回
uint32_t 上下文位置

在文件 xf_ntask.c177 行定义.

◆ xf_ntask_set_lc()

xf_err_t xf_ntask_set_lc ( xf_task_t task,
const char *  name,
uint32_t  lc 
)

设置上下文位置 (给宏调用)

参数
task任务对象
name函数上下文名称
lc上下文位置
返回
xf_err_t 上下文位置

在文件 xf_ntask.c190 行定义.

◆ xf_ntask_get_exit_status()

xf_ntask_status_t xf_ntask_get_exit_status ( xf_task_t task)

获取退出状态 (给宏调用)

参数
task任务对象
返回
xf_ntask_status_t 任务退出状态

在文件 xf_ntask.c214 行定义.

◆ xf_ntask_set_exit_status()

xf_err_t xf_ntask_set_exit_status ( xf_task_t task,
xf_ntask_status_t  status 
)

设置退出状态 (给宏调用)

参数
task任务对象
status任务退出状态
返回
xf_err_t 是否设置成功

在文件 xf_ntask.c221 行定义.

◆ xf_ntask_lc_is_first()

bool xf_ntask_lc_is_first ( xf_task_t task,
const char *  name 
)

获取是否是最外层函数

参数
task任务对象
name任务上下文名称
返回
true 是最外层函数
false 不是最外层函数

在文件 xf_ntask.c202 行定义.