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
|
* task control block
|
||||||
*/
|
*/
|
||||||
typedef struct k_task_st {
|
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
|
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
|
||||||
knl_obj_t knl_obj; /**< just for verification, test whether current object is really a task. */
|
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
|
#if TOS_CFG_MUTEX_EN > 0u
|
||||||
tos_list_init(&task->mutex_own_list);
|
tos_list_init(&task->mutex_own_list);
|
||||||
task->prio_pending = K_TASK_PRIO_INVALID;
|
task->prio_pending = K_TASK_PRIO_INVALID;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
task->pend_state = PEND_STATE_NONE;
|
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) {
|
if (task->tick_expires < curr_expires) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (task->tick_expires == curr_expires &&
|
||||||
|
task->prio < curr_task->prio) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
prev_expires = curr_expires;
|
prev_expires = curr_expires;
|
||||||
}
|
}
|
||||||
task->tick_expires -= prev_expires;
|
task->tick_expires -= prev_expires;
|
||||||
|
Reference in New Issue
Block a user