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
任务管理器句柄。