aboutsummaryrefslogtreecommitdiffstats
path: root/os/kernel/include
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-08-10 10:17:45 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-08-10 10:17:45 +0000
commit649decd10516a30886d05f5afca3d425d836db0e (patch)
tree48e4aa7173da4f16764926738ba5518b03b4496b /os/kernel/include
parentc3dc5598c315f4650bfcd1e595104a2ace7aa87c (diff)
downloadChibiOS-649decd10516a30886d05f5afca3d425d836db0e.tar.gz
ChibiOS-649decd10516a30886d05f5afca3d425d836db0e.tar.bz2
ChibiOS-649decd10516a30886d05f5afca3d425d836db0e.zip
Cleanup debug module.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6120 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/kernel/include')
-rw-r--r--os/kernel/include/ch.h2
-rw-r--r--os/kernel/include/chdebug.h180
-rw-r--r--os/kernel/include/chglobal.h24
-rw-r--r--os/kernel/include/chsys.h20
4 files changed, 133 insertions, 93 deletions
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;
+#endif /* CH_DBG_ENABLE_TRACE */
+
+/*===========================================================================*/
+/* Module macros. */
+/*===========================================================================*/
-#if !defined(__DOXYGEN__)
-extern ch_trace_buffer_t dbg_trace_buffer;
+#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
-#endif /* CH_DBG_ENABLE_TRACE */
+/* 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
-#if !CH_DBG_ENABLE_TRACE
/* When the trace feature is disabled this function is replaced by an empty
macro.*/
-#define dbg_trace(otp)
+#if !CH_DBG_ENABLE_TRACE
+#define _dbg_trace(otp)
#endif
-/*===========================================================================*/
-/* Parameters checking related macros. */
-/*===========================================================================*/
+/* 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,23 +187,15 @@ 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
* specified message and halts.
@@ -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();
}