aboutsummaryrefslogtreecommitdiffstats
path: root/os/kernel
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-07-09 09:15:49 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-07-09 09:15:49 +0000
commitb38e1f2c96ca1940f210be9ec2de6eeb076f1a10 (patch)
treedcab0b9fdeefb08700af11750b0bee3c7f1292e2 /os/kernel
parenta53bc3d266cae5f72c30abed0aa884ade3723192 (diff)
downloadChibiOS-b38e1f2c96ca1940f210be9ec2de6eeb076f1a10.tar.gz
ChibiOS-b38e1f2c96ca1940f210be9ec2de6eeb076f1a10.tar.bz2
ChibiOS-b38e1f2c96ca1940f210be9ec2de6eeb076f1a10.zip
Improvements to the trace buffer and other debug features.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3139 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/kernel')
-rw-r--r--os/kernel/include/chdebug.h43
-rw-r--r--os/kernel/src/chdebug.c23
-rw-r--r--os/kernel/src/chthreads.c4
3 files changed, 33 insertions, 37 deletions
diff --git a/os/kernel/include/chdebug.h b/os/kernel/include/chdebug.h
index 471da5532..419ad001c 100644
--- a/os/kernel/include/chdebug.h
+++ b/os/kernel/include/chdebug.h
@@ -32,15 +32,15 @@
/**
* @brief Trace buffer entries.
*/
-#ifndef TRACE_BUFFER_SIZE
-#define TRACE_BUFFER_SIZE 64
+#ifndef CH_TRACE_BUFFER_SIZE
+#define CH_TRACE_BUFFER_SIZE 64
#endif
/**
* @brief Fill value for thread stack area in debug mode.
*/
-#ifndef STACK_FILL_VALUE
-#define STACK_FILL_VALUE 0x55
+#ifndef CH_STACK_FILL_VALUE
+#define CH_STACK_FILL_VALUE 0x55
#endif
/**
@@ -50,39 +50,34 @@
* a debugger. A uninitialized field is not an error in itself but it
* better to know it.
*/
-#ifndef THREAD_FILL_VALUE
-#define THREAD_FILL_VALUE 0xFF
+#ifndef CH_THREAD_FILL_VALUE
+#define CH_THREAD_FILL_VALUE 0xFF
#endif
+#define __QUOTE_THIS(p) #p
+
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
/**
* @brief Trace buffer record.
*/
typedef struct {
- void *cse_wtobjp; /**< @brief Object where going to
- sleep. */
- systime_t cse_time; /**< @brief Time of the switch
- event. */
- uint16_t cse_state: 4; /**< @brief Switched out thread
- state. */
- uint16_t cse_tid: 12; /**< @brief Switched in thread id. */
-} CtxSwcEvent;
+ systime_t se_time; /**< @brief Time of the switch event. */
+ Thread *se_tp; /**< @brief Switched in thread. */
+ void *se_wtobjp; /**< @brief Object where going to sleep.*/
+ uint8_t se_state; /**< @brief Switched out thread state. */
+} ch_swc_event_t;
/**
* @brief Trace buffer header.
*/
typedef struct {
- unsigned tb_size; /**< @brief Trace buffer size
- (entries). */
- CtxSwcEvent *tb_ptr; /**< @brief Pointer to the ring buffer
- front. */
+ unsigned tb_size; /**< @brief Trace buffer size (entries).*/
+ ch_swc_event_t *tb_ptr; /**< @brief Pointer to the buffer front.*/
/** @brief Ring buffer.*/
- CtxSwcEvent tb_buffer[TRACE_BUFFER_SIZE];
-} TraceBuffer;
+ ch_swc_event_t tb_buffer[CH_TRACE_BUFFER_SIZE];
+} ch_trace_buffer_t;
#endif /* CH_DBG_ENABLE_TRACE */
-#define __QUOTE_THIS(p) #p
-
#if CH_DBG_ENABLE_CHECKS || defined(__DOXYGEN__)
/**
* @brief Function parameter check.
@@ -150,12 +145,12 @@ typedef struct {
extern "C" {
#endif
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
- extern TraceBuffer trace_buffer;
+ extern ch_trace_buffer_t ch_dbg_trace_buffer;
void _trace_init(void);
void chDbgTrace(Thread *otp);
#endif
#if CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK
- extern char *panic_msg;
+ extern char *ch_dbg_panic_msg;
void chDbgPanic(char *msg);
#endif
#ifdef __cplusplus
diff --git a/os/kernel/src/chdebug.c b/os/kernel/src/chdebug.c
index 3c3c34c70..208ac2a69 100644
--- a/os/kernel/src/chdebug.c
+++ b/os/kernel/src/chdebug.c
@@ -40,7 +40,7 @@
/**
* @brief Public trace buffer.
*/
-TraceBuffer trace_buffer;
+ch_trace_buffer_t ch_dbg_trace_buffer;
/**
* @brief Trace circular buffer subsystem initialization.
@@ -48,8 +48,8 @@ TraceBuffer trace_buffer;
*/
void _trace_init(void) {
- trace_buffer.tb_size = TRACE_BUFFER_SIZE;
- trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0];
+ ch_dbg_trace_buffer.tb_size = CH_TRACE_BUFFER_SIZE;
+ ch_dbg_trace_buffer.tb_ptr = &ch_dbg_trace_buffer.tb_buffer[0];
}
/**
@@ -61,12 +61,13 @@ void _trace_init(void) {
*/
void chDbgTrace(Thread *otp) {
- trace_buffer.tb_ptr->cse_wtobjp = otp->p_u.wtobjp;
- trace_buffer.tb_ptr->cse_time = chTimeNow();
- trace_buffer.tb_ptr->cse_state = otp->p_state;
- trace_buffer.tb_ptr->cse_tid = (unsigned)currp >> 6;
- if (++trace_buffer.tb_ptr >= &trace_buffer.tb_buffer[TRACE_BUFFER_SIZE])
- trace_buffer.tb_ptr = &trace_buffer.tb_buffer[0];
+ ch_dbg_trace_buffer.tb_ptr->se_time = chTimeNow();
+ 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_TRACE_BUFFER_SIZE])
+ ch_dbg_trace_buffer.tb_ptr = &ch_dbg_trace_buffer.tb_buffer[0];
}
#endif /* CH_DBG_ENABLE_TRACE */
@@ -78,7 +79,7 @@ void chDbgTrace(Thread *otp) {
* written once and then the system is halted. This variable can be
* set to @p NULL if the halt is caused by a stack overflow.
*/
-char *panic_msg;
+char *ch_dbg_panic_msg;
/**
* @brief Prints a panic message on the console and then halts the system.
@@ -87,7 +88,7 @@ char *panic_msg;
*/
void chDbgPanic(char *msg) {
- panic_msg = msg;
+ ch_dbg_panic_msg = msg;
chSysHalt();
}
#endif /* CH_DBG_ENABLE_ASSERTS || CH_DBG_ENABLE_CHECKS || CH_DBG_ENABLE_STACK_CHECK */
diff --git a/os/kernel/src/chthreads.c b/os/kernel/src/chthreads.c
index 3d64eb993..b68263a7b 100644
--- a/os/kernel/src/chthreads.c
+++ b/os/kernel/src/chthreads.c
@@ -181,10 +181,10 @@ Thread *chThdCreateStatic(void *wsp, size_t size,
#if CH_DBG_FILL_THREADS
_thread_memfill((uint8_t *)wsp,
(uint8_t *)wsp + sizeof(Thread),
- THREAD_FILL_VALUE);
+ CH_THREAD_FILL_VALUE);
_thread_memfill((uint8_t *)wsp + sizeof(Thread),
(uint8_t *)wsp + size,
- STACK_FILL_VALUE);
+ CH_STACK_FILL_VALUE);
#endif
chSysLock();
chSchWakeupS(tp = chThdCreateI(wsp, size, prio, pf, arg), RDY_OK);