Cleanup debug module.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6120 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
c3dc5598c3
commit
649decd105
|
@ -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
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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_ */
|
||||
|
||||
/** @} */
|
||||
|
|
|
@ -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;
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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); \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue