XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_task_base.c
浏览该文件的文档.
1
12/* ==================== [Includes] ========================================== */
13
14#include "xf_task_base.h"
15#include "xf_task.h"
16#include "xf_task_manager.h"
17
18/* ==================== [Defines] =========================================== */
19
20#define TAG "task_base"
21
22/* ==================== [Typedefs] ========================================== */
23
24/* ==================== [Static Prototypes] ================================= */
25
26/* ==================== [Static Variables] ================================== */
27
29
30/* ==================== [Macros] ============================================ */
31
32/* ==================== [Global Functions] ================================== */
33
35{
36 XF_ASSERT(type < _XF_TASK_TYPE_MAX, XF_ERR_INVALID_ARG, TAG, "type must less than %d", _XF_TASK_TYPE_MAX);
37 XF_ASSERT(!_xf_task_vfunc_group[type], XF_ERR_INITED, TAG, "vfunc initialized");
38
39 _xf_task_vfunc_group[type] = vfunc;
40
41 return XF_OK;
42}
43
45{
46 XF_ASSERT(type < _XF_TASK_TYPE_MAX, XF_ERR_INVALID_ARG, TAG, "type must less than %d", _XF_TASK_TYPE_MAX);
47
48 _xf_task_vfunc_group[type] = NULL;
49
50 return XF_OK;
51}
52
54{
55 XF_ASSERT(type < _XF_TASK_TYPE_MAX, NULL, TAG, "type must less than %d", _XF_TASK_TYPE_MAX);
56 XF_ASSERT(_xf_task_vfunc_group[type], NULL, TAG, "vfunc uninitialized");
57
58 return _xf_task_vfunc_group[type];
59}
60
62 uint16_t priority, xf_task_func_t func, void *arg)
63{
64 task_base->manager = manager;
65 task_base->func = func;
66 task_base->arg = arg;
67 task_base->priority = priority;
68 task_base->type = type;
69 task_base->signal = 0;
70 task_base->flag = 0;
71 task_base->delay = 0;
72 task_base->wake_up = 0;
73 task_base->suspend_time = 0;
74 task_base->timeout = 0;
75 task_base->state = XF_TASK_STATE_BLOCKED;
76 task_base->vfunc = _xf_task_vfunc_group[type];
77 task_base->delete = xf_task_destructor;
78 xf_list_init(&task_base->node);
79 xf_task_manager_task_blocked(manager, task_base);
80#if XF_TASK_HUNGER_IS_ENABLE
81 xf_list_init(&task_base->hunger_node);
82 task_base->hunger_time = 0;
83#endif // XF_TASK_HUNGER_IS_ENABLE
84#if XF_TASK_USER_DATA_IS_ENABLE
85 task_base->user_data = NULL;
86#endif
87}
88
90{
91 task_base->state = XF_TASK_STATE_BLOCKED;
92 task_base->flag = 0;
93 task_base->signal = 0;
94 task_base->wake_up = 0;
95 task_base->suspend_time = 0;
96 task_base->timeout = 0;
97 xf_list_del_init(&task_base->node);
98 xf_task_manager_task_blocked(task_base->manager, task_base);
99#if XF_TASK_HUNGER_IS_ENABLE
100 xf_list_del_init(&task_base->hunger_node);
101 task_base->hunger_time = 0;
102#endif // XF_TASK_HUNGER_IS_ENABLE
103}
104
106{
107
109
110 if (state == XF_TASK_STATE_DELETE) {
112 return XF_OK;
113 }
114
115 if (base->state == XF_TASK_STATE_DELETE) {
116 XF_LOGD(TAG, "task will be delete");
118 }
119
120 if (base->state == XF_TASK_STATE_SUSPEND) {
123
124 } else {
125 XF_LOGD(TAG, "task was suspend");
127 }
128 }
129
130 base->state = state;
131
132 return XF_OK;
133}
134
136{
137 xf_free(task);
138 XF_LOGD(TAG, "task was delete");
139}
140
141/* ==================== [Static Functions] ================================== */
142
143
#define XF_ASSERT(condition, retval, tag, format,...)
xfusion 断言宏(条件 不成立 时则输出日志后返回)。
Definition xf_check.h:150
#define BITS_SET0(var, bits_mask)
设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 0。
#define BITS_CHECK(src, bits_mask)
检查变量 var 在 bits_mask 的位置上是否存在 1。
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
@ XF_ERR_INVALID_ARG
Definition xf_err.h:46
@ XF_ERR_NOT_SUPPORTED
Definition xf_err.h:51
@ XF_ERR_INITED
Definition xf_err.h:55
@ XF_OK
Definition xf_err.h:43
static void xf_list_init(xf_list_t *list)
动态初始化链表.
Definition xf_list.h:97
static void xf_list_del_init(xf_list_t *entry)
xf_list_del_init - 从链表中删除节点, 并重新初始化.
Definition xf_list.h:266
#define xf_free(x)
Definition xf_stdlib.h:39
task 的父对象,保存了 task 的公共属性。
xf_task_time_t wake_up
xf_task_manager_t manager
uint32_t hunger_time
xf_task_time_t suspend_time
const xf_task_vfunc_t * vfunc
xf_task_delete_t delete
xf_list_t hunger_node
xf_task_func_t func
虚函数表,不在 base 对象实现,由子对象完成实现。
static void task(xf_task_t task)
Definition xf_main.c:45
#define XF_LOGD(tag, format,...)
xf_err_t xf_task_vfunc_unregister(xf_task_type_t type)
task 注销虚函数注册(一般用不到的函数)。
void xf_task_base_init(xf_task_base_t *task_base, xf_task_manager_t manager, xf_task_type_t type, uint16_t priority, xf_task_func_t func, void *arg)
task 初始化。
xf_err_t xf_task_base_set_state(xf_task_t task, xf_task_state_t state)
task 设置状态。
const xf_task_vfunc_t * xf_task_get_vfunc(xf_task_type_t type)
task 获取虚函数。
void xf_task_base_reset(xf_task_base_t *task_base)
重置 task base 部分内容
xf_err_t xf_task_vfunc_register(xf_task_type_t type, const xf_task_vfunc_t *vfunc)
task 的虚函数注册。
static const xf_task_vfunc_t * _xf_task_vfunc_group[_XF_TASK_TYPE_MAX]
void xf_task_destructor(xf_task_t task)
任务销毁。回收任务资源
#define TAG
本头文件外界无法调用,manager 基于 base 进行调度。 开放部分在 xf_task_kernel.h .
#define XF_TASK_SIGNAL_RESUME
void(* xf_task_func_t)(xf_task_t task)
任务调用函数原型。
@ XF_TASK_STATE_SUSPEND
@ XF_TASK_STATE_DELETE
@ XF_TASK_STATE_BLOCKED
enum _xf_task_type_t xf_task_type_t
任务类型,通过注册表 xf_task_reg.inc 生成相关的内容。
enum _xf_task_state_t xf_task_state_t
任务状态枚举。
@ _XF_TASK_TYPE_MAX
xf_err_t xf_task_manager_task_blocked(xf_task_manager_t manager, xf_task_t task)
设置当前任务为阻塞。
任务管理器。
void * xf_task_manager_t
任务管理器句柄。
void * xf_task_t
任务句柄。