summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2021-06-01 11:42:47 +0800
committerMeco Man <[email protected]>2021-06-01 14:41:55 +0800
commitf34e9323b430813a6dbb62a609cfb3980aa645b0 (patch)
treed47805c1cf64ed69395d4d600b73265851996b0c /src
parent84fb09230f7795e5ae151489feff044b47d4fd7b (diff)
对rt_tick_increase临界区进行保护
Diffstat (limited to 'src')
-rw-r--r--src/clock.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/clock.c b/src/clock.c
index 8746d463c1..045555933d 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -62,6 +62,9 @@ void rt_tick_set(rt_tick_t tick)
void rt_tick_increase(void)
{
struct rt_thread *thread;
+ rt_base_t level;
+
+ level = rt_hw_interrupt_disable();
/* increase the global tick */
#ifdef RT_USING_SMP
@@ -76,17 +79,17 @@ void rt_tick_increase(void)
-- thread->remaining_tick;
if (thread->remaining_tick == 0)
{
- rt_base_t level;
-
/* change to initialized tick */
thread->remaining_tick = thread->init_tick;
-
- level = rt_hw_interrupt_disable();
thread->stat |= RT_THREAD_STAT_YIELD;
- rt_hw_interrupt_enable(level);
+ rt_hw_interrupt_enable(level);
rt_schedule();
}
+ else
+ {
+ rt_hw_interrupt_enable(level);
+ }
/* check timer */
rt_timer_check();