Support running task list management.

This commit is contained in:
TXuian 2024-04-30 14:49:51 +08:00
parent baa04913bd
commit 9f9e25a98e
1 changed files with 11 additions and 5 deletions

View File

@ -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]); doubleListAddOnBack(&task->node, &xizi_task_manager.task_list_head[task->priority]);
ready_task_priority |= ((uint32_t)1 << 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->maxium_tick = TASK_CLOCK_TICK * 10;
task->state = READY; task->state = READY;
task->priority = TASK_DEFAULT_PRIORITY; 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) 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->state = READY;
} }
task->remain_tick = TASK_CLOCK_TICK; 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) static void _task_block(struct TaskMicroDescriptor* task)
@ -303,7 +309,7 @@ static void _task_unblock(struct TaskMicroDescriptor* task)
assert(task->state == BLOCKED); assert(task->state == BLOCKED);
task_node_leave_list(task); task_node_leave_list(task);
task->state = READY; task->state = READY;
task_node_add_to_ready_list(task); task_node_add_to_ready_list_head(task);
} }
/// @brief @warning not tested function /// @brief @warning not tested function
@ -322,7 +328,7 @@ static void _set_cur_task_priority(int priority)
current_task->priority = priority; current_task->priority = priority;
task_node_add_to_ready_list(current_task); task_node_add_to_ready_list_back(current_task);
return; return;
} }