diff options
| author | sszlbg <[email protected]> | 2021-07-25 17:00:00 +0800 |
|---|---|---|
| committer | sszlbg <[email protected]> | 2021-07-25 17:00:00 +0800 |
| commit | bf88963a3ec85ce6da013e4cd1c59ec5041d29e1 (patch) | |
| tree | d4cd7d4fa3ff6e7b0c859a7660209787f47d168b /src/clock.c | |
| parent | 88d4faf68735948d6310e2d2271d576c5de254a0 (diff) | |
| parent | 2b201cbb00c512def085332d7fb09194656418b9 (diff) | |
Merge branch 'master' into at_client-rt_realloc_iss
# Conflicts:
# components/net/at/src/at_client.c
Diffstat (limited to 'src/clock.c')
| -rw-r--r-- | src/clock.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/clock.c b/src/clock.c index 0880d8d241..77516b3775 100644 --- a/src/clock.c +++ b/src/clock.c @@ -13,7 +13,8 @@ * 2010-07-13 Bernard fix rt_tick_from_millisecond issue found by kuronca * 2011-06-26 Bernard add rt_tick_set function. * 2018-11-22 Jesven add per cpu tick - * 2020-12-29 Meco Man add function rt_tick_get_millisecond() + * 2020-12-29 Meco Man implement rt_tick_get_millisecond() + * 2021-06-01 Meco Man add critical section projection for rt_tick_increase() */ #include <rthw.h> @@ -22,8 +23,8 @@ #ifdef RT_USING_SMP #define rt_tick rt_cpu_index(0)->tick #else -static rt_tick_t rt_tick = 0; -#endif +static volatile rt_tick_t rt_tick = 0; +#endif /* RT_USING_SMP */ /** * @addtogroup Clock @@ -62,13 +63,16 @@ 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 rt_cpu_self()->tick ++; #else ++ rt_tick; -#endif +#endif /* RT_USING_SMP */ /* check time slice */ thread = rt_thread_self(); @@ -78,11 +82,15 @@ void rt_tick_increase(void) { /* change to initialized tick */ thread->remaining_tick = thread->init_tick; - thread->stat |= RT_THREAD_STAT_YIELD; + rt_hw_interrupt_enable(level); rt_schedule(); } + else + { + rt_hw_interrupt_enable(level); + } /* check timer */ rt_timer_check(); @@ -130,7 +138,7 @@ RT_WEAK rt_tick_t rt_tick_get_millisecond(void) #warning "rt-thread cannot provide a correct 1ms-based tick any longer,\ please redefine this function in another file by using a high-precision hard-timer." return 0; -#endif +#endif /* 1000 % RT_TICK_PER_SECOND == 0u */ } /**@}*/ |
