diff options
| author | guo <[email protected]> | 2022-01-28 16:38:32 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-01-28 16:38:32 +0800 |
| commit | 580194f5f0f18371c08bb926a8fed7d7093cea67 (patch) | |
| tree | 17b0dac3ea40283f1b9268a56f3577c9d3e94d05 /include | |
| parent | cd929f04f680ea243810c988558c717c193740b8 (diff) | |
| parent | 500d26c2570bb3d905e38aed05fd9c9b324a8f6e (diff) | |
Merge pull request #4740 from Guozhanxin/scheduler_check
Diffstat (limited to 'include')
| -rw-r--r-- | include/rtdebug.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/include/rtdebug.h b/include/rtdebug.h index 0858a5bbf1..55d46171a2 100644 --- a/include/rtdebug.h +++ b/include/rtdebug.h @@ -110,9 +110,34 @@ do \ rt_hw_interrupt_enable(level); \ } \ while (0) + +/* "scheduler available" means: + * 1) the scheduler has been started. + * 2) not in interrupt context. + * 3) scheduler is not locked. + */ +#define RT_DEBUG_SCHEDULER_AVAILABLE(need_check) \ +do \ +{ \ + if (need_check) \ + { \ + rt_base_t level; \ + level = rt_hw_interrupt_disable(); \ + if (rt_critical_level() != 0) \ + { \ + rt_kprintf("Function[%s]: scheduler is not available\n", \ + __FUNCTION__); \ + RT_ASSERT(0) \ + } \ + RT_DEBUG_IN_THREAD_CONTEXT; \ + rt_hw_interrupt_enable(level); \ + } \ +} \ +while (0) #else #define RT_DEBUG_NOT_IN_INTERRUPT #define RT_DEBUG_IN_THREAD_CONTEXT +#define RT_DEBUG_SCHEDULER_AVAILABLE(need_check) #endif #else /* RT_DEBUG */ @@ -121,6 +146,7 @@ while (0) #define RT_DEBUG_LOG(type, message) #define RT_DEBUG_NOT_IN_INTERRUPT #define RT_DEBUG_IN_THREAD_CONTEXT +#define RT_DEBUG_SCHEDULER_AVAILABLE(need_check) #endif /* RT_DEBUG */ |
