Trace configuration
Code 1. Trace configuration with static buffer and using PxSetTraceFunc on Core 0
/* Size of one element in trace circular buffer */
#define TRACE_ENTRY_SIZE 24
/* Calculate size of trace circular buffer */
#define TRACE_ARRAY_SIZE(x) ((x) * TRACE_ENTRY_SIZE)
/* Size of trace circular buffer */
#define TRACE_BUFFER_ENTRIES 500
#define TRACE_BUFFER_SIZE \
(TRACE_ARRAY_SIZE(TRACE_BUFFER_ENTRIES) + sizeof(PxAligned_t) - 1) / sizeof(PxAligned_t)
/* Circular buffer must be accessible by the kernel */
#pragma section ".CPU0.systemmemory" 8 awB
PxAligned_t traceBuffer_CPU0[TRACE_BUFFER_SIZE] PXMEM_ALIGNED;
#pragma section
...
/* Assign trace buffer */
PxError_t error = PxTraceAssignBuffer(traceBuffer_CPU0,
TRACE_BUFFER_ENTRIES,
TRACE_ENTRY_SIZE);
if (error != PXERR_NOERROR)
PxPanic();
/* Set trace function */
if (PxSetTraceFunc((PxTraceFunc_t) traceFunc) != PXERR_NOERROR )
PxPanic();
/* Trace only services from group SCHEDULING and USER services */
PxTraceCtrl(PXTraceSetGroupMask, (PxArg_t) (PXVT_SCHEDULING | PXVT_USER));
/* Start tracing */
PxTraceCtrl(PXTraceStart, (PxArg_t) 0); /* Argument not used */
Code 2. Trace configuration with dynamic buffer with using PxTraceCtrl
/* Size of one element in trace circular buffer */
#define TRACE_ENTRY_SIZE 24
/* Calculate size of trace circular buffer */
#define TRACE_ARRAY_SIZE(x) ((x) * TRACE_ENTRY_SIZE)
/* Size of trace circular buffer */
#define TRACE_BUFFER_ENTRIES 500
#define TRACE_BUFFER_SIZE \
(TRACE_ARRAY_SIZE(TRACE_BUFFER_ENTRIES) + sizeof(PxAligned_t) - 1) / sizeof(PxAligned_t)
...
/* Take a memory block for trace buffer */
traceBuffer = PxMcTakeBlk(PXMcSystemdefault, TRACE_ARRAY_SIZE(TRACE_BUFFER_ENTRIES));
if(!traceBuffer)
PxPanic();
/* Clear buffer */
PxBzero((PxUChar_t *)traceBuffer, TRACE_ARRAY_SIZE(TRACE_BUFFER_ENTRIES));
/* Assign trace buffer */
PxError_t error = PxTraceAssignBuffer(traceBuffer,
TRACE_BUFFER_ENTRIES,
TRACE_ENTRY_SIZE);
if (error != PXERR_NOERROR)
PxPanic();
/* Set trace function */
if (PxTraceCtrl(PXTraceSetTraceFunction, (PxArg_t) traceFunc) == -1)
PxPanic();
/* Trace only services from group SCHEDULING and USER services */
PxTraceCtrl(PXTraceSetGroupMask, (PxArg_t) (PXVT_SCHEDULING | PXVT_USER));
/* Start tracing */
PxTraceCtrl(PXTraceStart, (PxArg_t) 0); /* Argument not used */