summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/clock.c3
-rw-r--r--src/scheduler.c6
-rw-r--r--src/thread.c8
3 files changed, 12 insertions, 5 deletions
diff --git a/src/clock.c b/src/clock.c
index 97a09ddeaf..a91cd829b6 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -91,8 +91,7 @@ void rt_tick_increase(void)
thread->stat |= RT_THREAD_STAT_YIELD;
- /* yield */
- rt_thread_yield();
+ rt_schedule();
}
/* check timer */
diff --git a/src/scheduler.c b/src/scheduler.c
index 699c817270..2250c4a006 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -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)
diff --git a/src/thread.c b/src/thread.c
index 9f80482b20..7a90e57f25 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -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;
}