From 649decd10516a30886d05f5afca3d425d836db0e Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 10 Aug 2013 10:17:45 +0000 Subject: [PATCH] Cleanup debug module. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6120 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/ARMCM4-STM32F303-DISCOVERY/chconf.h | 16 +- os/kernel/include/ch.h | 2 +- os/kernel/include/chdebug.h | 188 ++++++++++-------- os/kernel/include/chglobal.h | 24 +++ os/kernel/include/chsys.h | 20 +- os/kernel/ports/ARMCMx/chcore_v7m.h | 2 +- .../ARMCMx/compilers/GCC/chcoreasm_v7m.s | 6 +- os/kernel/src/chdebug.c | 127 ++++++------ os/kernel/src/chdynamic.c | 8 +- os/kernel/src/chthreads.c | 4 +- 10 files changed, 213 insertions(+), 184 deletions(-) diff --git a/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h b/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h index 6ee0bd743..31dbbcf4f 100644 --- a/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h +++ b/demos/ARMCM4-STM32F303-DISCOVERY/chconf.h @@ -357,7 +357,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_STATISTICS) || defined(__DOXYGEN__) -#define CH_DBG_STATISTICS FALSE +#define CH_DBG_STATISTICS TRUE #endif /** @@ -368,7 +368,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_SYSTEM_STATE_CHECK FALSE +#define CH_DBG_SYSTEM_STATE_CHECK TRUE #endif /** @@ -379,7 +379,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_CHECKS FALSE +#define CH_DBG_ENABLE_CHECKS TRUE #endif /** @@ -391,7 +391,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_ASSERTS FALSE +#define CH_DBG_ENABLE_ASSERTS TRUE #endif /** @@ -402,7 +402,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_TRACE FALSE +#define CH_DBG_ENABLE_TRACE TRUE #endif /** @@ -416,7 +416,7 @@ * @p panic_msg variable set to @p NULL. */ #if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) -#define CH_DBG_ENABLE_STACK_CHECK FALSE +#define CH_DBG_ENABLE_STACK_CHECK TRUE #endif /** @@ -428,7 +428,7 @@ * @note The default is @p FALSE. */ #if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__) -#define CH_DBG_FILL_THREADS FALSE +#define CH_DBG_FILL_THREADS TRUE #endif /** @@ -441,7 +441,7 @@ * tickless mode. */ #if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__) -#define CH_DBG_THREADS_PROFILING FALSE +#define CH_DBG_THREADS_PROFILING TRUE #endif /** @} */ diff --git a/os/kernel/include/ch.h b/os/kernel/include/ch.h index a3d475db4..6af6b8d4d 100644 --- a/os/kernel/include/ch.h +++ b/os/kernel/include/ch.h @@ -111,8 +111,8 @@ typedef struct virtual_timer virtual_timer_t; #include "chcore.h" #include "chtm.h" #include "chstats.h" -#include "chglobal.h" #include "chsys.h" +#include "chglobal.h" #include "chvt.h" #include "chthreads.h" #include "chlists.h" diff --git a/os/kernel/include/chdebug.h b/os/kernel/include/chdebug.h index 33363cbca..0f4083c84 100644 --- a/os/kernel/include/chdebug.h +++ b/os/kernel/include/chdebug.h @@ -29,34 +29,30 @@ #ifndef _CHDEBUG_H_ #define _CHDEBUG_H_ -#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || \ - CH_DBG_ENABLE_STACK_CHECK || CH_DBG_SYSTEM_STATE_CHECK -#define CH_DBG_ENABLED TRUE -#else -#define CH_DBG_ENABLED FALSE -#endif - -#define __QUOTE_THIS(p) #p +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ /*===========================================================================*/ +/* Module pre-compile time settings. */ +/*===========================================================================*/ + /** * @name Debug related settings * @{ */ -/*===========================================================================*/ - /** * @brief Trace buffer entries. */ -#ifndef CH_TRACE_BUFFER_SIZE -#define CH_TRACE_BUFFER_SIZE 64 +#ifndef CH_DBG_TRACE_BUFFER_SIZE +#define CH_DBG_TRACE_BUFFER_SIZE 64 #endif /** * @brief Fill value for thread stack area in debug mode. */ -#ifndef CH_STACK_FILL_VALUE -#define CH_STACK_FILL_VALUE 0x55 +#ifndef CH_DBG_STACK_FILL_VALUE +#define CH_DBG_STACK_FILL_VALUE 0x55 #endif /** @@ -66,37 +62,24 @@ * a debugger. A uninitialized field is not an error in itself but it * better to know it. */ -#ifndef CH_THREAD_FILL_VALUE -#define CH_THREAD_FILL_VALUE 0xFF +#ifndef CH_DBG_THREAD_FILL_VALUE +#define CH_DBG_THREAD_FILL_VALUE 0xFF #endif - /** @} */ /*===========================================================================*/ -/* System state checker related code and variables. */ +/* Derived constants and error checks. */ /*===========================================================================*/ -#if !CH_DBG_SYSTEM_STATE_CHECK -#define dbg_enter_lock() -#define dbg_leave_lock() -#define dbg_check_disable() -#define dbg_check_suspend() -#define dbg_check_enable() -#define dbg_check_lock() -#define dbg_check_unlock() -#define dbg_check_lock_from_isr() -#define dbg_check_unlock_from_isr() -#define dbg_check_enter_isr() -#define dbg_check_leave_isr() -#define chDbgCheckClassI(); -#define chDbgCheckClassS(); +#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || \ + CH_DBG_ENABLE_STACK_CHECK || CH_DBG_SYSTEM_STATE_CHECK +#define CH_DBG_ENABLED TRUE #else -#define dbg_enter_lock() (dbg_lock_cnt = 1) -#define dbg_leave_lock() (dbg_lock_cnt = 0) +#define CH_DBG_ENABLED FALSE #endif /*===========================================================================*/ -/* Trace related structures and macros. */ +/* Module data structures and types. */ /*===========================================================================*/ #if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__) @@ -104,43 +87,89 @@ * @brief Trace buffer record. */ typedef struct { - systime_t se_time; /**< @brief Time of the switch event. */ - thread_t *se_tp; /**< @brief Switched in thread. */ - void *se_wtobjp; /**< @brief Object where going to sleep.*/ - uint8_t se_state; /**< @brief Switched out thread state. */ + /** + * @brief Time of the switch event. + */ + systime_t se_time; + /** + * @brief Switched in thread. + */ + thread_t *se_tp; + /** + * @brief Object where going to sleep. + */ + void *se_wtobjp; + /** + * @brief Switched out thread state. + */ + uint8_t se_state; } ch_swc_event_t; /** * @brief Trace buffer header. */ typedef struct { - unsigned tb_size; /**< @brief Trace buffer size (entries).*/ - ch_swc_event_t *tb_ptr; /**< @brief Pointer to the buffer front.*/ - /** @brief Ring buffer.*/ - ch_swc_event_t tb_buffer[CH_TRACE_BUFFER_SIZE]; + /** + * @brief Trace buffer size (entries). + */ + unsigned tb_size; + /** + * @brief Pointer to the buffer front. + */ + ch_swc_event_t *tb_ptr; + /** + * @brief Ring buffer. + */ + ch_swc_event_t tb_buffer[CH_DBG_TRACE_BUFFER_SIZE]; } ch_trace_buffer_t; - -#if !defined(__DOXYGEN__) -extern ch_trace_buffer_t dbg_trace_buffer; -#endif - #endif /* CH_DBG_ENABLE_TRACE */ -#if !CH_DBG_ENABLE_TRACE -/* When the trace feature is disabled this function is replaced by an empty - macro.*/ -#define dbg_trace(otp) +/*===========================================================================*/ +/* Module macros. */ +/*===========================================================================*/ + +#define __QUOTE_THIS(p) #p + +#if CH_DBG_SYSTEM_STATE_CHECK +#define _dbg_enter_lock() (ch.dbg_lock_cnt = 1) +#define _dbg_leave_lock() (ch.dbg_lock_cnt = 0) #endif -/*===========================================================================*/ -/* Parameters checking related macros. */ -/*===========================================================================*/ +/* When the state checker feature is disabled then the following functions + are replaced by an empty macro.*/ +#if !CH_DBG_SYSTEM_STATE_CHECK +#define _dbg_enter_lock() +#define _dbg_leave_lock() +#define _dbg_check_disable() +#define _dbg_check_suspend() +#define _dbg_check_enable() +#define _dbg_check_lock() +#define _dbg_check_unlock() +#define _dbg_check_lock_from_isr() +#define _dbg_check_unlock_from_isr() +#define _dbg_check_enter_isr() +#define _dbg_check_leave_isr() +#define chDbgCheckClassI() +#define chDbgCheckClassS() +#endif + +/* When the trace feature is disabled this function is replaced by an empty + macro.*/ +#if !CH_DBG_ENABLE_TRACE +#define _dbg_trace(otp) +#endif + +/* When the debug features are disabled this function is replaced by an empty + macro.*/ +#if !CH_DBG_ENABLED +#define chDbgPanic(msg) {} +#endif -#if CH_DBG_ENABLE_CHECKS || defined(__DOXYGEN__) /** * @name Macro Functions * @{ */ +#if CH_DBG_ENABLE_CHECKS || defined(__DOXYGEN__) /** * @brief Function parameters check. * @details If the condition check fails then the kernel panics and halts. @@ -158,22 +187,14 @@ extern ch_trace_buffer_t dbg_trace_buffer; chDbgPanic(__QUOTE_THIS(func)"()"); \ } #endif /* !defined(chDbgCheck) */ -/** @} */ + #else /* !CH_DBG_ENABLE_CHECKS */ #define chDbgCheck(c, func) { \ (void)(c), (void)__QUOTE_THIS(func)"()"; \ } #endif /* !CH_DBG_ENABLE_CHECKS */ -/*===========================================================================*/ -/* Assertions related macros. */ -/*===========================================================================*/ - #if CH_DBG_ENABLE_ASSERTS || defined(__DOXYGEN__) -/** - * @name Macro Functions - * @{ - */ /** * @brief Condition assertion. * @details If the condition check fails then the kernel panics with the @@ -197,51 +218,46 @@ extern ch_trace_buffer_t dbg_trace_buffer; chDbgPanic(m); \ } #endif /* !defined(chDbgAssert) */ -/** @} */ #else /* !CH_DBG_ENABLE_ASSERTS */ #define chDbgAssert(c, m, r) {(void)(c);} #endif /* !CH_DBG_ENABLE_ASSERTS */ +/** @} */ /*===========================================================================*/ -/* Panic related macros. */ +/* External declarations. */ /*===========================================================================*/ -#if !CH_DBG_ENABLED -/* When the debug features are disabled this function is replaced by an empty - macro.*/ -#define chDbgPanic(msg) {} -#endif - #ifdef __cplusplus extern "C" { #endif #if CH_DBG_SYSTEM_STATE_CHECK - extern cnt_t dbg_isr_cnt; - extern cnt_t dbg_lock_cnt; - void dbg_check_disable(void); - void dbg_check_suspend(void); - void dbg_check_enable(void); - void dbg_check_lock(void); - void dbg_check_unlock(void); - void dbg_check_lock_from_isr(void); - void dbg_check_unlock_from_isr(void); - void dbg_check_enter_isr(void); - void dbg_check_leave_isr(void); + void _dbg_check_disable(void); + void _dbg_check_suspend(void); + void _dbg_check_enable(void); + void _dbg_check_lock(void); + void _dbg_check_unlock(void); + void _dbg_check_lock_from_isr(void); + void _dbg_check_unlock_from_isr(void); + void _dbg_check_enter_isr(void); + void _dbg_check_leave_isr(void); void chDbgCheckClassI(void); void chDbgCheckClassS(void); #endif #if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__) void _trace_init(void); - void dbg_trace(thread_t *otp); + void _dbg_trace(thread_t *otp); #endif #if CH_DBG_ENABLED - extern const char *dbg_panic_msg; void chDbgPanic(const char *msg); #endif #ifdef __cplusplus } #endif +/*===========================================================================*/ +/* Module inline functions. */ +/*===========================================================================*/ + #endif /* _CHDEBUG_H_ */ /** @} */ diff --git a/os/kernel/include/chglobal.h b/os/kernel/include/chglobal.h index c8e0ca15b..4bbc0775b 100644 --- a/os/kernel/include/chglobal.h +++ b/os/kernel/include/chglobal.h @@ -120,6 +120,30 @@ typedef struct ch_system { * @brief Virtual timers delta list header. */ virtual_timers_list_t vtlist; +#if CH_DBG_ENABLED || defined(__DOXYGEN__) + /** + * @brief Pointer to the panic message. + * @details This pointer is meant to be accessed through the debugger, it is + * written once and then the system is halted. + */ + const char *dbg_panic_msg; +#endif +#if CH_DBG_SYSTEM_STATE_CHECK || defined(__DOXYGEN__) + /** + * @brief ISR nesting level. + */ + cnt_t dbg_isr_cnt; + /** + * @brief Lock nesting level. + */ + cnt_t dbg_lock_cnt; +#endif +#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__) + /** + * @brief Public trace buffer. + */ + ch_trace_buffer_t dbg_trace_buffer; +#endif } ch_system_t; /*===========================================================================*/ diff --git a/os/kernel/include/chsys.h b/os/kernel/include/chsys.h index 2d7cfa430..475e090bd 100644 --- a/os/kernel/include/chsys.h +++ b/os/kernel/include/chsys.h @@ -62,7 +62,7 @@ #define CH_IRQ_PROLOGUE() \ PORT_IRQ_PROLOGUE(); \ _stats_increase_irq(); \ - dbg_check_enter_isr() + _dbg_check_enter_isr() /** * @brief IRQ handler exit code. @@ -73,7 +73,7 @@ * @special */ #define CH_IRQ_EPILOGUE() \ - dbg_check_leave_isr(); \ + _dbg_check_leave_isr(); \ PORT_IRQ_EPILOGUE() /** @@ -202,7 +202,7 @@ */ #define chSysSwitch(ntp, otp) { \ \ - dbg_trace(otp); \ + _dbg_trace(otp); \ _stats_ctxswc(ntp, otp); \ CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp); \ port_switch(ntp, otp); \ @@ -243,7 +243,7 @@ extern "C" { static inline void chSysDisable(void) { port_disable(); - dbg_check_disable(); + _dbg_check_disable(); } /** @@ -260,7 +260,7 @@ static inline void chSysDisable(void) { static inline void chSysSuspend(void) { port_suspend(); - dbg_check_suspend(); + _dbg_check_suspend(); } /** @@ -274,7 +274,7 @@ static inline void chSysSuspend(void) { */ static inline void chSysEnable(void) { - dbg_check_enable(); + _dbg_check_enable(); port_enable(); } @@ -287,7 +287,7 @@ static inline void chSysLock(void) { port_lock(); _stats_start_measure_crit_thd(); - dbg_check_lock(); + _dbg_check_lock(); } /** @@ -297,7 +297,7 @@ static inline void chSysLock(void) { */ static inline void chSysUnlock(void) { - dbg_check_unlock(); + _dbg_check_unlock(); _stats_stop_measure_crit_thd(); port_unlock(); } @@ -318,7 +318,7 @@ static inline void chSysLockFromISR(void) { port_lock_from_isr(); _stats_start_measure_crit_isr(); - dbg_check_lock_from_isr(); + _dbg_check_lock_from_isr(); } /** @@ -336,7 +336,7 @@ static inline void chSysLockFromISR(void) { */ static inline void chSysUnlockFromISR(void) { - dbg_check_unlock_from_isr(); + _dbg_check_unlock_from_isr(); _stats_stop_measure_crit_isr(); port_unlock_from_isr(); } diff --git a/os/kernel/ports/ARMCMx/chcore_v7m.h b/os/kernel/ports/ARMCMx/chcore_v7m.h index a0a2680b7..3426977a1 100644 --- a/os/kernel/ports/ARMCMx/chcore_v7m.h +++ b/os/kernel/ports/ARMCMx/chcore_v7m.h @@ -371,7 +371,7 @@ struct context { #define port_switch(ntp, otp) _port_switch(ntp, otp) #else #define port_switch(ntp, otp) { \ - struct intctx *r13 = __get_PSP(); \ + struct intctx *r13 = (struct intctx *)__get_PSP(); \ if ((stkalign_t *)(r13 - 1) < otp->p_stklimit) \ chDbgPanic("stack overflow"); \ _port_switch(ntp, otp); \ diff --git a/os/kernel/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s b/os/kernel/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s index 881448dfc..36864a2c9 100644 --- a/os/kernel/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s +++ b/os/kernel/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s @@ -85,7 +85,7 @@ _port_switch: .globl _port_thread_start _port_thread_start: #if CH_DBG_SYSTEM_STATE_CHECK - bl dbg_check_unlock + bl _dbg_check_unlock #endif #if CH_DBG_STATISTICS bl _stats_stop_measure_crit_thd @@ -112,11 +112,11 @@ _port_switch_from_isr: bl _stats_start_measure_crit_thd #endif #if CH_DBG_SYSTEM_STATE_CHECK - bl dbg_check_lock + bl _dbg_check_lock #endif bl chSchDoReschedule #if CH_DBG_SYSTEM_STATE_CHECK - bl dbg_check_unlock + bl _dbg_check_unlock #endif #if CH_DBG_STATISTICS bl _stats_stop_measure_crit_thd diff --git a/os/kernel/src/chdebug.c b/os/kernel/src/chdebug.c index ba9c469b9..05b746357 100644 --- a/os/kernel/src/chdebug.c +++ b/os/kernel/src/chdebug.c @@ -51,29 +51,38 @@ #include "ch.h" /*===========================================================================*/ -/* System state checker related code and variables. */ +/* Module local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module local types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module exported functions. */ /*===========================================================================*/ #if CH_DBG_SYSTEM_STATE_CHECK || defined(__DOXYGEN__) - -/** - * @brief ISR nesting level. - */ -cnt_t dbg_isr_cnt; - -/** - * @brief Lock nesting level. - */ -cnt_t dbg_lock_cnt; - /** * @brief Guard code for @p chSysDisable(). * * @notapi */ -void dbg_check_disable(void) { +void _dbg_check_disable(void) { - if ((dbg_isr_cnt != 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt != 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#1"); } @@ -82,9 +91,9 @@ void dbg_check_disable(void) { * * @notapi */ -void dbg_check_suspend(void) { +void _dbg_check_suspend(void) { - if ((dbg_isr_cnt != 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt != 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#2"); } @@ -93,9 +102,9 @@ void dbg_check_suspend(void) { * * @notapi */ -void dbg_check_enable(void) { +void _dbg_check_enable(void) { - if ((dbg_isr_cnt != 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt != 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#3"); } @@ -104,11 +113,11 @@ void dbg_check_enable(void) { * * @notapi */ -void dbg_check_lock(void) { +void _dbg_check_lock(void) { - if ((dbg_isr_cnt != 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt != 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#4"); - dbg_enter_lock(); + _dbg_enter_lock(); } /** @@ -116,11 +125,11 @@ void dbg_check_lock(void) { * * @notapi */ -void dbg_check_unlock(void) { +void _dbg_check_unlock(void) { - if ((dbg_isr_cnt != 0) || (dbg_lock_cnt <= 0)) + if ((ch.dbg_isr_cnt != 0) || (ch.dbg_lock_cnt <= 0)) chDbgPanic("SV#5"); - dbg_leave_lock(); + _dbg_leave_lock(); } /** @@ -128,11 +137,11 @@ void dbg_check_unlock(void) { * * @notapi */ -void dbg_check_lock_from_isr(void) { +void _dbg_check_lock_from_isr(void) { - if ((dbg_isr_cnt <= 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt <= 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#6"); - dbg_enter_lock(); + _dbg_enter_lock(); } /** @@ -140,11 +149,11 @@ void dbg_check_lock_from_isr(void) { * * @notapi */ -void dbg_check_unlock_from_isr(void) { +void _dbg_check_unlock_from_isr(void) { - if ((dbg_isr_cnt <= 0) || (dbg_lock_cnt <= 0)) + if ((ch.dbg_isr_cnt <= 0) || (ch.dbg_lock_cnt <= 0)) chDbgPanic("SV#7"); - dbg_leave_lock(); + _dbg_leave_lock(); } /** @@ -152,12 +161,12 @@ void dbg_check_unlock_from_isr(void) { * * @notapi */ -void dbg_check_enter_isr(void) { +void _dbg_check_enter_isr(void) { port_lock_from_isr(); - if ((dbg_isr_cnt < 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt < 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#8"); - dbg_isr_cnt++; + ch.dbg_isr_cnt++; port_unlock_from_isr(); } @@ -166,12 +175,12 @@ void dbg_check_enter_isr(void) { * * @notapi */ -void dbg_check_leave_isr(void) { +void _dbg_check_leave_isr(void) { port_lock_from_isr(); - if ((dbg_isr_cnt <= 0) || (dbg_lock_cnt != 0)) + if ((ch.dbg_isr_cnt <= 0) || (ch.dbg_lock_cnt != 0)) chDbgPanic("SV#9"); - dbg_isr_cnt--; + ch.dbg_isr_cnt--; port_unlock_from_isr(); } @@ -185,7 +194,7 @@ void dbg_check_leave_isr(void) { */ void chDbgCheckClassI(void) { - if ((dbg_isr_cnt < 0) || (dbg_lock_cnt <= 0)) + if ((ch.dbg_isr_cnt < 0) || (ch.dbg_lock_cnt <= 0)) chDbgPanic("SV#10"); } @@ -199,30 +208,21 @@ void chDbgCheckClassI(void) { */ void chDbgCheckClassS(void) { - if ((dbg_isr_cnt != 0) || (dbg_lock_cnt <= 0)) + if ((ch.dbg_isr_cnt != 0) || (ch.dbg_lock_cnt <= 0)) chDbgPanic("SV#11"); } #endif /* CH_DBG_SYSTEM_STATE_CHECK */ -/*===========================================================================*/ -/* Trace related code and variables. */ -/*===========================================================================*/ - #if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__) -/** - * @brief Public trace buffer. - */ -ch_trace_buffer_t dbg_trace_buffer; - /** * @brief Trace circular buffer subsystem initialization. * @note Internal use only. */ void _trace_init(void) { - dbg_trace_buffer.tb_size = CH_TRACE_BUFFER_SIZE; - dbg_trace_buffer.tb_ptr = &dbg_trace_buffer.tb_buffer[0]; + ch.dbg_trace_buffer.tb_size = CH_DBG_TRACE_BUFFER_SIZE; + ch.dbg_trace_buffer.tb_ptr = &ch.dbg_trace_buffer.tb_buffer[0]; } /** @@ -232,30 +232,19 @@ void _trace_init(void) { * * @notapi */ -void dbg_trace(thread_t *otp) { +void _dbg_trace(thread_t *otp) { - dbg_trace_buffer.tb_ptr->se_time = chVTGetSystemTimeX(); - dbg_trace_buffer.tb_ptr->se_tp = currp; - dbg_trace_buffer.tb_ptr->se_wtobjp = otp->p_u.wtobjp; - dbg_trace_buffer.tb_ptr->se_state = (uint8_t)otp->p_state; - if (++dbg_trace_buffer.tb_ptr >= - &dbg_trace_buffer.tb_buffer[CH_TRACE_BUFFER_SIZE]) - dbg_trace_buffer.tb_ptr = &dbg_trace_buffer.tb_buffer[0]; + ch.dbg_trace_buffer.tb_ptr->se_time = chVTGetSystemTimeX(); + ch.dbg_trace_buffer.tb_ptr->se_tp = currp; + ch.dbg_trace_buffer.tb_ptr->se_wtobjp = otp->p_u.wtobjp; + ch.dbg_trace_buffer.tb_ptr->se_state = (uint8_t)otp->p_state; + if (++ch.dbg_trace_buffer.tb_ptr >= + &ch.dbg_trace_buffer.tb_buffer[CH_DBG_TRACE_BUFFER_SIZE]) + ch.dbg_trace_buffer.tb_ptr = &ch.dbg_trace_buffer.tb_buffer[0]; } #endif /* CH_DBG_ENABLE_TRACE */ -/*===========================================================================*/ -/* Panic related code and variables. */ -/*===========================================================================*/ - #if CH_DBG_ENABLED || defined(__DOXYGEN__) -/** - * @brief Pointer to the panic message. - * @details This pointer is meant to be accessed through the debugger, it is - * written once and then the system is halted. - */ -const char *dbg_panic_msg; - /** * @brief Prints a panic message on the console and then halts the system. * @@ -263,7 +252,7 @@ const char *dbg_panic_msg; */ void chDbgPanic(const char *msg) { - dbg_panic_msg = msg; + ch.dbg_panic_msg = msg; chSysHalt(); } #endif /* CH_DBG_ENABLED */ diff --git a/os/kernel/src/chdynamic.c b/os/kernel/src/chdynamic.c index 2b12e698f..86e37df14 100644 --- a/os/kernel/src/chdynamic.c +++ b/os/kernel/src/chdynamic.c @@ -156,10 +156,10 @@ thread_t *chThdCreateFromHeap(memory_heap_t *heapp, size_t size, #if CH_DBG_FILL_THREADS _thread_memfill((uint8_t *)wsp, (uint8_t *)wsp + sizeof(thread_t), - CH_THREAD_FILL_VALUE); + CH_DBG_THREAD_FILL_VALUE); _thread_memfill((uint8_t *)wsp + sizeof(thread_t), (uint8_t *)wsp + size, - CH_STACK_FILL_VALUE); + CH_DBG_STACK_FILL_VALUE); #endif chSysLock(); @@ -207,10 +207,10 @@ thread_t *chThdCreateFromMemoryPool(memory_pool_t *mp, tprio_t prio, #if CH_DBG_FILL_THREADS _thread_memfill((uint8_t *)wsp, (uint8_t *)wsp + sizeof(thread_t), - CH_THREAD_FILL_VALUE); + CH_DBG_THREAD_FILL_VALUE); _thread_memfill((uint8_t *)wsp + sizeof(thread_t), (uint8_t *)wsp + mp->mp_object_size, - CH_STACK_FILL_VALUE); + CH_DBG_STACK_FILL_VALUE); #endif chSysLock(); diff --git a/os/kernel/src/chthreads.c b/os/kernel/src/chthreads.c index ff6e5e597..a18e82005 100644 --- a/os/kernel/src/chthreads.c +++ b/os/kernel/src/chthreads.c @@ -212,10 +212,10 @@ thread_t *chThdCreateStatic(void *wsp, size_t size, #if CH_DBG_FILL_THREADS _thread_memfill((uint8_t *)wsp, (uint8_t *)wsp + sizeof(thread_t), - CH_THREAD_FILL_VALUE); + CH_DBG_THREAD_FILL_VALUE); _thread_memfill((uint8_t *)wsp + sizeof(thread_t), (uint8_t *)wsp + size, - CH_STACK_FILL_VALUE); + CH_DBG_STACK_FILL_VALUE); #endif chSysLock(); chSchWakeupS(tp = chThdCreateI(wsp, size, prio, pf, arg), RDY_OK);