From 9f9e25a98ec198beff935c3a092459814ce68b56 Mon Sep 17 00:00:00 2001 From: TXuian <1163589503@qq.com> Date: Tue, 30 Apr 2024 14:49:51 +0800 Subject: [PATCH] Support running task list management. --- Ubiquitous/XiZi_AIoT/softkernel/task/task.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Ubiquitous/XiZi_AIoT/softkernel/task/task.c b/Ubiquitous/XiZi_AIoT/softkernel/task/task.c index cde613e67..78047d040 100644 --- a/Ubiquitous/XiZi_AIoT/softkernel/task/task.c +++ b/Ubiquitous/XiZi_AIoT/softkernel/task/task.c @@ -50,7 +50,13 @@ static inline void task_node_leave_list(struct TaskMicroDescriptor* task) } } -static inline void task_node_add_to_ready_list(struct TaskMicroDescriptor* task) +static inline void task_node_add_to_ready_list_head(struct TaskMicroDescriptor* task) +{ + doubleListAddOnHead(&task->node, &xizi_task_manager.task_list_head[task->priority]); + ready_task_priority |= ((uint32_t)1 << task->priority); +} + +static inline void task_node_add_to_ready_list_back(struct TaskMicroDescriptor* task) { doubleListAddOnBack(&task->node, &xizi_task_manager.task_list_head[task->priority]); ready_task_priority |= ((uint32_t)1 << task->priority); @@ -226,7 +232,7 @@ static void _task_set_default_schedule_attr(struct TaskMicroDescriptor* task) task->maxium_tick = TASK_CLOCK_TICK * 10; task->state = READY; task->priority = TASK_DEFAULT_PRIORITY; - task_node_add_to_ready_list(task); + task_node_add_to_ready_list_head(task); } static void task_state_set_running(struct TaskMicroDescriptor* task) @@ -285,7 +291,7 @@ static void _task_yield_noschedule(struct TaskMicroDescriptor* task, bool blocki task->state = READY; } task->remain_tick = TASK_CLOCK_TICK; - task_node_add_to_ready_list(task); + task_node_add_to_ready_list_back(task); } static void _task_block(struct TaskMicroDescriptor* task) @@ -303,7 +309,7 @@ static void _task_unblock(struct TaskMicroDescriptor* task) assert(task->state == BLOCKED); task_node_leave_list(task); task->state = READY; - task_node_add_to_ready_list(task); + task_node_add_to_ready_list_head(task); } /// @brief @warning not tested function @@ -322,7 +328,7 @@ static void _set_cur_task_priority(int priority) current_task->priority = priority; - task_node_add_to_ready_list(current_task); + task_node_add_to_ready_list_back(current_task); return; }