Percepio Trace Recorder v4.8.0.hotfix1
Loading...
Searching...
No Matches
trcEvent.h
Go to the documentation of this file.
1/*
2* Percepio Trace Recorder for Tracealyzer v4.8.0.hotfix1
3* Copyright 2023 Percepio AB
4* www.percepio.com
5*
6* SPDX-License-Identifier: Apache-2.0
7*/
8
15#ifndef TRC_EVENT_H
16#define TRC_EVENT_H
17
18#if (TRC_USE_TRACEALYZER_RECORDER == 1)
19
20#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
21
22#include <trcTypes.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
37#define TRC_EVENT_SET_PARAM_COUNT(id, n) ((uint16_t)(((uint16_t)(id)) | ((((uint16_t)(n)) & 0xF) << 12)))
38
42#define TRC_EVENT_GET_PARAM_COUNT(id) (((id) >> 12u) & 0xFU)
43
44#if (TRC_CFG_CORE_COUNT > 1)
45#define TRC_EVENT_SET_EVENT_COUNT(c) ((uint16_t)(((TRC_CFG_GET_CURRENT_CORE() & 0xF) << 12) | ((uint16_t)(c) & 0xFFF)))
46#else
47#define TRC_EVENT_SET_EVENT_COUNT(c) ((uint16_t)(c))
48#endif
49
53#define SET_BASE_EVENT_DATA(pxEvent, eventId, paramCount, eventCount) \
54 ( \
55 (pxEvent)->EventID = TRC_EVENT_SET_PARAM_COUNT(eventId, paramCount), \
56 (pxEvent)->EventCount = TRC_EVENT_SET_EVENT_COUNT(eventCount), \
57 xTraceTimestampGet(&(pxEvent)->TS) \
58 )
59
63#define RESET_EVENT_DATA(p) \
64 ( \
65 (p)->pvBlob = 0, \
66 (p)->size = 0, \
67 (p)->offset = 0 \
68 )
69
73#define TRC_EVENT_GET_SIZE(pvAddress, puiSize) (*(uint32_t*)(puiSize) = sizeof(TraceEvent0_t) + (TRC_EVENT_GET_PARAM_COUNT(((TraceEvent0_t*)(pvAddress))->EventID)) * sizeof(TraceBaseType_t), TRC_SUCCESS)
74
78#define TRC_EVENT_GET_RAW_DATA(xEventHandle, uiOffset, uiSize, ppvData) ((void)(uiSize), *(void**)(ppvData) = (void*)&((uint8_t*)((TraceEventData_t*)(xEventHandle))->pvBlob)[uiOffset], TRC_SUCCESS)
79
83#define TRC_EVENT_GET_PAYLOAD(xEventHandle, uiOffset, uiSize, ppvData) ((void)(uiSize), *(void**)(ppvData) = (void*)&((uint8_t*)((TraceEventData_t*)(xEventHandle))->pvBlob)[sizeof(TraceEvent0_t) + (uiOffset)], TRC_SUCCESS)
84
88#define TRC_EVENT_PAYLOAD_REMAINING(xEventHandle, puiValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(uint32_t*)(puiValue) = ((TraceEventData_t*)(xEventHandle))->size - ((TraceEventData_t*)(xEventHandle))->offset, TRC_SUCCESS)
89
93#define TRC_EVENT_PAYLOAD_USED(xEventHandle, puiValue) (*(uint32_t*)(puiValue) = ((TraceEventData_t*)(xEventHandle))->offset - sizeof(TraceEvent0_t), TRC_SUCCESS)
94
98#define TRC_EVENT_PAYLOAD_SIZE(xEventHandle, puiValue) (*(uint32_t*)(puiValue) = ((TraceEventData_t*)(xEventHandle))->size - sizeof(TraceEvent0_t), TRC_SUCCESS)
99
103#define TRC_EVENT_ADD_POINTER(xEventHandle, value) \
104 TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3( \
105 ((void**)((TraceEventData_t*)(xEventHandle))->pvBlob)[((TraceEventData_t*)(xEventHandle))->offset / sizeof(void*)] = (value), \
106 ((TraceEventData_t*)(xEventHandle))->offset += sizeof(void*), \
107 TRC_SUCCESS \
108 )
109
113#define TRC_EVENT_ADD_UNSIGNED_BASE_TYPE(xEventHandle, value) \
114 TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3( \
115 ((TraceUnsignedBaseType_t*)((TraceEventData_t*)(xEventHandle))->pvBlob)[((TraceEventData_t*)(xEventHandle))->offset / sizeof(TraceUnsignedBaseType_t)] = (value), \
116 ((TraceEventData_t*)(xEventHandle))->offset += sizeof(TraceUnsignedBaseType_t), \
117 TRC_SUCCESS \
118 )
119
123#define TRC_EVENT_ADD_32(xEventHandle, value) \
124 TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3( \
125 ((uint32_t*)((TraceEventData_t*)(xEventHandle))->pvBlob)[((TraceEventData_t*)(xEventHandle))->offset / sizeof(uint32_t)] = (value), \
126 ((TraceEventData_t*)(xEventHandle))->offset += sizeof(uint32_t), \
127 TRC_SUCCESS \
128 )
129
133#define TRC_EVENT_ADD_16(xEventHandle, value) \
134 TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3( \
135 ((uint16_t*)((TraceEventData_t*)(xEventHandle))->pvBlob)[((TraceEventData_t*)(xEventHandle))->offset / sizeof(uint16_t)] = (value), \
136 ((TraceEventData_t*)(xEventHandle))->offset += sizeof(uint16_t), \
137 TRC_SUCCESS \
138 )
139
143#define TRC_EVENT_ADD_8(xEventHandle, value) \
144 TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3( \
145 ((uint8_t*)((TraceEventData_t*)(xEventHandle))->pvBlob)[((TraceEventData_t*)(xEventHandle))->offset / sizeof(uint8_t)] = (value), \
146 ((TraceEventData_t*)(xEventHandle))->offset += sizeof(uint8_t), \
147 TRC_SUCCESS \
148 )
149
153#define TRC_EVENT_BEGIN_OFFLINE(uiEventCode, uiPayloadSize, pxEventHandle) \
154 ( \
155 (xTraceEventBeginRawOffline((uint32_t)(sizeof(TraceEvent0_t) + (uiPayloadSize)), pxEventHandle)) == TRC_SUCCESS ? \
156 ( \
157 SET_BASE_EVENT_DATA((TraceEvent0_t*)(((TraceEventData_t*)*(pxEventHandle))->pvBlob), \
158 uiEventCode, \
159 (((TraceEventData_t*)*(pxEventHandle))->size - sizeof(TraceEvent0_t)) / sizeof(TraceBaseType_t), \
160 pxTraceEventDataTable->coreEventData[TRC_CFG_GET_CURRENT_CORE()].eventCounter), \
161 ((TraceEventData_t*)*(pxEventHandle))->offset += sizeof(TraceEvent0_t), \
162 TRC_SUCCESS \
163 ) : TRC_FAIL \
164 )
165
169typedef struct { /* Aligned */
170 uint16_t EventID;
171 uint16_t EventCount;
172 uint32_t TS;
173} TraceEvent0_t;
174
178typedef struct { /* Aligned */
179 uint16_t EventID;
180 uint16_t EventCount;
181 uint32_t TS;
182 TraceUnsignedBaseType_t uxParams[1];
183} TraceEvent1_t;
184
188typedef struct { /* Aligned */
189 uint16_t EventID;
190 uint16_t EventCount;
191 uint32_t TS;
192 TraceUnsignedBaseType_t uxParams[2];
193} TraceEvent2_t;
194
198typedef struct { /* Aligned */
199 uint16_t EventID;
200 uint16_t EventCount;
201 uint32_t TS;
202 TraceUnsignedBaseType_t uxParams[3];
203} TraceEvent3_t;
204
208typedef struct { /* Aligned */
209 uint16_t EventID;
210 uint16_t EventCount;
211 uint32_t TS;
212 TraceUnsignedBaseType_t uxParams[4];
213} TraceEvent4_t;
214
218typedef struct { /* Aligned */
219 uint16_t EventID;
220 uint16_t EventCount;
221 uint32_t TS;
222 TraceUnsignedBaseType_t uxParams[5];
223} TraceEvent5_t;
224
228typedef struct { /* Aligned */
229 uint16_t EventID;
230 uint16_t EventCount;
231 uint32_t TS;
232 TraceUnsignedBaseType_t uxParams[6];
233} TraceEvent6_t;
234
238typedef struct { /* Aligned */
239 uint16_t EventID;
240 uint16_t EventCount;
241 uint32_t TS;
242 TraceUnsignedBaseType_t uxParams[7];
243} TraceEvent7_t;
244
248typedef struct TraceEventData /* Aligned */
249{
250 void* pvBlob;
251 uint32_t size;
252 uint32_t offset;
253} TraceEventData_t;
254
258typedef struct TraceCoreEventData /* Aligned */
259{
260 TraceEventData_t eventData[(TRC_CFG_MAX_ISR_NESTING)+1]; /* aligned */
261 uint32_t eventCounter;
262 uint32_t reserved; /* alignment */
263 TRACE_ALLOC_CRITICAL_SECTION()
264} TraceCoreEventData_t;
265
269typedef struct TraceEventDataTable /* Aligned */
270{
271 TraceCoreEventData_t coreEventData[TRC_CFG_CORE_COUNT];
272} TraceEventDataTable_t;
273
274extern TraceEventDataTable_t* pxTraceEventDataTable;
275
285traceResult xTraceEventInitialize(TraceEventDataTable_t* pxBuffer);
286
296traceResult xTraceEventGetSize(const void* const pvAddress, uint32_t* puiSize);
297
306traceResult xTraceEventCreate0(uint32_t uiEventCode);
307
317traceResult xTraceEventCreate1(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1);
318
329traceResult xTraceEventCreate2(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2);
330
342traceResult xTraceEventCreate3(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3);
343
356traceResult xTraceEventCreate4(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3, TraceUnsignedBaseType_t uxParam4);
357
371traceResult xTraceEventCreate5(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3, TraceUnsignedBaseType_t uxParam4, TraceUnsignedBaseType_t uxParam5);
372
387traceResult xTraceEventCreate6(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3, TraceUnsignedBaseType_t uxParam4, TraceUnsignedBaseType_t uxParam5, TraceUnsignedBaseType_t uxParam6);
388
401traceResult xTraceEventBeginRawOffline(uint32_t uiSize, TraceEventHandle_t* pxEventHandle);
402
415traceResult xTraceEventBeginRawOfflineBlocking(uint32_t uiSize, TraceEventHandle_t* pxEventHandle);
416
429#define xTraceEventBeginOffline TRC_EVENT_BEGIN_OFFLINE
430
443#define xTraceEventBegin(uiEventCode, uiTotalPayloadSize, pxEventHandle) \
444 (xTraceIsRecorderEnabled() ? xTraceEventBeginOffline(uiEventCode, uiTotalPayloadSize, pxEventHandle) : TRC_FAIL)
445
457traceResult xTraceEventEndOffline(TraceEventHandle_t xEventHandle);
458
469traceResult xTraceEventEndOfflineBlocking(TraceEventHandle_t xEventHandle);
470
482#define xTraceEventEnd(xEventHandle) \
483 (!xTraceIsRecorderEnabled() ? TRC_FAIL : xTraceEventEndOffline(xEventHandle))
484
495traceResult xTraceEventAddData(TraceEventHandle_t xEventHandle, const TraceUnsignedBaseType_t* const puxData, TraceUnsignedBaseType_t uxSize);
496
507#define xTraceEventAddString(xEventHandle, szString, uiLength) xTraceEventAddData(xEventHandle, (TraceUnsignedBaseType_t*)(szString), (((uiLength) + (sizeof(TraceUnsignedBaseType_t) - 1)) / sizeof(TraceUnsignedBaseType_t)))
508
509#if ((TRC_CFG_USE_TRACE_ASSERT) == 1)
510
525traceResult xTraceEventGetRawData(TraceEventHandle_t xEventHandle, uint32_t uiOffset, uint32_t uiSize, void** ppvData);
526
541traceResult xTraceEventGetPayload(const TraceEventHandle_t xEventHandle, uint32_t uiOffset, uint32_t uiSize, void** ppvData);
542
552traceResult xTraceEventPayloadRemaining(const TraceEventHandle_t xEventHandle, uint32_t* puiValue);
553
563traceResult xTraceEventPayloadUsed(TraceEventHandle_t xEventHandle, uint32_t* puiValue);
564
574traceResult xTraceEventPayloadSize(TraceEventHandle_t xEventHandle, uint32_t* puiValue);
575
585traceResult xTraceEventAddUnsignedBaseType(TraceEventHandle_t xEventHandle, TraceUnsignedBaseType_t uxValue);
586
596traceResult xTraceEventAddPointer(TraceEventHandle_t xEventHandle, void *pvAddress);
597
607traceResult xTraceEventAdd32(TraceEventHandle_t xEventHandle, uint32_t value);
608
618traceResult xTraceEventAdd16(TraceEventHandle_t xEventHandle, uint16_t value);
619
629traceResult xTraceEventAdd8(TraceEventHandle_t xEventHandle, uint8_t value);
630
631#else /* ((TRC_CFG_USE_TRACE_ASSERT) == 1) */
632
642#define xTraceEventGetSize(pvAddress, puiSize) (*(uint32_t*)(puiSize) = sizeof(TraceEvent0_t) + (TRC_EVENT_GET_PARAM_COUNT(((TraceEvent0_t*)(pvAddress))->EventID)) * sizeof(uint32_t), TRC_SUCCESS)
643
658#define xTraceEventGetRawData TRC_EVENT_GET_RAW_DATA
659
674#define xTraceEventGetPayload TRC_EVENT_GET_PAYLOAD
675
685#define xTraceEventPayloadRemaining TRC_EVENT_PAYLOAD_REMAINING
686
696#define xTraceEventPayloadUsed TRC_EVENT_PAYLOAD_USED
697
707#define xTraceEventPayloadSize TRC_EVENT_PAYLOAD_SIZE
708
709/* Adds a pointer as event payload with no errors checks */
710#define xTraceEventAddPointer TRC_EVENT_ADD_POINTER
711
721#define xTraceEventAddUnsignedBaseType TRC_EVENT_ADD_UNSIGNED_BASE_TYPE
722
732#define xTraceEventAdd32 TRC_EVENT_ADD_32
733
743#define xTraceEventAdd16 TRC_EVENT_ADD_16
744
754#define xTraceEventAdd8 TRC_EVENT_ADD_8
755
756#endif /* ((TRC_CFG_USE_TRACE_ASSERT) == 1) */
757
760#ifdef __cplusplus
761}
762#endif
763
764#endif /* (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING) */
765
766#endif /* (TRC_USE_TRACEALYZER_RECORDER == 1) */
767
768#endif /* TRC_EVENT_H */
traceResult xTraceEventAddData(TraceEventHandle_t xEventHandle, const TraceUnsignedBaseType_t *const puxData, TraceUnsignedBaseType_t uxSize)
Adds data to event payload.
Definition: trcEvent.c:512
#define xTraceEventAdd16
Adds an uint16_t as trace event payload.
Definition: trcEvent.h:743
#define xTraceEventAdd32
Adds an uint32_t as trace event payload.
Definition: trcEvent.h:732
#define xTraceEventGetSize(pvAddress, puiSize)
Gets trace event size.
Definition: trcEvent.h:642
#define xTraceEventAddUnsignedBaseType
Adds an unsigned base type value as trace event payload.
Definition: trcEvent.h:721
#define xTraceEventGetRawData
Gets trace event data pointer with an offset.
Definition: trcEvent.h:658
traceResult xTraceEventCreate2(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2)
Creates an event with 2 parameters.
Definition: trcEvent.c:127
traceResult xTraceEventCreate0(uint32_t uiEventCode)
Creates an event with 0 parameters.
Definition: trcEvent.c:54
traceResult xTraceEventCreate1(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1)
Creates an event with 1 parameters.
Definition: trcEvent.c:89
#define xTraceEventPayloadUsed
Gets the amount of used trace event payload.
Definition: trcEvent.h:696
traceResult xTraceEventCreate6(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3, TraceUnsignedBaseType_t uxParam4, TraceUnsignedBaseType_t uxParam5, TraceUnsignedBaseType_t uxParam6)
Creates an event with 6 parameters.
Definition: trcEvent.c:289
#define xTraceEventAdd8
Adds an uint8_t as trace event payload.
Definition: trcEvent.h:754
traceResult xTraceEventCreate4(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3, TraceUnsignedBaseType_t uxParam4)
Creates an event with 4 parameters.
Definition: trcEvent.c:206
#define xTraceEventPayloadRemaining
Gets the amount of remaining trace event payload.
Definition: trcEvent.h:685
traceResult xTraceEventCreate3(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3)
Creates an event with 3 parameters.
Definition: trcEvent.c:166
#define xTraceEventGetPayload
Gets trace event payload pointer with an offset.
Definition: trcEvent.h:674
traceResult xTraceEventCreate5(uint32_t uiEventCode, TraceUnsignedBaseType_t uxParam1, TraceUnsignedBaseType_t uxParam2, TraceUnsignedBaseType_t uxParam3, TraceUnsignedBaseType_t uxParam4, TraceUnsignedBaseType_t uxParam5)
Creates an event with 5 parameters.
Definition: trcEvent.c:247
#define xTraceEventPayloadSize
Gets trace event payload size.
Definition: trcEvent.h:707