修正相同优先级任务切换太频繁的问题

This commit is contained in:
shaojinchun 2019-10-11 09:13:40 +08:00
parent 413fcba30a
commit 234af6aaa2
4 changed files with 19 additions and 0 deletions

View File

@ -608,6 +608,7 @@ struct rt_thread
rt_ubase_t init_tick; /**< thread's initialized tick */
rt_ubase_t remaining_tick; /**< remaining tick */
rt_ubase_t can_yield; /**< indicate whether remaining_tick has been reloaded since last schedule */
struct rt_timer thread_timer; /**< built-in thread timer */

View File

@ -89,6 +89,8 @@ void rt_tick_increase(void)
/* change to initialized tick */
thread->remaining_tick = thread->init_tick;
thread->can_yield = 1;
/* yield */
rt_thread_yield();
}

View File

@ -344,8 +344,13 @@ void rt_schedule(void)
{
to_thread = current_thread;
}
else if (current_thread->current_priority == highest_ready_priority && current_thread->can_yield == 0)
{
to_thread = current_thread;
}
else
{
current_thread->can_yield = 0;
rt_schedule_insert_thread(current_thread);
}
}
@ -435,8 +440,13 @@ void rt_schedule(void)
{
to_thread = rt_current_thread;
}
else if (current_thread->current_priority == highest_ready_priority && current_thread->can_yield == 0)
{
to_thread = current_thread;
}
else
{
current_thread->can_yield = 0;
need_insert_from_thread = 1;
}
}
@ -578,8 +588,13 @@ void rt_scheduler_do_irq_switch(void *context)
{
to_thread = current_thread;
}
else if (current_thread->current_priority == highest_ready_priority && current_thread->can_yield == 0)
{
to_thread = current_thread;
}
else
{
current_thread->can_yield = 0;
rt_schedule_insert_thread(current_thread);
}
}

View File

@ -159,6 +159,7 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
/* tick init */
thread->init_tick = tick;
thread->remaining_tick = tick;
thread->can_yield = 0;
/* error and flags */
thread->error = RT_EOK;