XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_task_port.c
浏览该文件的文档.
1
12/* ==================== [Includes] ========================================== */
13
14#include "xf_task_port.h"
15
16/* ==================== [Defines] =========================================== */
17
18#define TAG "xf_port"
19
20/* ==================== [Typedefs] ========================================== */
21
22/* ==================== [Static Prototypes] ================================= */
23
24static void xf_task_reg_init(void);
25
26/* ==================== [Static Variables] ================================== */
27
29
30#if XF_TASK_CONTEXT_IS_ENABLE
33#endif
34
35/* ==================== [Macros] ============================================ */
36
37/* ==================== [Global Functions] ================================== */
39{
40 XF_ASSERT(clock, XF_ERR_INVALID_ARG, TAG, "clock function must not be NULL");
41
42 s_clock = clock;
43
45
46 return XF_OK;
47
48}
49
51{
52 return s_clock();
53}
54
55#if XF_TASK_CONTEXT_IS_ENABLE
57{
58 XF_ASSERT(create_context, XF_ERR_INVALID_ARG, TAG, "create_context function must not be NULL");
59 XF_ASSERT(swap_context, XF_ERR_INVALID_ARG, TAG, "swap_context function must not be NULL");
60
61 s_create_context = create_context;
62 s_swap_context = swap_context;
63
64 return XF_OK;
65}
66
67void xf_task_context_create(xf_task_manager_t manager, xf_context_func_t context_entry, void *context, void *stack,
68 size_t stack_size)
69{
70 s_create_context(manager, context_entry, context, stack, stack_size);
71}
72
73void xf_task_context_swap(xf_task_manager_t manager, void *old_context, void *new_context)
74{
75 s_swap_context(manager, old_context, new_context);
76}
77
78#endif // XF_TASK_CONTEXT_IS_ENABLE
79
80int32_t xf_task_msec_to_ticks(int32_t msec)
81{
82 return (msec * XF_TASK_TICKS_FREQUENCY / 1000);
83}
84
85int32_t xf_task_ticks_to_msec(int32_t ticks)
86{
87 return (ticks * 1000 / XF_TASK_TICKS_FREQUENCY);
88}
89
90/* ==================== [Static Functions] ================================== */
91
92#define XF_TASK_REG_EXTERN
93#include "../task/xf_task_reg.inc"
94
95static void xf_task_reg_init(void)
96{
97#define XF_TASK_REG_FUNCTION
98#include "../task/xf_task_reg.inc"
99}
#define XF_ASSERT(condition, retval, tag, format,...)
xfusion 断言宏(条件 不成立 时则输出日志后返回)。
Definition xf_check.h:150
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
@ XF_ERR_INVALID_ARG
Definition xf_err.h:46
@ XF_OK
Definition xf_err.h:43
XF_TASK_TIME_TYPE xf_task_time_t
xf_task 时间戳类型。
void * xf_task_manager_t
任务管理器句柄。
static xf_task_clock_t s_clock
xf_task_time_t xf_task_get_ticks(void)
int32_t xf_task_ticks_to_msec(int32_t ticks)
static void xf_task_reg_init(void)
void xf_task_context_swap(xf_task_manager_t manager, void *old_context, void *new_context)
static xf_task_create_context_t s_create_context
static xf_task_swap_context_t s_swap_context
xf_err_t xf_task_context_init(xf_task_create_context_t create_context, xf_task_swap_context_t swap_context)
对接保存任务上下文函数。
xf_err_t xf_task_tick_init(xf_task_clock_t clock)
设置当前任务的心跳。
int32_t xf_task_msec_to_ticks(int32_t msec)
void xf_task_context_create(xf_task_manager_t manager, xf_context_func_t context_entry, void *context, void *stack, size_t stack_size)
#define TAG
xf_task 对接总头文件。
void(* xf_task_create_context_t)(xf_task_manager_t manager, xf_context_func_t context_entry, void *context, void *stack, size_t stack_size)
创建上下文的函数指针。
void(* xf_context_func_t)(void *arg)
上下文切换函数原型。
xf_task_time_t(* xf_task_clock_t)(void)
task 时钟对接,为调度器提供心跳。
void(* xf_task_swap_context_t)(xf_task_manager_t manager, void *old_context, void *new_context)
切换上席文的函数指针。
#define XF_TASK_TICKS_FREQUENCY