nut/include/sys/tracer.h File Reference

Detailed Description

Trace functions.

Philipp Blum <>

#include <sys/types.h>
#include <stdint.h>
#include <sys/atom.h>

Data Structures

struct  _t_traceitem
 Item in the trace buffer. More...


#define TRACE_INT_FIRST   0
#define TRACE_INT_LAST   9
#define TRACE_INT_SUART_RX   9
#define TRACE_INT_UART0_CTS   0
#define TRACE_INT_UART1_CTS   3
#define TRACE_MAX_USER   10
#define TRACE_MODE_FIRST   0
#define TRACE_MODE_LAST   2
#define TRACE_MODE_OFF   0
#define TRACE_SIZE_DEFAULT   500
#define TRACE_TAG_FIRST   0
#define TRACE_TAG_LAST   10
#define TRACE_TAG_START   8
#define TRACE_TAG_STOP   9
#define TRACE_TAG_USER   10


typedef _t_traceitem t_traceitem
 Item in the trace buffer.


void NutTraceClear (void)
int NutTraceGetPC (void)
int NutTraceInit (int size, char mode)
void NutTraceMaskClear (int tag)
void NutTraceMaskPrint (void)
void NutTraceMaskSet (int tag)
void NutTracePrint (int size)
int NutTraceRegisterUserTag (int tag, char *tag_string)
void NutTraceStatusPrint (void)
void NutTraceStop (void)
void NutTraceTerminal (char *arg)


unsigned int micros_high
 Upper 16 bits of microseconds clock, incremented on timer 1 overflow interrupts.
 Pointer to the current item in the trace buffer.
int trace_head
 Current index in the trace buffer.
char trace_isfull
 Flag indicating whether all items in the trace buffer contain valid information.
 Trace buffer, initialized by NutTraceInit.
char trace_mask [TRACE_TAG_LAST+1]
 Mask to individually disable tracing of specific event types.
char trace_mode
 Current state of the tracing facility.
int trace_size
 Size of the trace buffer.

Define Documentation

PC   ) 


if ((trace_mode != TRACE_MODE_OFF) &&           \
        (trace_mask[TAG] == 1))                     \
    {                                               \
        asm volatile(                               \
            "in  __tmp_reg__, __SREG__" "\n\t"      \
            "push __tmp_reg__"  "\n\t"              \
            "cli"                       "\n\t"      \
        );                                          \
        trace_current = &trace_items[trace_head++]; \
        trace_current->tag = TAG;                   \
        trace_current->pc = PC;                     \
        trace_current->time_h = micros_high;        \
        trace_current->time_l = TCNT1;              \
        if (trace_head >= trace_size) {             \
            trace_isfull = 1;                       \
            trace_head = 0;                         \
            if (trace_mode == TRACE_MODE_ONESHOT)   \
                trace_mode = TRACE_MODE_OFF;        \
        }                                           \
        asm volatile(                               \
            "pop __tmp_reg__"           "\n\t"      \
            "out __SREG__, __tmp_reg__" "\n\t"      \
        );                                          \
Macro to insert an event in the trace buffer

TAG Type of event
PC Additional information, depending on the type of event

#define TRACE_ADD_ITEM_PC ( TAG   )     TRACE_ADD_ITEM(TAG,NutTraceGetPC())

Macro to insert an event in the trace buffer, filling the additional information field with the program counter (PC)

TAG Type of event

Function Documentation

void NutTraceClear ( void   ) 

Clears the trace buffer, but leaves trace_mode unaltered.

int NutTraceGetPC ( void   ) 

Returns the program counter (PC) of the instruction following NutGetPC The .map file of the application can be used to find the actual C Code

WARNING: Most likely only works on AVR. Works by inspecting the stack, thus the function breaks when local variables are introduced in NutGetPC

int Program counter

int NutTraceInit ( int  size,
char  mode 

Initializes the trace buffer and activates tracing. Starts timer 1 for microsecond clock, enables interrupt on overflow

size Number of items in the trace buffer
mode Mode of operation
  • TRACE_MODE_CIRCULAR Trace buffer wraps around when full
  • TRACE_MODE_ONESHOT Traceing is stopped when buffer is full
int Status

void NutTraceMaskClear ( int  tag  ) 

Disables tracing of a particular event type

tag of event to disable

void NutTraceMaskPrint ( void   ) 

Prints the current state of trace_mask, which for every type of event (TRACE_TAG_XXX) determines, whether they are inserted in the trace buffer or not.

void NutTraceMaskSet ( int  tag  ) 

Enables tracing of a particular event type

tag of event to enable

void NutTracePrint ( int  size  ) 

Prints the current contents of the trace buffer

size can be used to limit the number of printed items, if size==0, then all items of the buffer are printed

int NutTraceRegisterUserTag ( int  tag,
char *  tag_string 

Registers a user event type

tag of the new event type (e.g. define TRACE_USER_SEND 0)
tag_string name of the event type used when printing the trace buffer

void NutTraceStatusPrint ( void   ) 

Prints current status of tracing facility

void NutTraceStop ( void   ) 

Sets trace_mode to TRACE_MODE_OFF and thus stop tracing

void NutTraceTerminal ( char *  arg  ) 

Commands to manipulate the tracing facility

arg String containing the commands
  • print <size> calls NutPrintTrace
  • oneshot restarts tracing in the oneshot mode
  • circular restarts tracing in the ciruclar mode
  • size <size> restarts tracing in the current mode, using a buffer of length <size>
  • stop stops tracing

Generated on Wed Apr 29 11:12:30 2009 for BTnut System Software by doxygen 1.5.1