Trace functions.
More...
#include <sys/types.h>
#include <stdint.h>
#include <sys/atom.h>
Go to the source code of this file.
Detailed Description
Trace functions.
- Author:
- Philipp Blum <blum@tik.ee.ethz.ch>
- Date:
- 22.12.2004
Define Documentation
#define TRACE_MODE_FIRST 0 |
#define TRACE_MODE_CIRCULAR 1 |
#define TRACE_MODE_ONESHOT 2 |
#define TRACE_MODE_LAST 2 |
#define TRACE_MODE_DEFAULT TRACE_MODE_CIRCULAR |
#define TRACE_SIZE_DEFAULT 500 |
#define TRACE_TAG_FIRST 0 |
#define TRACE_TAG_CRITICAL_FIRST 0 |
#define TRACE_TAG_CRITICAL_ENTER 0 |
#define TRACE_TAG_CRITICAL_EXIT 1 |
#define TRACE_TAG_CRITICAL_LAST 1 |
#define TRACE_TAG_THREAD_FIRST 2 |
#define TRACE_TAG_THREAD_YIELD 2 |
#define TRACE_TAG_THREAD_SETPRIO 3 |
#define TRACE_TAG_THREAD_WAIT 4 |
#define TRACE_TAG_THREAD_SLEEP 5 |
#define TRACE_TAG_THREAD_LAST 5 |
#define TRACE_TAG_INTERRUPT_FIRST 6 |
#define TRACE_TAG_INTERRUPT_ENTER 6 |
#define TRACE_TAG_INTERRUPT_EXIT 7 |
#define TRACE_TAG_INTERRUPT_LAST 7 |
#define TRACE_TAG_START 8 |
#define TRACE_TAG_USER 10 |
#define TRACE_TAG_LAST 10 |
#define TRACE_MAX_USER 10 |
#define TRACE_INT_FIRST 0 |
#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_INT_TIMER0_OVERFL 6 |
#define TRACE_INT_TIMER1_OVERFL 7 |
#define TRACE_INT_SUART_TIMER 8 |
#define TRACE_INT_SUART_RX 9 |
#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" \
); \
}
Macro to insert an event in the trace buffer
- Parameters:
-
TAG | Type of event |
PC | Additional information, depending on the type of event |
Referenced by NutEventWait(), NutSleep(), NutThreadResume(), and NutThreadSetPriority().
#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)
- Parameters:
-
Typedef Documentation
Item in the trace buffer.
Function Documentation
int NutTraceInit |
( |
int |
size, |
|
|
char |
mode |
|
) |
| |
Initializes the trace buffer and activates tracing. Starts timer 1 for microsecond clock, enables interrupt on overflow
- Parameters:
-
size | Number of items in the trace buffer |
mode | Mode of operation
|
- Returns:
- int Status
void NutTraceStop |
( |
void |
| ) |
|
void NutTracePrint |
( |
int |
size | ) |
|
Prints the current contents of the trace buffer
- Parameters:
-
size | can be used to limit the number of printed items, if size==0, then all items of the buffer are printed |
void NutTraceTerminal |
( |
char * |
arg | ) |
|
Commands to manipulate the tracing facility
- Parameters:
-
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
|
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
- Returns:
- int Program counter
void NutTraceClear |
( |
void |
| ) |
|
Clears the trace buffer, but leaves trace_mode unaltered.
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 NutTraceMaskClear |
( |
int |
tag | ) |
|
Disables tracing of a particular event type
- Parameters:
-
void NutTraceMaskSet |
( |
int |
tag | ) |
|
Enables tracing of a particular event type
- Parameters:
-
void NutTraceStatusPrint |
( |
void |
| ) |
|
Prints current status of tracing facility
int NutTraceRegisterUserTag |
( |
int |
tag, |
|
|
char * |
tag_string |
|
) |
| |
Registers a user event type
- Parameters:
-
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 |
Variable Documentation
Upper 16 bits of microseconds clock, incremented on timer 1 overflow interrupts.
Trace buffer, initialized by NutTraceInit.
Pointer to the current item in the trace buffer.
Current index in the trace buffer.
Size of the trace buffer.
Flag indicating whether all items in the trace buffer contain valid information.
Current state of the tracing facility.
Mask to individually disable tracing of specific event types.