in AVR_Dx_Atmel_Studio/RTOSDemo/TraceRecorder/trcSnapshotRecorder.c [2111:2230]
void prvTraceInitTraceData()
{
if (RecorderDataPtr == NULL)
{
#if (TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_STATIC)
RecorderDataPtr = &RecorderData;
#elif (TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC)
RecorderDataPtr = (RecorderDataType*)TRACE_MALLOC(sizeof(RecorderDataType));
if (! RecorderDataPtr)
{
prvTraceError("Failed allocating recorder buffer!");
return;
}
#elif (TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM)
if (! RecorderDataPtr)
{
prvTraceError("Recorder data pointer not set! Use vTraceSetRecorderDataBuffer().");
return;
}
#endif
}
else
{
if (RecorderDataPtr->startmarker0 == 1)
{
/* Already initialized */
return;
}
}
init_hwtc_count = TRC_HWTC_COUNT;
(void)memset(RecorderDataPtr, 0, sizeof(RecorderDataType));
RecorderDataPtr->version = TRACE_KERNEL_VERSION;
RecorderDataPtr->minor_version = TRACE_MINOR_VERSION;
RecorderDataPtr->irq_priority_order = TRC_IRQ_PRIORITY_ORDER;
RecorderDataPtr->filesize = sizeof(RecorderDataType);
RecorderDataPtr->maxEvents = (TRC_CFG_EVENT_BUFFER_SIZE);
RecorderDataPtr->debugMarker0 = (int32_t) 0xF0F0F0F0;
RecorderDataPtr->isUsing16bitHandles = TRC_CFG_USE_16BIT_OBJECT_HANDLES;
RecorderDataPtr->isrTailchainingThreshold = TRC_CFG_ISR_TAILCHAINING_THRESHOLD;
/* This function is kernel specific */
vTraceInitObjectPropertyTable();
RecorderDataPtr->debugMarker1 = (int32_t)0xF1F1F1F1;
RecorderDataPtr->SymbolTable.symTableSize = (TRC_CFG_SYMBOL_TABLE_SIZE);
RecorderDataPtr->SymbolTable.nextFreeSymbolIndex = 1;
#if (TRC_CFG_INCLUDE_FLOAT_SUPPORT == 1)
RecorderDataPtr->exampleFloatEncoding = 1.0f; /* otherwise already zero */
#endif
RecorderDataPtr->debugMarker2 = (int32_t)0xF2F2F2F2;
prvStrncpy(RecorderDataPtr->systemInfo, "Trace Recorder Demo", 80);
RecorderDataPtr->debugMarker3 = (int32_t)0xF3F3F3F3;
RecorderDataPtr->endmarker0 = 0x0A;
RecorderDataPtr->endmarker1 = 0x0B;
RecorderDataPtr->endmarker2 = 0x0C;
RecorderDataPtr->endmarker3 = 0x0D;
RecorderDataPtr->endmarker4 = 0x71;
RecorderDataPtr->endmarker5 = 0x72;
RecorderDataPtr->endmarker6 = 0x73;
RecorderDataPtr->endmarker7 = 0x74;
RecorderDataPtr->endmarker8 = 0xF1;
RecorderDataPtr->endmarker9 = 0xF2;
RecorderDataPtr->endmarker10 = 0xF3;
RecorderDataPtr->endmarker11 = 0xF4;
#if TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER
RecorderDataPtr->userEventBuffer.bufferID = 1;
RecorderDataPtr->userEventBuffer.version = 0;
RecorderDataPtr->userEventBuffer.numberOfSlots = (TRC_CFG_SEPARATE_USER_EVENT_BUFFER_SIZE);
RecorderDataPtr->userEventBuffer.numberOfChannels = (TRC_CFG_UB_CHANNELS) + 1;
#endif
/* Kernel specific initialization of the objectHandleStacks variable */
vTraceInitObjectHandleStack();
/* Finally, the 12-byte "start markers" are initialized, allowing for
Tracealyzer to find the trace data in a larger RAM dump.
The start and end markers must be unique, but without proper precautions there
might be a risk of accidental duplicates of the start/end markers, e.g., due to
compiler optimizations.
The below initialization of the start marker is therefore made in reverse order
and the fields are volatile to ensure this assignment order. This to avoid any
chance of accidental duplicates of this elsewhere in memory.
Moreover, the fields are set byte-by-byte to avoid endian issues.*/
RecorderDataPtr->startmarker11 = 0xF4;
RecorderDataPtr->startmarker10 = 0xF3;
RecorderDataPtr->startmarker9 = 0xF2;
RecorderDataPtr->startmarker8 = 0xF1;
RecorderDataPtr->startmarker7 = 0x74;
RecorderDataPtr->startmarker6 = 0x73;
RecorderDataPtr->startmarker5 = 0x72;
RecorderDataPtr->startmarker4 = 0x71;
RecorderDataPtr->startmarker3 = 0x04;
RecorderDataPtr->startmarker2 = 0x03;
RecorderDataPtr->startmarker1 = 0x02;
RecorderDataPtr->startmarker0 = 0x01;
if (traceErrorMessage != NULL)
{
// An error was detected before vTraceEnable was called, make sure this is stored in the trace data.
prvStrncpy(RecorderDataPtr->systemInfo, traceErrorMessage, 80);
RecorderDataPtr->internalErrorOccured = 1;
vTraceStop();
}
#ifdef TRC_PORT_SPECIFIC_INIT
TRC_PORT_SPECIFIC_INIT();
#endif
}