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 */