123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- /*
- ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio.
- This file is part of ChibiOS.
- ChibiOS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- ChibiOS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /**
- * @file chtrace.h
- * @brief Tracer macros and structures.
- *
- * @addtogroup trace
- * @{
- */
- #ifndef CHTRACE_H
- #define CHTRACE_H
- /*===========================================================================*/
- /* Module constants. */
- /*===========================================================================*/
- /**
- * @name Trace record types
- * @{
- */
- #define CH_TRACE_TYPE_UNUSED 0U
- #define CH_TRACE_TYPE_SWITCH 1U
- #define CH_TRACE_TYPE_ISR_ENTER 2U
- #define CH_TRACE_TYPE_ISR_LEAVE 3U
- #define CH_TRACE_TYPE_HALT 4U
- #define CH_TRACE_TYPE_USER 5U
- /** @} */
- /**
- * @name Events to trace
- * @{
- */
- #define CH_DBG_TRACE_MASK_DISABLED 255U
- #define CH_DBG_TRACE_MASK_NONE 0U
- #define CH_DBG_TRACE_MASK_SWITCH 1U
- #define CH_DBG_TRACE_MASK_ISR 2U
- #define CH_DBG_TRACE_MASK_HALT 4U
- #define CH_DBG_TRACE_MASK_USER 8U
- #define CH_DBG_TRACE_MASK_SLOW (CH_DBG_TRACE_MASK_SWITCH | \
- CH_DBG_TRACE_MASK_HALT | \
- CH_DBG_TRACE_MASK_USER)
- #define CH_DBG_TRACE_MASK_ALL (CH_DBG_TRACE_MASK_SWITCH | \
- CH_DBG_TRACE_MASK_ISR | \
- CH_DBG_TRACE_MASK_HALT | \
- CH_DBG_TRACE_MASK_USER)
- /** @} */
- /*===========================================================================*/
- /* Module pre-compile time settings. */
- /*===========================================================================*/
- /**
- * @name Debug related settings
- * @{
- */
- /**
- * @brief Trace buffer entries.
- */
- #if !defined(CH_DBG_TRACE_MASK) || defined(__DOXYGEN__)
- #define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
- #endif
- /**
- * @brief Trace buffer entries.
- * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
- * different from @p CH_DBG_TRACE_MASK_DISABLED.
- */
- #if !defined(CH_DBG_TRACE_BUFFER_SIZE) || defined(__DOXYGEN__)
- #define CH_DBG_TRACE_BUFFER_SIZE 128
- #endif
- /** @} */
- /*===========================================================================*/
- /* Derived constants and error checks. */
- /*===========================================================================*/
- /*===========================================================================*/
- /* Module data structures and types. */
- /*===========================================================================*/
- #if (CH_DBG_TRACE_MASK != CH_DBG_TRACE_MASK_DISABLED) || defined(__DOXYGEN__)
- /*lint -save -e46 [6.1] An uint32_t is required.*/
- /**
- * @brief Trace buffer record.
- */
- typedef struct {
- /**
- * @brief Record type.
- */
- uint32_t type:3;
- /**
- * @brief Switched out thread state.
- */
- uint32_t state:5;
- /**
- * @brief Accurate time stamp.
- * @note This field only available if the post supports
- * @p PORT_SUPPORTS_RT else it is set to zero.
- */
- uint32_t rtstamp:24;
- /**
- * @brief System time stamp of the switch event.
- */
- systime_t time;
- union {
- /**
- * @brief Structure representing a context switch.
- */
- struct {
- /**
- * @brief Switched in thread.
- */
- thread_t *ntp;
- /**
- * @brief Object where going to sleep.
- */
- void *wtobjp;
- } sw;
- /**
- * @brief Structure representing an ISR enter.
- */
- struct {
- /**
- * @brief ISR function name taken using @p __func__.
- */
- const char *name;
- } isr;
- /**
- * @brief Structure representing an halt.
- */
- struct {
- /**
- * @brief Halt error string.
- */
- const char *reason;
- } halt;
- /**
- * @brief User trace structure.
- */
- struct {
- /**
- * @brief Trace user parameter 1.
- */
- void *up1;
- /**
- * @brief Trace user parameter 2.
- */
- void *up2;
- } user;
- } u;
- } ch_trace_event_t;
- /*lint -restore*/
- /**
- * @brief Trace buffer header.
- */
- typedef struct {
- /**
- * @brief Suspended trace sources mask.
- */
- uint16_t suspended;
- /**
- * @brief Trace buffer size (entries).
- */
- uint16_t size;
- /**
- * @brief Pointer to the buffer front.
- */
- ch_trace_event_t *ptr;
- /**
- * @brief Ring buffer.
- */
- ch_trace_event_t buffer[CH_DBG_TRACE_BUFFER_SIZE];
- } ch_trace_buffer_t;
- #endif /* CH_DBG_TRACE_MASK != CH_DBG_TRACE_MASK_DISABLED */
- /*===========================================================================*/
- /* Module macros. */
- /*===========================================================================*/
- /* When a trace feature is disabled the associated functions are replaced by
- an empty macro. Note that the macros can be externally redefined in
- order to interface 3rd parties tracing tools.*/
- #if CH_DBG_TRACE_MASK == CH_DBG_TRACE_MASK_DISABLED
- #if !defined(_trace_init)
- #define _trace_init()
- #endif
- #if !defined(_trace_switch)
- #define _trace_switch(ntp, otp)
- #endif
- #if !defined(_trace_isr_enter)
- #define _trace_isr_enter(isr)
- #endif
- #if !defined(_trace_isr_leave)
- #define _trace_isr_leave(isr)
- #endif
- #if !defined(_trace_halt)
- #define _trace_halt(reason)
- #endif
- #if !defined(chDbgWriteTraceI)
- #define chDbgWriteTraceI(up1, up2)
- #endif
- #if !defined(chDbgWriteTrace)
- #define chDbgWriteTrace(up1, up2)
- #endif
- #endif /* CH_DBG_TRACE_MASK == CH_DBG_TRACE_MASK_DISABLED */
- /*===========================================================================*/
- /* External declarations. */
- /*===========================================================================*/
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if (CH_DBG_TRACE_MASK != CH_DBG_TRACE_MASK_DISABLED) || defined(__DOXYGEN__)
- void _trace_init(void);
- void _trace_switch(thread_t *ntp, thread_t *otp);
- void _trace_isr_enter(const char *isr);
- void _trace_isr_leave(const char *isr);
- void _trace_halt(const char *reason);
- void chDbgWriteTraceI(void *up1, void *up2);
- void chDbgWriteTrace(void *up1, void *up2);
- void chDbgSuspendTraceI(uint16_t mask);
- void chDbgSuspendTrace(uint16_t mask);
- void chDbgResumeTraceI(uint16_t mask);
- void chDbgResumeTrace(uint16_t mask);
- #endif /* CH_DBG_TRACE_MASK != CH_DBG_TRACE_MASK_DISABLED */
- #ifdef __cplusplus
- }
- #endif
- /*===========================================================================*/
- /* Module inline functions. */
- /*===========================================================================*/
- #endif /* CHTRACE_H */
- /** @} */
|