fix a tick list add bug
fix a tick list add bug: if a lower priority task has the same tick_expires with a higher priority task in the tick list, the lower should be added behind the higher one.
This commit is contained in:
@@ -48,7 +48,7 @@ typedef void (*k_task_entry_t)(void *arg);
|
||||
* task control block
|
||||
*/
|
||||
typedef struct k_task_st {
|
||||
k_stack_t *sp; /**< task stack pointer. This lady always comes first, we use her in port_s.S for context switch. */
|
||||
k_stack_t *sp; /**< task stack pointer. This lady always comes first, we count on her in port_s.S for context switch. */
|
||||
|
||||
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
|
||||
knl_obj_t knl_obj; /**< just for verification, test whether current object is really a task. */
|
||||
|
@@ -11,7 +11,7 @@ __STATIC_INLINE__ void task_reset(k_task_t *task)
|
||||
|
||||
#if TOS_CFG_MUTEX_EN > 0u
|
||||
tos_list_init(&task->mutex_own_list);
|
||||
task->prio_pending = K_TASK_PRIO_INVALID;
|
||||
task->prio_pending = K_TASK_PRIO_INVALID;
|
||||
#endif
|
||||
|
||||
task->pend_state = PEND_STATE_NONE;
|
||||
|
@@ -18,6 +18,10 @@ __STATIC__ void tick_task_place(k_task_t *task, k_tick_t timeout)
|
||||
if (task->tick_expires < curr_expires) {
|
||||
break;
|
||||
}
|
||||
if (task->tick_expires == curr_expires &&
|
||||
task->prio < curr_task->prio) {
|
||||
break;
|
||||
}
|
||||
prev_expires = curr_expires;
|
||||
}
|
||||
task->tick_expires -= prev_expires;
|
||||
|
Reference in New Issue
Block a user