diff options
| author | charlown <[email protected]> | 2021-09-02 22:39:34 +0800 |
|---|---|---|
| committer | charlown <[email protected]> | 2021-09-02 22:39:34 +0800 |
| commit | 8abbe89cee0099f3ec727de53baf20f7945434e9 (patch) | |
| tree | a9d8b24c6f6bcb927963757846c21d9926797c43 /src | |
| parent | 2e74dd8e2d641f581ef733a050392d161d3643d0 (diff) | |
| parent | dca7dcb42a44249abbe6c36ce2a69355e60d1f79 (diff) | |
Merge branch 'master' of https://github.com/RT-Thread/rt-thread
Diffstat (limited to 'src')
| -rw-r--r-- | src/memheap.c | 6 | ||||
| -rw-r--r-- | src/timer.c | 16 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/memheap.c b/src/memheap.c index d0801d721b..e09f5c4bce 100644 --- a/src/memheap.c +++ b/src/memheap.c @@ -730,13 +730,15 @@ int memheaptrace(void) if (count > 0) { int index; +#if defined(RT_USING_FINSH) && defined(MSH_USING_BUILT_IN_COMMANDS) extern int list_memheap(void); +#endif heaps = (struct rt_memheap **)rt_malloc(sizeof(struct rt_memheap *) * count); if (heaps == RT_NULL) return 0; - +#if defined(RT_USING_FINSH) && defined(MSH_USING_BUILT_IN_COMMANDS) list_memheap(); - +#endif rt_kprintf("memheap header size: %d\n", RT_MEMHEAP_SIZE); count = rt_object_get_pointers(RT_Object_Class_MemHeap, (rt_object_t *)heaps, count); for (index = 0; index < count; index++) diff --git a/src/timer.c b/src/timer.c index da52a02fc8..25ba175306 100644 --- a/src/timer.c +++ b/src/timer.c @@ -367,6 +367,7 @@ rt_err_t rt_timer_start(rt_timer_t timer) unsigned int row_lvl; rt_list_t *timer_list; register rt_base_t level; + register rt_bool_t need_schedule; rt_list_t *row_head[RT_TIMER_SKIP_LIST_LEVEL]; unsigned int tst_nr; static unsigned int random_nr; @@ -375,6 +376,8 @@ rt_err_t rt_timer_start(rt_timer_t timer) RT_ASSERT(timer != RT_NULL); RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); + need_schedule = RT_FALSE; + /* stop timer firstly */ level = rt_hw_interrupt_disable(); /* remove timer from list */ @@ -457,9 +460,6 @@ rt_err_t rt_timer_start(rt_timer_t timer) timer->parent.flag |= RT_TIMER_FLAG_ACTIVATED; - /* enable interrupt */ - rt_hw_interrupt_enable(level); - #ifdef RT_USING_TIMER_SOFT if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER) { @@ -469,11 +469,19 @@ rt_err_t rt_timer_start(rt_timer_t timer) { /* resume timer thread to check soft timer */ rt_thread_resume(&_timer_thread); - rt_schedule(); + need_schedule = RT_TRUE; } } #endif /* RT_USING_TIMER_SOFT */ + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + if (need_schedule) + { + rt_schedule(); + } + return RT_EOK; } RTM_EXPORT(rt_timer_start); |
