Cleanup debug module.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6120 35acf78f-673a-0410-8e92-d51de3d6d3f4
master
gdisirio 2013-08-10 10:17:45 +00:00
parent c3dc5598c3
commit 649decd105
10 changed files with 213 additions and 184 deletions

View File

@ -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
/** @} */

View File

@ -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"

View File

@ -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_ */
/** @} */

View File

@ -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;
/*===========================================================================*/

View File

@ -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();
}

View File

@ -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); \

View File

@ -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

View File

@ -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 */

View File

@ -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();

View File

@ -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);