#include <sys/types.h>
#include <stdint.h>
#include <sys/atom.h>
Data Structures | |
struct | _t_traceitem |
Item in the trace buffer. More... | |
Defines | |
#define | TRACE_ADD_ITEM(TAG, PC) |
#define | TRACE_ADD_ITEM_PC(TAG) TRACE_ADD_ITEM(TAG,NutTraceGetPC()) |
#define | TRACE_INT_FIRST 0 |
#define | TRACE_INT_LAST 9 |
#define | TRACE_INT_SUART_RX 9 |
#define | TRACE_INT_SUART_TIMER 8 |
#define | TRACE_INT_TIMER0_OVERFL 6 |
#define | TRACE_INT_TIMER1_OVERFL 7 |
#define | TRACE_INT_UART0_CTS 0 |
#define | TRACE_INT_UART0_RXCOMPL 1 |
#define | TRACE_INT_UART0_TXEMPTY 2 |
#define | TRACE_INT_UART1_CTS 3 |
#define | TRACE_INT_UART1_RXCOMPL 4 |
#define | TRACE_INT_UART1_TXEMPTY 5 |
#define | TRACE_MAX_USER 10 |
#define | TRACE_MODE_CIRCULAR 1 |
#define | TRACE_MODE_DEFAULT TRACE_MODE_CIRCULAR |
#define | TRACE_MODE_FIRST 0 |
#define | TRACE_MODE_LAST 2 |
#define | TRACE_MODE_OFF 0 |
#define | TRACE_MODE_ONESHOT 2 |
#define | TRACE_SIZE_DEFAULT 500 |
#define | TRACE_TAG_CRITICAL_ENTER 0 |
#define | TRACE_TAG_CRITICAL_EXIT 1 |
#define | TRACE_TAG_CRITICAL_FIRST 0 |
#define | TRACE_TAG_CRITICAL_LAST 1 |
#define | TRACE_TAG_FIRST 0 |
#define | TRACE_TAG_INTERRUPT_ENTER 6 |
#define | TRACE_TAG_INTERRUPT_EXIT 7 |
#define | TRACE_TAG_INTERRUPT_FIRST 6 |
#define | TRACE_TAG_INTERRUPT_LAST 7 |
#define | TRACE_TAG_LAST 10 |
#define | TRACE_TAG_START 8 |
#define | TRACE_TAG_STOP 9 |
#define | TRACE_TAG_THREAD_FIRST 2 |
#define | TRACE_TAG_THREAD_LAST 5 |
#define | TRACE_TAG_THREAD_SETPRIO 3 |
#define | TRACE_TAG_THREAD_SLEEP 5 |
#define | TRACE_TAG_THREAD_WAIT 4 |
#define | TRACE_TAG_THREAD_YIELD 2 |
#define | TRACE_TAG_USER 10 |
Typedefs | |
typedef _t_traceitem | t_traceitem |
Item in the trace buffer. | |
Functions | |
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) |
Variables | |
unsigned int | micros_high |
Upper 16 bits of microseconds clock, incremented on timer 1 overflow interrupts. | |
t_traceitem * | trace_current |
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. | |
t_traceitem * | trace_items |
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 TRACE_ADD_ITEM | ( | TAG, | |||
PC | ) |
Value:
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" \ ); \ }
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 |
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 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
|
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
|