未验证 提交 aeff91b2 编写于 作者: B Bernard Xiong 提交者: GitHub

Merge pull request #3769 from jesven/fix_yield

解决yield操作不能及时释放cpu的问题
......@@ -91,8 +91,7 @@ void rt_tick_increase(void)
thread->stat |= RT_THREAD_STAT_YIELD;
/* yield */
rt_thread_yield();
rt_schedule();
}
/* check timer */
......
......@@ -346,9 +346,9 @@ void rt_schedule(void)
}
else
{
current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
rt_schedule_insert_thread(current_thread);
}
current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
}
to_thread->oncpu = cpu_id;
if (to_thread != current_thread)
......@@ -444,9 +444,9 @@ void rt_schedule(void)
}
else
{
rt_current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
need_insert_from_thread = 1;
}
rt_current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
}
if (to_thread != rt_current_thread)
......@@ -595,9 +595,9 @@ void rt_scheduler_do_irq_switch(void *context)
}
else
{
current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
rt_schedule_insert_thread(current_thread);
}
current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
}
to_thread->oncpu = cpu_id;
if (to_thread != current_thread)
......
......@@ -478,7 +478,15 @@ RTM_EXPORT(rt_thread_delete);
*/
rt_err_t rt_thread_yield(void)
{
struct rt_thread *thread;
rt_base_t lock;
thread = rt_thread_self();
lock = rt_hw_interrupt_disable();
thread->remaining_tick = thread->init_tick;
thread->stat |= RT_THREAD_STAT_YIELD;
rt_schedule();
rt_hw_interrupt_enable(lock);
return RT_EOK;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册