15#include "../port/xf_task_port_internal.h"
34#if XF_TASK_HUNGER_IS_ENABLE
37#if XF_TASK_CONTEXT_IS_ENABLE
68#if XF_TASK_HUNGER_IS_ENABLE
81 manager_handle->
on_idle = on_idle;
96 volatile uint32_t index = 0;
98 volatile int32_t max_idle_ms = INT32_MAX;
100 volatile uint32_t idle_time_ticks = 0;
101 volatile bool is_get_func =
false;
115#if XF_TASK_HUNGER_IS_ENABLE
127 max_idle_ms = -
task->timeout;
128 idle_time_ticks = time_ticks;
146 if (
false == is_get_func) {
155 if (
false == is_get_func) {
164 max_idle_ms = max_idle_ms < 0 ? 0 : max_idle_ms;
166 if (manager_handle->
on_idle != NULL) {
167 manager_handle->
on_idle(max_idle_ms);
170#if XF_TASK_HUNGER_IS_ENABLE
178 uint32_t level =
task->timeout /
task->hunger_time;
181 int priority = (int)
task->priority - (
int)level;
197 XF_ASSERT(manager, NULL,
TAG,
"manager must not be NULL!");
268#if XF_TASK_CONTEXT_IS_ENABLE
273 return &manager_handle->
context;
284 if (manager_handle->
urgent_task != NULL && !force) {
300#if XF_TASK_HUNGER_IS_ENABLE
309 task->vfunc->exec(manager);
#define XF_ASSERT(condition, retval, tag, format,...)
xfusion 断言宏(条件 不成立 时则输出日志后返回)。
#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.
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 - 从链表中删除节点, 并重新初始化.
static int xf_list_empty(const xf_list_t *head)
xf_list_empty - 测试链表是否为空.
#define xf_list_first_entry(ptr, type, member)
xf_list_first_entry - 获取链表中的第一个元素.
#define xf_list_for_each_entry_safe(pos, n, head, type, member)
list_for_each_entry_safe - 安全地迭代给定类型的链表,可删除链表节点。
static void xf_list_add(xf_list_t *new_node, xf_list_t *head)
xf_list_add - 在指定节点之后添加一个 new_node.
task 的父对象,保存了 task 的公共属性。
const xf_task_vfunc_t * vfunc
xf_task_on_idle_t on_idle
xf_task_context_t context
xf_list_t ready_list[XF_TASK_PRIORITY_LEVELS]
const xf_task_update_t update
static void task(xf_task_t task)
xf_err_t xf_task_base_set_state(xf_task_t task, xf_task_state_t state)
task 设置状态。
本头文件外界无法调用,manager 基于 base 进行调度。 开放部分在 xf_task_kernel.h .
#define XF_TASK_SIGNAL_READY
#define XF_TASK_FALG_FEEL_HUNGERY
外部设置的标志位,内部只会读取不会设置.
XF_TASK_TIME_TYPE xf_task_time_t
xf_task 时间戳类型。
xf_task 内核配置(仅 xf_task kernel 内部使用)。
#define XF_TASK_PRIORITY_LEVELS
配置任务最高优先级,1 ~ 1024 之间。
xf_task_context_t * xf_task_manager_get_context(xf_task_manager_t manager)
struct _xf_task_manager_handle_t xf_task_manager_handle_t
xf_err_t xf_task_manager_set_idle(xf_task_manager_t manager, xf_task_on_idle_t on_idle)
设置 manager 的空闲回调函数
static void xf_task_update_timeout(xf_task_base_t *task)
void xf_task_manager_delete(xf_task_manager_t manager)
xf_err_t xf_task_manager_task_blocked(xf_task_manager_t manager, xf_task_t task)
设置当前任务为阻塞。
xf_err_t xf_task_manager_task_suspend(xf_task_manager_t manager, xf_task_t task)
设置当前任务为挂起。
void xf_task_manager_run(xf_task_manager_t manager)
开始启动任务管理器调度任务。
xf_err_t xf_task_set_urgent_task_with_manager(xf_task_manager_t manager, xf_task_t task, bool force)
将任务设置为紧急任务,下次调度立即执行。
xf_task_manager_t xf_task_manager_create(xf_task_on_idle_t on_idle)
创建任务管理器。
xf_err_t xf_task_manager_task_ready(xf_task_manager_t manager, xf_task_t task)
设置当前任务为就绪。
static void xf_task_run(xf_task_base_t *task)
xf_err_t xf_task_manager_task_destory(xf_task_manager_t manager, xf_task_t task)
设置当前任务为销毁。
xf_task_t xf_task_manager_get_current_task(xf_task_manager_t manager)
获取管理器运行的任务。
void * xf_task_manager_t
任务管理器句柄。
void(* xf_task_on_idle_t)(unsigned long int max_idle_ms)
空闲任务回调函数原型。
xf_task_time_t xf_task_get_ticks(void)
int32_t xf_task_ticks_to_msec(int32_t ticks)
XF_TASK_CONTEXT_TYPE xf_task_context_t
如果开启上下文, 旧必须设置 XF_TASK_CONTEXT_TYPE 的类型。