diff options
| author | Bernard Xiong <[email protected]> | 2021-06-01 21:03:19 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-06-01 21:03:19 +0800 |
| commit | aa13a78b3ffa30b1bdcfcc734a2be6874b2e53c6 (patch) | |
| tree | d47805c1cf64ed69395d4d600b73265851996b0c | |
| parent | 84fb09230f7795e5ae151489feff044b47d4fd7b (diff) | |
| parent | f34e9323b430813a6dbb62a609cfb3980aa645b0 (diff) | |
Merge pull request #4751 from mysterywolf/protect
[kernel]对rt_tick_increase临界区进行保护
| -rw-r--r-- | src/clock.c | 13 |
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(); |
