17#include "../kernel/xf_task_kernel.h" 
   38#define XF_TASK_TYPE_NTASK XF_TASK_TYPE_ntask 
  193#define XF_NTASK_BEGIN(ntask)       \ 
  194    xf_task_t *_ntask = ntask;      \ 
  195    switch (xf_ntask_get_lc(ntask, __func__)) \ 
 
  199#define XF_NTASK_END()    \ 
  201    xf_ntask_set_lc(_ntask, __func__, 0); \ 
  202    if(xf_ntask_lc_is_first(_ntask, __func__)) { \ 
  203        xf_ntask_set_exit_status(_ntask, XF_NTASK_FINSHED); \ 
  205        xf_ntask_set_exit_status(_ntask, XF_NTASK_ENDED); \ 
 
  209#define xf_ntask_yield()               \ 
  212        xf_task_trigger(_ntask);             \ 
  213        xf_ntask_set_lc(_ntask, __func__, __LINE__);   \ 
  214        xf_ntask_set_exit_status(_ntask, XF_NTASK_YIELDED); \ 
 
  219#define xf_ntask_until(compare_cb)             \ 
  222        xf_ntask_set_compare(_ntask, compare_cb);      \ 
  223        xf_ntask_set_lc(_ntask, __func__, __LINE__);   \ 
  224        xf_ntask_set_exit_status(_ntask, XF_NTASK_WAITING); \ 
 
  229#define xf_ntask_delay(delay_ms)     \ 
  232        xf_task_set_delay(_ntask, delay_ms); \ 
  233        xf_ntask_set_lc(_ntask, __func__, __LINE__);   \ 
  234        xf_ntask_set_exit_status(_ntask, XF_NTASK_WAITING); \ 
 
  239#define xf_ntask_until_timeout(compare_cb, timeout_ms) \ 
  242        xf_task_set_delay(_ntask, timeout_ms); \ 
  243        xf_ntask_set_compare(_ntask, compare_cb);      \ 
  244        xf_ntask_set_lc(_ntask, __func__, __LINE__);   \ 
  245        xf_ntask_set_exit_status(_ntask, XF_NTASK_WAITING); \ 
 
  250#define xf_ntask_exit()                \ 
  253        xf_ntask_set_lc(_ntask, __func__, 0);                \ 
  254        if(xf_ntask_lc_is_first(_ntask, __func__)) {         \ 
  255            xf_ntask_set_exit_status(_ntask, XF_NTASK_FINSHED);   \ 
  257            xf_ntask_set_exit_status(_ntask, XF_NTASK_ENDED);     \ 
 
  264#define xf_await(func)                      \ 
  267    int _async_status = xf_ntask_get_exit_status(_ntask);\ 
  268    if (_async_status == XF_NTASK_YIELDED || _async_status == XF_NTASK_WAITING) \ 
  270        xf_ntask_set_lc(_ntask, __func__, __LINE__);   \ 
  275        xf_ntask_set_exit_status(_ntask, XF_NTASK_NONE);\ 
 
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)
创建无栈协程
 
uint32_t xf_ntask_get_lc(xf_task_t *task, const char *name)
获取上下文位置 (给宏调用)
 
struct _xf_ntask_sem_t xf_ntask_sem_t
ntask 信号量结构体。
 
enum _xf_ntask_status_t xf_ntask_status_t
 
xf_err_t xf_ntask_args_set_float(xf_task_t *task, const char *name, float value)
保存浮点变量
 
void xf_ntask_set_compare(xf_task_t task, xf_ntask_compare_func_t compare)
设置比较函数,回调函数返回 0,则任务继续进行,单次有效
 
xf_err_t xf_ntask_args_set_array(xf_task_t *task, const char *name, void *value, unsigned int size, unsigned int len)
保存数组
 
xf_ntask_status_t xf_ntask_get_exit_status(xf_task_t *task)
获取退出状态 (给宏调用)
 
int(* xf_ntask_compare_func_t)(xf_task_t task)
 
xf_err_t xf_ntask_set_lc(xf_task_t *task, const char *name, uint32_t lc)
设置上下文位置 (给宏调用)
 
xf_err_t xf_ntask_args_set_int(xf_task_t *task, const char *name, int value)
保存整数变量
 
bool xf_ntask_lc_is_first(xf_task_t *task, const char *name)
获取是否是最外层函数
 
void * xf_ntask_args_get_array(xf_task_t *task, const char *name)
获取保存的数组
 
#define XF_TASK_TYPE_NTASK
ntask 类型值。 XF_TASK_TYPE_ntask 通过 xf_task_reg.inc 拼接而来。
 
xf_err_t xf_ntask_set_exit_status(xf_task_t *task, xf_ntask_status_t status)
设置退出状态 (给宏调用)
 
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)
获取保存的浮点变量
 
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
 
static void task(xf_task_t task)
 
xf_task_t xf_task_create_with_manager(xf_task_manager_t manager, xf_task_type_t type, xf_task_func_t func, void *func_arg, uint16_t priority, void *config)
在指定任务管理器下创建任务。
 
void(* xf_task_func_t)(xf_task_t task)
任务调用函数原型。
 
void * xf_task_manager_t
任务管理器句柄。