summaryrefslogtreecommitdiff
path: root/src/scheduler.c
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-11-12 22:47:18 +0800
committerGitHub <[email protected]>2019-11-12 22:47:18 +0800
commitda7751c044491b85e2c3f9eebdaa1c4e7e5d153b (patch)
treef4dedd76c88102b66e0bb2e684b9af4fb2c6f99b /src/scheduler.c
parente8a864c7c871d3c5b166fd671805bec0a386fe03 (diff)
parente03ac83ad3d22c578e367550d2ff714b53e79799 (diff)
Merge pull request #3129 from jesven/fix_same_prio
修正相同优先级任务切换太频繁的问题
Diffstat (limited to 'src/scheduler.c')
-rw-r--r--src/scheduler.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/scheduler.c b/src/scheduler.c
index f671a49623..edcf11dba5 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -344,8 +344,13 @@ void rt_schedule(void)
{
to_thread = current_thread;
}
+ else if (current_thread->current_priority == highest_ready_priority && (current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
+ {
+ to_thread = current_thread;
+ }
else
{
+ current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
rt_schedule_insert_thread(current_thread);
}
}
@@ -435,8 +440,13 @@ void rt_schedule(void)
{
to_thread = rt_current_thread;
}
+ else if (rt_current_thread->current_priority == highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
+ {
+ to_thread = rt_current_thread;
+ }
else
{
+ rt_current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
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->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
+ {
+ to_thread = current_thread;
+ }
else
{
+ current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
rt_schedule_insert_thread(current_thread);
}
}