14#include "../utils/xf_task_queue.h"
15#include "../port/xf_task_port_internal.h"
16#include "../kernel/xf_task_base.h"
18#if XF_TASK_CONTEXT_IS_ENABLE
77 XF_LOGE(
TAG,
"only ctask can use this function");
83 task->base.delay = ticks;
91 XF_ASSERT(manager, NULL,
TAG,
"manager must not be NULL");
98 if (ctask_queue == NULL) {
107 ctask_queue->
manager = manager;
153 if (
task->timeout >= 0) {
158 timeout = -
task->timeout;
203 if (
task->timeout >= 0) {
208 timeout = -
task->timeout;
230 XF_ASSERT(stack_size > 0, NULL,
TAG,
"args must more than 0");
257 int32_t timeout = time_ticks - handle->
base.
wake_up;
330 XF_LOGD(
TAG,
"task must not running and delete");
void xf_ctask_delay_with_manager(xf_task_manager_t manager, uint32_t delay_ms)
ctask 专用 delay 函数,在 ctask 中才能使用。不会影响调度器。
xf_err_t xf_ctask_queue_receive(xf_ctask_queue_t queue, void *buffer, uint32_t timeout)
消息队列接收。
xf_err_t xf_ctask_queue_send(xf_ctask_queue_t queue, void *buffer, uint32_t timeout)
消息队列发送。
#define XF_TASK_TYPE_CTASK
ctask 类型值。 XF_TASK_TYPE_ctask 通过 xf_task_reg.inc 拼接而来。
xf_ctask_queue_t xf_ctask_queue_create_with_manager(xf_task_manager_t manager, const size_t size, const size_t count)
创建 ctask 的消息队列。此消息队列仅供 ctask 使用。
void * xf_ctask_queue_t
ctask 任务队列句柄。
bool xf_task_queue_is_full(const xf_task_queue_t *const queue)
判断队列是否已满。
xf_err_t xf_task_queue_receive(xf_task_queue_t *const queue, void *const buffer)
从队列接收一个元素。
bool xf_task_queue_is_empty(const xf_task_queue_t *const queue)
判断队列是否为空。
xf_err_t xf_task_queue_init(xf_task_queue_t *const queue, void *data, const size_t size, const size_t count)
队列对象初始化。
xf_err_t xf_task_queue_send(xf_task_queue_t *const queue, void *item, const xf_task_queue_mode_t pos)
队列发送数据。
@ XF_TASK_QUEUE_SEND_TO_BACK
#define XF_ASSERT(condition, retval, tag, format,...)
xfusion 断言宏(条件 不成立 时则输出日志后返回)。
#define BITS_SET0(var, bits_mask)
设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 0。
#define BITS_SET1(var, bits_mask)
设置 32 位变量 var 的对应位掩码 bits_mask 为 1 的地方为 1。
#define BITS_CHECK(src, bits_mask)
检查变量 var 在 bits_mask 的位置上是否存在 1。
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
static void xf_list_init(xf_list_t *list)
动态初始化链表.
static void xf_list_add_tail(xf_list_t *new_node, xf_list_t *head)
xf_list_add_tail - 在指定节点之前添加一个 new_node.
static void xf_list_del_init(xf_list_t *entry)
xf_list_del_init - 从链表中删除节点, 并重新初始化.
#define xf_list_for_each_entry_safe(pos, n, head, type, member)
list_for_each_entry_safe - 安全地迭代给定类型的链表,可删除链表节点。
#define xf_bzero(ptr, size)
static xf_osal_queue_t queue
xf_task_context_t context
xf_list_t receive_waiting
xf_task_manager_t manager
task 的父对象,保存了 task 的公共属性。
xf_task_manager_t manager
虚函数表,不在 base 对象实现,由子对象完成实现。
const xf_task_create_t constructor
static void task(xf_task_t task)
static xf_task_time_t xf_ctask_update(xf_task_t task)
void xf_ctask_queue_delete(xf_ctask_queue_t queue)
static void xf_ctask_resume(xf_task_manager_t manager)
static const xf_task_vfunc_t _ctask_vfunc
void xf_ctask_vfunc_register(void)
static void xf_ctask_reset(xf_task_t task)
static void xf_ctask_yield(xf_task_manager_t manager)
static void xf_ctask_exec(xf_task_manager_t manager)
static void xf_task_context_entry(void *args)
static xf_task_t xf_ctask_constructor(xf_task_manager_t manager, xf_task_func_t func, void *func_arg, uint16_t priority, void *config)
struct _xf_ctask_queue_handle_t xf_ctask_queue_handle_t
struct _xf_ctask_handle_t xf_ctask_handle_t
#define XF_LOGE(tag, format,...)
#define XF_LOGD(tag, format,...)
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 设置状态。
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 的虚函数注册。
#define XF_TASK_SIGNAL_EVENT
#define XF_TASK_SIGNAL_TIMEOUT
#define XF_TASK_SIGNAL_READY
XF_TASK_TIME_TYPE xf_task_time_t
xf_task 时间戳类型。
xf_err_t xf_task_trigger(xf_task_t task)
任务触发。无论是否到达唤醒时间,都会触发。
void xf_task_delete(xf_task_t task)
任务删除函数。将任务加入销毁队列,并设置任务为删除态。
void(* xf_task_func_t)(xf_task_t task)
任务调用函数原型。
xf_task_context_t * xf_task_manager_get_context(xf_task_manager_t manager)
xf_task_t xf_task_manager_get_current_task(xf_task_manager_t manager)
获取管理器运行的任务。
void * xf_task_manager_t
任务管理器句柄。
xf_task_time_t xf_task_get_ticks(void)
int32_t xf_task_ticks_to_msec(int32_t ticks)
void xf_task_context_swap(xf_task_manager_t manager, void *old_context, void *new_context)
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)
XF_TASK_CONTEXT_TYPE xf_task_context_t
如果开启上下文, 旧必须设置 XF_TASK_CONTEXT_TYPE 的类型。