29#define TRC_ACKNOWLEDGED (0xABC99123)
31#include <trcDefines.h>
33#include <trcKernelPortConfig.h>
39#ifndef TRC_CFG_RECORDER_MODE
40#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING
46#ifndef TRC_CFG_TEST_MODE
47#define TRC_CFG_TEST_MODE 0
50#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_SNAPSHOT)
51#include <trcSnapshotConfig.h>
52#include <trcKernelPortSnapshotConfig.h>
56#define TRC_ASSERT_VOID(_assert, _err) if (! (_assert)){ prvTraceError(_err); return; }
60#define TRC_ASSERT_RET(_assert, _err, _return) if (! (_assert)){ prvTraceError(_err); return _return; }
62typedef uint8_t traceUBChannel;
63typedef uint8_t traceObjectClass;
66#if (TRC_CFG_USE_16BIT_OBJECT_HANDLES == 1)
67typedef uint16_t traceHandle;
69typedef uint8_t traceHandle;
72#undef TraceISRHandle_t
73#define TraceISRHandle_t traceHandle
75#include <trcHardwarePort.h>
76#include <trcKernelPort.h>
79#define xTracePrintFormat0(_c, _f)
80#define xTracePrintFormat1(_c, _f, _p1)
81#define xTracePrintFormat2(_c, _f, _p1, _p2)
82#define xTracePrintFormat3(_c, _f, _p1, _p2, _p3)
83#define xTracePrintFormat4(_c, _f, _p1, _p2, _p3, _p4)
84#define vTraceConsoleChannelPrintF(fmt, ...) (void)
85#define xTraceConsoleChannelPrintF(fmt, ...) (void)
86#define prvTraceStoreEvent_None(...)
87#define prvTraceStoreEvent_Handle(...)
88#define prvTraceStoreEvent_Param(...)
89#define prvTraceStoreEvent_HandleParam(...)
90#define prvTraceStoreEvent_ParamParam(...)
91#define prvTraceStoreEvent_HandleParamParam(...)
92#define prvTraceStoreEvent_ParamParamParam(...)
96#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
97#include <trcStreamingConfig.h>
98#include <trcKernelPortStreamingConfig.h>
101#ifndef TRC_CFG_CORE_COUNT
102#define TRC_CFG_CORE_COUNT 1
106#ifndef TRC_CFG_GET_CURRENT_CORE
107#define TRC_CFG_GET_CURRENT_CORE() 0
112#ifndef TRC_CFG_USE_GCC_STATEMENT_EXPR
113#define TRC_CFG_USE_GCC_STATEMENT_EXPR 0
118#define traceHandle TraceISRHandle_t
121#define TRC_MAX_BLOB_SIZE (16UL * sizeof(TraceUnsignedBaseType_t))
124#define TRC_PLATFORM_CFG_LENGTH 8UL
127#define TRC_HEADER_BUFFER_SIZE (sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint8_t) + sizeof(uint8_t) + (sizeof(char) * (TRC_PLATFORM_CFG_LENGTH)))
129typedef struct TraceHeaderBuffer
131 uint8_t buffer[TRC_HEADER_BUFFER_SIZE];
132} TraceHeaderBuffer_t;
134#include <trcHardwarePort.h>
135#include <trcKernelPort.h>
144#include <trcStreamPort.h>
151#include <trcUtility.h>
166#if (TRC_USE_TRACEALYZER_RECORDER == 1)
259traceResult xTraceEnable(uint32_t uiStartOption);
342#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_SNAPSHOT)
351#define TRACE_GET_LOW16(value) ((uint16_t)((value) & 0x0000FFFF))
358#define TRACE_GET_HIGH16(value) ((uint16_t)(((value) >> 16) & 0x0000FFFF))
366#define TRACE_SET_LOW16(current, value) (((current) & 0xFFFF0000) | (value))
374#define TRACE_SET_HIGH16(current, value) (((current) & 0x0000FFFF) | (((uint32_t)(value)) << 16))
376#if defined (TRC_CFG_ENABLE_STACK_MONITOR) && (TRC_CFG_ENABLE_STACK_MONITOR == 1) && (TRC_CFG_SCHEDULING_ONLY == 0)
398#define prvAddTaskToStackMonitor(task)
399#define prvRemoveTaskFromStackMonitor(task)
400#define prvReportStackUsage()
407traceHandle xTraceSetISRProperties(
const char* szName, uint8_t uiPriority);
427traceResult
xTraceISRRegister(
const char* szName, uint32_t uiPriority, TraceISRHandle_t* pxISRHandle);
455#define vTraceStoreISRBegin(__handle) (void)xTraceISRBegin((TraceISRHandle_t)(__handle))
486#define vTraceStoreISREnd(__pendingISR) (void)xTraceISREnd(__pendingISR)
554#if (TRC_CFG_SCHEDULING_ONLY == 0) && (TRC_CFG_INCLUDE_USER_EVENTS == 1)
633traceResult
xTracePrintF(TraceStringHandle_t chn,
const char* fmt, ...);
635#define xTracePrintF(chn, fmt, ...) ((void)(chn), (void)(fmt), TRC_SUCCESS)
638#if (TRC_CFG_SCHEDULING_ONLY == 0) && (TRC_CFG_INCLUDE_USER_EVENTS == 1)
652traceResult
xTraceVPrintF(TraceStringHandle_t eventLabel,
const char* formatStr, va_list vl);
654#define xTraceVPrintF(chn, formatStr, vl) ((void)(chn), (void)(formatStr), (void)(vl), TRC_SUCCESS)
657#if (TRC_CFG_SCHEDULING_ONLY == 0) && (TRC_CFG_INCLUDE_USER_EVENTS == 1)
674traceResult
xTracePrint(TraceStringHandle_t chn,
const char* str);
676#define xTracePrint(chn, str) ((void)(chn), (void)(str), TRC_SUCCESS)
715#ifndef TRC_CFG_INCLUDE_OBJECT_DELETE
716#define TRC_CFG_INCLUDE_OBJECT_DELETE 0
719#ifndef TRC_CFG_INCLUDE_READY_EVENTS
720#define TRC_CFG_INCLUDE_READY_EVENTS 1
723#ifndef TRC_CFG_INCLUDE_OSTICK_EVENTS
724#define TRC_CFG_INCLUDE_OSTICK_EVENTS 0
728#undef trcKERNEL_HOOKS_TASK_CREATE
729#define trcKERNEL_HOOKS_TASK_CREATE(SERVICE, CLASS, pxTCB) \
732 TRACE_SET_OBJECT_NUMBER(TASK, pxTCB); \
733 TRACE_SET_OBJECT_FILTER(TASK, pxTCB, CurrentFilterGroup); \
734 prvTraceSetObjectName(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_GET_TASK_NAME(pxTCB)); \
735 prvTraceSetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_GET_TASK_PRIORITY(pxTCB)); \
736 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
737 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
738 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); \
743 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
745 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, 0); \
750#undef trcKERNEL_HOOKS_TASK_DELETE
751#define trcKERNEL_HOOKS_TASK_DELETE(SERVICE, SERVICE_NAME, SERVICE_PROP, pxTCB) \
752 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
753 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
754 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); \
755 prvTraceStoreObjectNameOnCloseEvent(SERVICE_NAME, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_CLASS_TASK); \
756 prvTraceStoreObjectPropertiesOnCloseEvent(SERVICE_PROP, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_CLASS_TASK); \
757 prvTraceSetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TRACE_GET_TASK_PRIORITY(pxTCB)); \
758 prvTraceSetObjectState(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), TASK_STATE_INSTANCE_NOT_ACTIVE); \
759 prvTraceFreeObjectHandle(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB));
763#undef trcKERNEL_HOOKS_OBJECT_CREATE
764#define trcKERNEL_HOOKS_OBJECT_CREATE(SERVICE, CLASS, pxObject) \
765 TRACE_SET_OBJECT_NUMBER(CLASS, pxObject); \
766 TRACE_SET_OBJECT_FILTER(CLASS, pxObject, CurrentFilterGroup); \
767 prvMarkObjectAsUsed(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject));\
768 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
769 if (TRACE_GET_OBJECT_FILTER(CLASS, pxObject) & CurrentFilterMask) \
770 prvTraceStoreKernelCall(SERVICE, TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject)); \
771 prvTraceSetObjectState(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), 0);
774#undef trcKERNEL_HOOKS_OBJECT_CREATE_FAILED
775#define trcKERNEL_HOOKS_OBJECT_CREATE_FAILED(SERVICE, TRACE_CLASS)\
776 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
778 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS, 0); \
782#undef trcKERNEL_HOOKS_OBJECT_DELETE
783#define trcKERNEL_HOOKS_OBJECT_DELETE(SERVICE, SERVICE_NAME, SERVICE_PROP, CLASS, pxObject) \
784 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
785 if (TRACE_GET_OBJECT_FILTER(CLASS, pxObject) & CurrentFilterMask) \
786 prvTraceStoreKernelCall(SERVICE, TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject)); \
787 prvTraceStoreObjectNameOnCloseEvent(SERVICE_NAME, TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject)); \
788 prvTraceStoreObjectPropertiesOnCloseEvent(SERVICE_PROP, TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject)); \
789 prvTraceFreeObjectHandle(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject));
792#undef trcKERNEL_HOOKS_KERNEL_SERVICE
793#define trcKERNEL_HOOKS_KERNEL_SERVICE(SERVICE, CLASS, pxObject) \
794 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
795 if (TRACE_GET_OBJECT_FILTER(CLASS, pxObject) & CurrentFilterMask) \
796 prvTraceStoreKernelCall(SERVICE, TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject));
799#undef trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT
800#define trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT(SERVICE, TRACECLASS) \
801 if (TRACE_GET_TASK_FILTER(TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
802 prvTraceStoreKernelCall(SERVICE, TRACECLASS, 0);
805#undef trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_PARAM
806#define trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_PARAM(SERVICE, CLASS, pxObject, param) \
807 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
808 if (TRACE_GET_OBJECT_FILTER(CLASS, pxObject) & CurrentFilterMask) \
809 prvTraceStoreKernelCallWithParam(SERVICE, TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), (uint32_t)param);
812#undef trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT_WITH_PARAM
813#define trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT_WITH_PARAM(SERVICE, TRACECLASS, param) \
814 if (TRACE_GET_TASK_FILTER(TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
815 prvTraceStoreKernelCallWithParam(SERVICE, TRACECLASS, 0, param);
818#undef trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_NUMERIC_PARAM_ONLY
819#define trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_NUMERIC_PARAM_ONLY(SERVICE, param) \
820 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
821 prvTraceStoreKernelCallWithNumericParamOnly(SERVICE, (uint32_t)param);
824#undef trcKERNEL_HOOKS_KERNEL_SERVICE_FROM_ISR
825#define trcKERNEL_HOOKS_KERNEL_SERVICE_FROM_ISR(SERVICE, CLASS, pxObject) \
826 if (TRACE_GET_OBJECT_FILTER(CLASS, pxObject) & CurrentFilterMask) \
827 prvTraceStoreKernelCall(SERVICE, TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject));
830#undef trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT_FROM_ISR
831#define trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT_FROM_ISR(SERVICE, TRACECLASS) \
832 prvTraceStoreKernelCall(SERVICE, TRACECLASS, 0);
835#undef trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_PARAM_FROM_ISR
836#define trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_PARAM_FROM_ISR(SERVICE, CLASS, pxObject, param) \
837 if (TRACE_GET_OBJECT_FILTER(CLASS, pxObject) & CurrentFilterMask) \
838 prvTraceStoreKernelCallWithParam(SERVICE, TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), (uint32_t)param);
841#undef trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT_WITH_PARAM_FROM_ISR
842#define trcKERNEL_HOOKS_KERNEL_SERVICE_NULL_OBJECT_WITH_PARAM_FROM_ISR(SERVICE, TRACECLASS, param) \
843 prvTraceStoreKernelCallWithParam(SERVICE, TRACECLASS, 0, param);
846#undef trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_NUMERIC_PARAM_ONLY_FROM_ISR
847#define trcKERNEL_HOOKS_KERNEL_SERVICE_WITH_NUMERIC_PARAM_ONLY_FROM_ISR(SERVICE, param) \
848 prvTraceStoreKernelCallWithNumericParamOnly(SERVICE, (uint32_t)param);
851#undef trcKERNEL_HOOKS_SET_OBJECT_STATE
852#define trcKERNEL_HOOKS_SET_OBJECT_STATE(CLASS, pxObject, STATE) \
853 prvTraceSetObjectState(TRACE_GET_OBJECT_TRACE_CLASS(CLASS, pxObject), TRACE_GET_OBJECT_NUMBER(CLASS, pxObject), (uint8_t)STATE);
856#undef trcKERNEL_HOOKS_SET_TASK_INSTANCE_FINISHED
857#define trcKERNEL_HOOKS_SET_TASK_INSTANCE_FINISHED() \
858 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
859 prvTraceSetTaskInstanceFinished(TRACE_GET_TASK_NUMBER(TRACE_GET_CURRENT_TASK()));
861#if (TRC_CFG_INCLUDE_READY_EVENTS == 1)
863#undef trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE
864#define trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE(pxTCB) \
865 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
866 prvTraceStoreTaskReady(TRACE_GET_TASK_NUMBER(pxTCB));
868#undef trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE
869#define trcKERNEL_HOOKS_MOVED_TASK_TO_READY_STATE(pxTCB)
873#undef trcKERNEL_HOOKS_INCREMENT_TICK
874#define trcKERNEL_HOOKS_INCREMENT_TICK() \
876 extern uint32_t uiTraceTickCount; \
877 uiTraceTickCount++; \
878 prvTracePortGetTimeStamp(0); \
881#if (TRC_CFG_INCLUDE_OSTICK_EVENTS == 1)
883#undef trcKERNEL_HOOKS_NEW_TIME
884#define trcKERNEL_HOOKS_NEW_TIME(SERVICE, xValue) \
885 prvTraceStoreKernelCallWithNumericParamOnly(SERVICE, xValue);
887#undef trcKERNEL_HOOKS_NEW_TIME
888#define trcKERNEL_HOOKS_NEW_TIME(SERVICE, xValue)
892#undef trcKERNEL_HOOKS_TASK_SWITCH
893#define trcKERNEL_HOOKS_TASK_SWITCH( pxTCB ) \
894 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
895 prvTraceStoreTaskswitch(TRACE_GET_TASK_NUMBER(pxTCB));
898#undef trcKERNEL_HOOKS_TASK_SUSPEND
899#define trcKERNEL_HOOKS_TASK_SUSPEND(SERVICE, pxTCB) \
900 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
901 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
902 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)); \
903 prvTraceSetTaskInstanceFinished((uint8_t)TRACE_GET_TASK_NUMBER(pxTCB));
906#undef trcKERNEL_HOOKS_TASK_DELAY
907#define trcKERNEL_HOOKS_TASK_DELAY(SERVICE, pxTCB, xValue) \
908 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
910 prvTraceStoreKernelCallWithNumericParamOnly(SERVICE, xValue); \
911 prvTraceSetTaskInstanceFinished((uint8_t)TRACE_GET_TASK_NUMBER(pxTCB)); \
915#undef trcKERNEL_HOOKS_TASK_PRIORITY_CHANGE
916#define trcKERNEL_HOOKS_TASK_PRIORITY_CHANGE(SERVICE, pxTCB, uxNewPriority) \
917 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
919 prvTraceStoreKernelCallWithParam(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), prvTraceGetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB)));\
920 prvTraceSetPriorityProperty(TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB), (uint8_t)uxNewPriority); \
924#undef trcKERNEL_HOOKS_TASK_RESUME
925#define trcKERNEL_HOOKS_TASK_RESUME(SERVICE, pxTCB) \
926 if (TRACE_GET_OBJECT_FILTER(TASK, TRACE_GET_CURRENT_TASK()) & CurrentFilterMask) \
927 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
928 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB));
931#undef trcKERNEL_HOOKS_TASK_RESUME_FROM_ISR
932#define trcKERNEL_HOOKS_TASK_RESUME_FROM_ISR(SERVICE, pxTCB) \
933 if (TRACE_GET_OBJECT_FILTER(TASK, pxTCB) & CurrentFilterMask) \
934 prvTraceStoreKernelCall(SERVICE, TRACE_CLASS_TASK, TRACE_GET_TASK_NUMBER(pxTCB));
936#if !defined TRC_CFG_INCLUDE_READY_EVENTS || TRC_CFG_INCLUDE_READY_EVENTS == 1
951#define prvTraceSetReadyEventsEnabled(status) (void)status;
968#if (TRC_CFG_SCHEDULING_ONLY == 0)
996 uint32_t objectNumber, uint32_t param);
999#define prvTraceStoreKernelCall(eventcode, objectClass, byteParam) {}
1000#define prvTraceStoreKernelCallWithNumericParamOnly(evtcode, param) {}
1001#define prvTraceStoreKernelCallWithParam(evtcode, objectClass, objectNumber, param) {}
1056 traceObjectClass objectclass);
1066 traceObjectClass objectclass);
1069#define TASK_STATE_INSTANCE_NOT_ACTIVE 0
1070#define TASK_STATE_INSTANCE_ACTIVE 1
1073#if (TRC_CFG_INCLUDE_ISR_TRACING == 0)
1075#undef vTraceSetISRProperties
1076#define vTraceSetISRProperties(handle, name, priority) (void)(handle), (void)(name), (void)(priority)
1078#undef vTraceStoreISRBegin
1079#define vTraceStoreISRBegin(x) (void)(x)
1081#undef vTraceStoreISREnd
1082#define vTraceStoreISREnd(x) (void)(x)
1084#undef xTraceSetISRProperties
1085#define xTraceSetISRProperties(name, priority) ((void)(name), (void)(priority), (traceHandle)0)
1112#if (TRC_CFG_SCHEDULING_ONLY == 1)
1113#undef TRC_CFG_INCLUDE_USER_EVENTS
1114#define TRC_CFG_INCLUDE_USER_EVENTS 0
1117#if ((TRC_CFG_INCLUDE_USER_EVENTS == 1) && (TRC_CFG_SCHEDULING_ONLY == 0)) && (TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER == 1)
1127traceUBChannel xTraceRegisterUBChannel(TraceStringHandle_t channel, TraceStringHandle_t formatStr);
1135void vTraceUBData(traceUBChannel channel, ...);
1142void vTraceUBEvent(traceUBChannel channel);
1144#define xTraceRegisterChannelFormat(eventLabel, formatStr) ((void)(eventLabel), (void)(formatStr), 0)
1145#define vTraceUBData(label, ...) (void)(label)
1148#define NEventCodes 0x100
1151#define trcCRITICAL_SECTION_BEGIN() {TRACE_ENTER_CRITICAL_SECTION(); recorder_busy++;}
1152#define trcCRITICAL_SECTION_END() {recorder_busy--; TRACE_EXIT_CRITICAL_SECTION();}
1154#if (TRC_CFG_HARDWARE_PORT == TRC_HARDWARE_PORT_ARM_Cortex_M)
1155 #define trcSR_ALLOC_CRITICAL_SECTION_ON_CORTEX_M_ONLY TRACE_ALLOC_CRITICAL_SECTION
1156 #define trcCRITICAL_SECTION_BEGIN_ON_CORTEX_M_ONLY trcCRITICAL_SECTION_BEGIN
1157 #define trcCRITICAL_SECTION_END_ON_CORTEX_M_ONLY trcCRITICAL_SECTION_END
1159 #define trcSR_ALLOC_CRITICAL_SECTION_ON_CORTEX_M_ONLY() {}
1160 #define trcCRITICAL_SECTION_BEGIN_ON_CORTEX_M_ONLY() recorder_busy++;
1161 #define trcCRITICAL_SECTION_END_ON_CORTEX_M_ONLY() recorder_busy--;
1190 uint16_t indexOfNextAvailableHandle[ TRACE_NCLASSES ];
1191 uint16_t lowestIndexOfClass[ TRACE_NCLASSES ];
1192 uint16_t highestIndexOfClass[ TRACE_NCLASSES ];
1193 uint16_t handleCountWaterMarksOfClass[ TRACE_NCLASSES ];
1194 traceHandle objectHandles[ TRACE_KERNEL_OBJECT_COUNT ];
1219 uint32_t NumberOfObjectClasses;
1220 uint32_t ObjectPropertyTableSizeInBytes;
1224#if (TRC_CFG_USE_16BIT_OBJECT_HANDLES == 1)
1225 traceHandle NumberOfObjectsPerClass[2*((TRACE_NCLASSES+1)/2)];
1227 traceHandle NumberOfObjectsPerClass[4*((TRACE_NCLASSES+3)/4)];
1230 uint8_t NameLengthPerClass[ 4*((TRACE_NCLASSES+3)/4) ];
1233 uint8_t TotalPropertyBytesPerClass[ 4*((TRACE_NCLASSES+3)/4) ];
1236 uint16_t StartIndexOfClass[ 2*((TRACE_NCLASSES+1)/2) ];
1239 uint8_t objbytes[ 4*((TRACE_OBJECT_TABLE_SIZE+3)/4) ];
1248 uint32_t symTableSize;
1251 uint32_t nextFreeSymbolIndex;
1254 uint8_t symbytes[4*(((TRC_CFG_SYMBOL_TABLE_SIZE)+3)/4)];
1259 uint16_t latestEntryOfChecksum[64];
1294} KernelCallWithParamAndHandle;
1301} KernelCallWithParam16;
1307 uint16_t symbolIndex;
1324} TaskInstanceStatusEvent;
1369#if (TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER == 1)
1372 TraceStringHandle_t name;
1373 TraceStringHandle_t defaultFormat;
1380 uint32_t wraparoundCounter;
1381 uint32_t numberOfSlots;
1382 uint32_t nextSlotToWrite;
1383 uint8_t numberOfChannels;
1387 ChannelFormatPair channels[(TRC_CFG_UB_CHANNELS)+1];
1388 uint8_t channelBuffer[((TRC_CFG_SEPARATE_USER_EVENT_BUFFER_SIZE) + 3) & 0xFFFFFFFC];
1389 uint8_t dataBuffer[(TRC_CFG_SEPARATE_USER_EVENT_BUFFER_SIZE) * 4];
1400 volatile uint8_t startmarker0;
1401 volatile uint8_t startmarker1;
1402 volatile uint8_t startmarker2;
1403 volatile uint8_t startmarker3;
1404 volatile uint8_t startmarker4;
1405 volatile uint8_t startmarker5;
1406 volatile uint8_t startmarker6;
1407 volatile uint8_t startmarker7;
1408 volatile uint8_t startmarker8;
1409 volatile uint8_t startmarker9;
1410 volatile uint8_t startmarker10;
1411 volatile uint8_t startmarker11;
1417 uint8_t minor_version;
1422 uint8_t irq_priority_order;
1434 uint32_t nextFreeIndex;
1437 uint32_t bufferIsFull;
1444 uint32_t absTimeLastEvent;
1447 uint32_t absTimeLastEventSecond;
1451 uint32_t recorderActive;
1459 uint32_t isrTailchainingThreshold;
1462 uint32_t heapMemMaxUsage;
1465 uint32_t heapMemUsage;
1468 int32_t debugMarker0;
1471 uint32_t isUsing16bitHandles;
1479 int32_t debugMarker1;
1488#if (TRC_CFG_INCLUDE_FLOAT_SUPPORT == 1)
1489 float exampleFloatEncoding;
1491 uint32_t exampleFloatEncoding;
1497 uint32_t internalErrorOccured;
1500 int32_t debugMarker2;
1503 char systemInfo[80];
1506 int32_t debugMarker3;
1509 uint8_t eventData[ (TRC_CFG_EVENT_BUFFER_SIZE) * 4 ];
1511#if (TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER == 1)
1512 UserEventBuffer userEventBuffer;
1516 uint32_t endOfSecondaryBlocks;
1528 uint8_t endmarker10;
1529 uint8_t endmarker11;
1532extern RecorderDataType* RecorderDataPtr;
1573 traceHandle handle);
1590#define TRACE_PROPERTY_NAME_GET(objectclass, objecthandle) \
1591 (const char*)(& RecorderDataPtr->ObjectPropertyTable.objbytes \
1592 [uiIndexOfObject(objecthandle, objectclass)])
1594#define TRACE_PROPERTY_OBJECT_STATE(objectclass, handle) \
1595 RecorderDataPtr->ObjectPropertyTable.objbytes[uiIndexOfObject(handle, objectclass) \
1596 + RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[objectclass]]
1598#define TRACE_PROPERTY_ACTOR_PRIORITY(objectclass, handle) \
1599 RecorderDataPtr->ObjectPropertyTable.objbytes[uiIndexOfObject(handle, objectclass) \
1600 + RecorderDataPtr->ObjectPropertyTable.NameLengthPerClass[objectclass] + 1]
1603#if defined TRC_CFG_USE_TRACE_ASSERT && TRC_CFG_USE_TRACE_ASSERT != 0
1604#define TRACE_ASSERT(eval, msg, defRetVal) \
1607 prvTraceError("TRACE_ASSERT: " msg); \
1611#define TRACE_ASSERT(eval, msg, defRetVal)
1614typedef RecorderDataType TraceRecorderData_t;
1618#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
1620#ifndef TRC_EXTERNAL_BUFFERS
1621#define TRC_EXTERNAL_BUFFERS 0
1624typedef struct TraceRecorderData
1626 uint32_t uiSessionCounter;
1627 uint32_t uiRecorderEnabled;
1628 TraceUnsignedBaseType_t uxTraceSystemStates[TRC_CFG_CORE_COUNT];
1631 TraceAssertData_t xAssertBuffer;
1632 TraceEntryIndexTable_t xEntryIndexTableBuffer;
1633#if (TRC_EXTERNAL_BUFFERS == 0)
1634 TraceHeaderBuffer_t xHeaderBuffer;
1635 TraceEntryTable_t xEntryTable;
1639 TraceStaticBufferTable_t xStaticBufferBuffer;
1640 TraceEventDataTable_t xEventDataBuffer;
1641 TracePrintData_t xPrintBuffer;
1642 TraceErrorData_t xErrorBuffer;
1643 TraceISRData_t xISRBuffer;
1645 TraceTaskData_t xTaskInfoBuffer;
1646 TraceStackMonitorData_t xStackMonitorBuffer;
1647 TraceDiagnosticsData_t xDiagnosticsBuffer;
1648 TraceExtensionData_t xExtensionBuffer;
1649 TraceCounterData_t xCounterBuffer;
1650} TraceRecorderData_t;
1652extern TraceRecorderData_t* pxTraceRecorderData;
1653extern uint32_t RecorderInitialized;
1671#define xTraceIsRecorderEnabled() (xTraceIsRecorderInitialized() && pxTraceRecorderData->uiRecorderEnabled)
1679#define xTraceIsRecorderInitialized() xTraceIsComponentInitialized(TRC_RECORDER_COMPONENT_CORE)
1689#define xTraceSetComponentInitialized(uiComponentBit) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(RecorderInitialized |= (uiComponentBit), TRC_SUCCESS)
1699#define xTraceIsComponentInitialized(uiComponentBit) (RecorderInitialized & (uiComponentBit))
1709#define xTraceStateSet(uxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(pxTraceRecorderData->uxTraceSystemStates[TRC_CFG_GET_CURRENT_CORE()] = (uxState), TRC_SUCCESS)
1719#define xTraceStateGet(puxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(puxState) = pxTraceRecorderData->uxTraceSystemStates[TRC_CFG_GET_CURRENT_CORE()], TRC_SUCCESS)
1738#define prvTraceStoreEvent_None(_eventID) xTraceEventCreate0(_eventID)
1746#define prvTraceStoreEvent_Handle(_eventID, _handle) xTraceEventCreate1(_eventID, (TraceUnsignedBaseType_t)(_handle))
1754#define prvTraceStoreEvent_Param(_eventID, _param1) xTraceEventCreate1(_eventID, (TraceUnsignedBaseType_t)(_param1))
1763#define prvTraceStoreEvent_HandleParam(_eventID, _handle, _param1) xTraceEventCreate2(_eventID, (TraceUnsignedBaseType_t)(_handle), (TraceUnsignedBaseType_t)(_param1))
1772#define prvTraceStoreEvent_ParamParam(_eventID, _param1, _param2) xTraceEventCreate2(_eventID, (TraceUnsignedBaseType_t)(_param1), (TraceUnsignedBaseType_t)(_param2))
1782#define prvTraceStoreEvent_HandleParamParam(_eventID, _handle, _param1, _param2) xTraceEventCreate3(_eventID, (TraceUnsignedBaseType_t)(_handle), (TraceUnsignedBaseType_t)(_param1), (TraceUnsignedBaseType_t)(_param2))
1792#define prvTraceStoreEvent_ParamParamParam(_eventID, _param1, _param2, _param3) xTraceEventCreate3(_eventID, (TraceUnsignedBaseType_t)(_param1), (TraceUnsignedBaseType_t)(_param2), (TraceUnsignedBaseType_t)(_param3))
1799#define vTraceSetStopHook(x) (void)(x)
1804#define vTraceInitTimestamps()
1808#if (TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM)
1819#define xTraceSetBuffer(p) (TRC_SUCCESS)
1835#define xTraceInitialize() (TRC_SUCCESS)
1836#define xTraceEnable(x) ((void)(x), TRC_SUCCESS)
1837#define xTraceDisable() (TRC_SUCCESS)
1838#define xTraceStringRegister(x, y) ((void)(x), (void)y, TRC_SUCCESS)
1839#define xTracePrint(chn, ...) ((void)(chn), TRC_SUCCESS)
1840#define xTracePrintF(chn, fmt, ...) ((void)(chn), (void)(fmt), TRC_SUCCESS)
1841#define xTraceVPrintF(chn, formatStr, vl) ((void)(chn), (void)(formatStr), (void)(vl), TRC_SUCCESS)
1842#define xTraceTaskInstanceFinishedNow()
1843#define xTraceTaskInstanceFinishedNext()
1844#define vTraceStoreISRBegin(x) (void)(x)
1845#define vTraceStoreISREnd(x) (void)(x)
1846#define xTraceSetISRProperties(a, b) ((void)(a), (void)(b), (traceHandle)0)
1847#define xTraceRegisterChannelFormat(eventLabel, formatStr) ((void)(eventLabel), (void)(formatStr), 0)
1848#define vTraceUBData(label, ...) (void)(label)
1850#define vTraceSetFilterGroup(x) (void)(x)
1851#define vTraceSetFilterMask(x) (void)(x)
1853#define prvTraceSetReadyEventsEnabled(status) (void)(status)
1855#define vTraceExcludeTask(handle) (void)(handle)
1857#define vTraceConsoleChannelPrintF(fmt, ...) (void)(fmt)
1859#ifndef TRC_ALLOC_CUSTOM_BUFFER
1860#define TRC_ALLOC_CUSTOM_BUFFER(bufname)
1863#define xTraceIsRecorderEnabled() (0)
1864#define xTraceIsRecorderInitialized() (0)
1866#define xTraceSetBuffer(p) (TRC_SUCCESS)
1867#define xTraceGetEventBuffer(p) (TRC_FAIL)
1869#define vTraceSetStopHook(x) (void)(x)
1871#define TraceRecorderData_t uint32_t
1878#define vTraceInitialize (void)xTraceInitialize
1883#define vTraceEnable (void)xTraceEnable
1888#define vTraceStop (void)xTraceDisable
1893#define vTraceInstanceFinishedNow (void)xTraceTaskInstanceFinishedNow
1898#define vTraceInstanceFinishedNext (void)xTraceTaskInstanceFinishedNext
1903#define vTracePrintF (void)xTracePrintF
1908#define vTraceVPrintF (void)xTraceVPrintF
1913#define vTracePrint (void)xTracePrint
1918#define vTraceSetRecorderDataBuffer(pxBuffer) xTraceSetBuffer((TraceRecorderData_t*)(pxBuffer))
traceResult xTraceISRRegister(const char *szName, uint32_t uiPriority, TraceISRHandle_t *pxISRHandle)
Registers an ISR.
Definition: trcISR.c:49
traceResult xTraceISRBegin(TraceISRHandle_t xHandle)
Registers the beginning of an Interrupt Service Routine, using a TraceISRHandle_t provided by xTraceI...
Definition: trcISR.c:108
traceResult xTraceVPrintF(TraceStringHandle_t eventLabel, const char *formatStr, va_list vl)
xTracePrintF variant that accepts a va_list. See xTracePrintF documentation for further details.
Definition: trcPrint.c:189
traceResult xTracePrint(TraceStringHandle_t chn, const char *str)
A faster version of xTracePrintF, that only allows for logging a string.
Definition: trcPrint.c:41
traceResult xTracePrintF(TraceStringHandle_t chn, const char *fmt,...)
Generates "User Events", with formatted text and data, similar to a "printf". User Events can be used...
Definition: trcPrint.c:170
Object property table struct.
Definition: trcRecorder.h:1217
A structure representing the kernel port buffer.
Definition: trcKernelPort.h:73
A structure representing the trace stream port buffer.
Definition: trcStreamPort.h:93
Trace Timestamp Structure.
Definition: trcTimestamp.h:38
Object handle stack struct.
Definition: trcRecorder.h:1189
Symbol table structure.
Definition: trcRecorder.h:1246
Public trace assert APIs.
Public trace counter APIs.
Public trace dependency APIs.
Public trace diagnostic APIs.
Public trace entry table APIs.
Public trace event buffer APIs.
Public trace extension APIs.
Public internal event buffer APIs.
Public trace interval APIs.
Public trace object APIs.
uint32_t uiTraceGetTraceBufferSize(void)
Gets the size of the recorder data structure. For use together with xTraceGetTraceBuffer if you wish ...
Definition: trcSnapshotRecorder.c:523
#define xTraceIsRecorderInitialized()
Query if recorder initialized.
Definition: trcRecorder.h:1679
void prvTraceSetTaskInstanceFinished(traceHandle handle)
Flags a task instance as finished.
Definition: trcSnapshotRecorder.c:2354
traceResult xTraceTzCtrl(void)
Call this function periodically.
Definition: trcStreamingRecorder.c:443
traceResult xTraceISREnd(int pendingISR)
Registers the end of an Interrupt Service Routine.
traceResult xTraceTaskInstanceFinishedNext(void)
Marks the current "task instance" as finished on the next kernel call.
Definition: trcSnapshotRecorder.c:594
#define xTraceIsRecorderEnabled()
Query if recorder is enabled.
Definition: trcRecorder.h:1671
traceResult xTraceTaskInstanceFinishedNow(void)
Creates an event that ends the current task instance at this very instant. This makes the viewer to s...
Definition: trcSnapshotRecorder.c:625
traceHandle prvTraceGetObjectHandle(traceObjectClass objectclass)
Reserve an object handle.
Definition: trcSnapshotRecorder.c:2404
void * xTraceGetTraceBuffer(void)
Returns a pointer to the recorder data structure. Use this together with uiTraceGetTraceBufferSize if...
Definition: trcSnapshotRecorder.c:511
void prvTraceFreeObjectHandle(traceObjectClass objectclass, traceHandle handle)
Free an object handle.
Definition: trcSnapshotRecorder.c:2456
void vTraceClear(void)
Resets the recorder.
Definition: trcSnapshotRecorder.c:376
traceResult xTraceHeaderInitialize(TraceHeaderBuffer_t *pxBuffer)
Initializes the header data.
Definition: trcStreamingRecorder.c:279
void prvTraceStoreObjectNameOnCloseEvent(uint8_t evtcode, traceHandle handle, traceObjectClass objectclass)
Stores the name of an object because it is being deleted.
Definition: trcSnapshotRecorder.c:2254
void prvReportStackUsage(void)
Reports on the current stack usage.
Definition: trcSnapshotRecorder.c:3255
traceResult xTraceInitialize(void)
Initializes the recorder data. xTraceInitialize() or xTraceEnable(...) must be called before any atte...
Definition: trcSnapshotRecorder.c:1631
#define vTraceSetStopHook(x)
Snapshot mode only. Trace stop hook.
Definition: trcRecorder.h:1799
void vTraceSetFilterMask(uint16_t filterMask)
For snapshot mode only: Sets the "filter mask" that is used to filter the events by object....
Definition: trcSnapshotRecorder.c:2637
traceResult xTraceDisable(void)
Disables tracing.
Definition: trcSnapshotRecorder.c:364
void prvRemoveTaskFromStackMonitor(void *task)
Remove a task from the stack monitor.
Definition: trcSnapshotRecorder.c:3241
void(* TRACE_STOP_HOOK)(void)
Trace stop callback type.
Definition: trcRecorder.h:686
void prvTraceSetPriorityProperty(uint8_t objectclass, traceHandle id, uint8_t value)
Set priority.
Definition: trcSnapshotRecorder.c:2314
void prvTraceSetObjectState(uint8_t objectclass, traceHandle id, uint8_t value)
Set object state.
Definition: trcSnapshotRecorder.c:2334
void prvTraceSetObjectName(traceObjectClass objectclass, traceHandle handle, const char *name)
Set the object name.
Definition: trcSnapshotRecorder.c:2516
void prvTraceStoreTaskswitch(traceHandle task_handle)
Stores a Task Switch event.
Definition: trcSnapshotRecorder.c:2194
traceResult xTraceGetEventBuffer(void **ppvBuffer, TraceUnsignedBaseType_t *puiSize)
Retrieve the event buffer and event buffer size.
Definition: trcSnapshotRecorder.c:315
void prvTraceStoreKernelCall(uint32_t eventcode, traceObjectClass objectClass, uint32_t objectNumber)
Stores a Kernel Service call event with an Object handle parameter.
Definition: trcSnapshotRecorder.c:1986
traceResult xTraceStringRegister(const char *label, TraceStringHandle_t *pxString)
Registers a string and returns a handle that can be used when tracing.
Definition: trcSnapshotRecorder.c:1611
void prvTraceStoreObjectPropertiesOnCloseEvent(uint8_t evtcode, traceHandle handle, traceObjectClass objectclass)
Stores the property of an object because it is being deleted.
Definition: trcSnapshotRecorder.c:2284
void prvTraceError(const char *msg)
Signals a trace error.
Definition: trcSnapshotRecorder.c:2617
void prvTraceStoreTaskReady(traceHandle handle)
Stores a Task Ready event.
Definition: trcSnapshotRecorder.c:1787
void prvTraceSetReadyEventsEnabled(uint32_t flag)
Dynamically enables ready events.
Definition: trcSnapshotRecorder.c:1777
void prvTraceStoreLowPower(uint32_t flag)
Stores a Low Power mode event.
Definition: trcSnapshotRecorder.c:1851
traceResult xTraceSetBuffer(TraceRecorderData_t *pxBuffer)
Set the recorder data buffer.
Definition: trcSnapshotRecorder.c:302
void prvTraceStoreKernelCallWithNumericParamOnly(uint32_t evtcode, uint32_t param)
Stores a Kernel Service call event with only a numeric parameter.
Definition: trcSnapshotRecorder.c:2144
void prvMarkObjectAsUsed(traceObjectClass objectclass, traceHandle handle)
Mark object as used.
Definition: trcSnapshotRecorder.c:2488
void prvTracePortGetTimeStamp(uint32_t *puiTimestamp)
Returns the current time based on the HWTC macros which provide a hardware isolation layer towards th...
Definition: trcSnapshotRecorder.c:3103
uint8_t prvTraceGetPriorityProperty(uint8_t objectclass, traceHandle id)
Get priority.
Definition: trcSnapshotRecorder.c:2324
void prvAddTaskToStackMonitor(void *task)
Adds a task to the stack monitor.
Definition: trcSnapshotRecorder.c:3218
void prvTraceStoreKernelCallWithParam(uint32_t evtcode, traceObjectClass objectClass, uint32_t objectNumber, uint32_t param)
Stores a Kernel Service call event with an Object handle and a numeric parameter.
Definition: trcSnapshotRecorder.c:2047
TraceStringHandle_t xTraceRegisterString(const char *name)
Registers a string and returns a handle that can be used when tracing.
Definition: trcSnapshotRecorder.c:1622
void vTraceSetFilterGroup(uint16_t filterGroup)
For snapshot mode only: Sets the "filter group" to assign when creating RTOS objects,...
Definition: trcSnapshotRecorder.c:2642
Public trace runnable APIs.
Public trace stack monitor APIs.
Public trace state machine APIs.
Public trace static buffer APIs.
Public trace string APIs.
Public trace timestamp APIs.