Percepio Trace Recorder v4.11.0
Loading...
Searching...
No Matches
trcEntryTable.h
Go to the documentation of this file.
1/*
2* Percepio Trace Recorder for Tracealyzer v4.11.0
3* Copyright 2025 Percepio AB
4* www.percepio.com
5*
6* SPDX-License-Identifier: Apache-2.0
7*/
8
14
15#ifndef TRC_ENTRY_TABLE_H
16#define TRC_ENTRY_TABLE_H
17
18#if (TRC_USE_TRACEALYZER_RECORDER == 1)
19
20#include <trcTypes.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
31
32#define TRC_ENTRY_CREATE_WITH_ADDRESS(_pvAddress, _pxEntryHandle) (xTraceEntryCreate(_pxEntryHandle) == TRC_SUCCESS ? (((TraceEntry_t*)*(_pxEntryHandle))->pvAddress = (_pvAddress), TRC_SUCCESS) : TRC_FAIL)
33#define TRC_ENTRY_SET_STATE(xEntryHandle, uxStateIndex, uxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(((TraceEntry_t*)(xEntryHandle))->xStates[uxStateIndex] = (uxState), TRC_SUCCESS)
34#define TRC_ENTRY_SET_OPTIONS(xEntryHandle, uiMask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(((TraceEntry_t*)(xEntryHandle))->uiOptions |= (uiMask), TRC_SUCCESS)
35#define TRC_ENTRY_CLEAR_OPTIONS(xEntryHandle, uiMask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(((TraceEntry_t*)(xEntryHandle))->uiOptions &= ~(uiMask), TRC_SUCCESS)
36#define TRC_ENTRY_GET_ADDRESS(xEntryHandle, ppvAddress) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(ppvAddress) = ((TraceEntry_t*)(xEntryHandle))->pvAddress, TRC_SUCCESS)
37#define TRC_ENTRY_GET_ADDRESS_RETURN(xEntryHandle) (((TraceEntry_t*)(xEntryHandle))->pvAddress)
38#define TRC_ENTRY_GET_SYMBOL(xEntryHandle, pszSymbol) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(pszSymbol) = ((TraceEntry_t*)(xEntryHandle))->szSymbol, TRC_SUCCESS)
39#define TRC_ENTRY_GET_STATE(xEntryHandle, uxStateIndex, puxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(puxState) = ((TraceEntry_t*)(xEntryHandle))->xStates[uxStateIndex], TRC_SUCCESS)
40#define TRC_ENTRY_GET_STATE_RETURN(xEntryHandle, uxStateIndex) (((TraceEntry_t*)(xEntryHandle))->xStates[uxStateIndex])
41#define TRC_ENTRY_GET_OPTIONS(xEntryHandle, puiOptions) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(puiOptions) = ((TraceEntry_t*)(xEntryHandle))->uiOptions, TRC_SUCCESS)
42
43#define TRC_ENTRY_TABLE_STATE_COUNT (3UL)
44#define TRC_ENTRY_TABLE_SYMBOL_LENGTH ((uint32_t)(TRC_CFG_ENTRY_SYMBOL_MAX_LENGTH))
45
46/* TRC_ENTRY_TABLE_SLOT_SYMBOL_SIZE has to be aligned to TraceUnsignedBaseType_t but with a uint32_t padding to ensure that TraceEntry_t size is aligned (uiOptions is uint32_t) */
47#define TRC_ENTRY_TABLE_SLOT_SYMBOL_SIZE (((((sizeof(char) * (uint32_t)(TRC_ENTRY_TABLE_SYMBOL_LENGTH) - sizeof(uint32_t)) + (sizeof(TraceUnsignedBaseType_t) - 1UL)) / sizeof(TraceUnsignedBaseType_t)) * sizeof(TraceUnsignedBaseType_t)) + sizeof(uint32_t))
48
49#if (TRC_CFG_ENTRY_SLOTS > 256UL)
50typedef uint16_t TraceEntryIndex_t;
51#define TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE (4) /* Must align to 64-bit (sizeof(uint64_t) / sizeof(uint16_t)) */
52#else
53typedef uint8_t TraceEntryIndex_t;
54#define TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE (8) /* Must align to 64-bit (sizeof(uint64_t) / sizeof(uint8_t)) */
55#endif
56
57#define TRC_ENTRY_TABLE_SLOTS ((((TRC_CFG_ENTRY_SLOTS) + (TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE) - 1) / TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE) * TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE)
58
59typedef struct EntryIndexTable /* Aligned because TRC_ENTRY_TABLE_SLOTS is always a multiple that aligns to 64-bit */
60{
61 TraceEntryIndex_t axFreeIndexes[TRC_ENTRY_TABLE_SLOTS]; /* slot count and size is aligned to 64-bit */
62 uint32_t uiFreeIndexCount;
63 uint32_t reserved; /* alignment */
64} TraceEntryIndexTable_t;
65
67typedef struct TraceEntry /* Aligned because TRC_ENTRY_TABLE_SLOT_SYMBOL_SIZE will align together with uiOptions */
68{
69 void* pvAddress;
70 TraceUnsignedBaseType_t xStates[TRC_ENTRY_TABLE_STATE_COUNT];
71 uint32_t uiOptions;
72 char szSymbol[TRC_ENTRY_TABLE_SLOT_SYMBOL_SIZE];
74
75typedef struct TraceEntryTable /* Aligned */
76{
77 TraceUnsignedBaseType_t uxSlots;
78 TraceUnsignedBaseType_t uxEntrySymbolLength;
79 TraceUnsignedBaseType_t uxEntryStateCount;
80 TraceEntry_t axEntries[TRC_ENTRY_TABLE_SLOTS];
81} TraceEntryTable_t;
82
94traceResult xTraceEntryIndexTableInitialize(TraceEntryIndexTable_t* const pxBuffer);
95
107traceResult xTraceEntryTableInitialize(TraceEntryTable_t* const pxBuffer);
108
117traceResult xTraceEntryCreate(TraceEntryHandle_t *pxEntryHandle);
118
127traceResult xTraceEntryDelete(TraceEntryHandle_t xEntryHandle);
128
138traceResult xTraceEntryFind(const void* const pvAddress, TraceEntryHandle_t* pxEntryHandle);
139
148traceResult xTraceEntryGetCount(uint32_t* puiCount);
149
159traceResult xTraceEntryGetAtIndex(uint32_t index, TraceEntryHandle_t* pxEntryHandle);
160
171traceResult xTraceEntrySetSymbol(const TraceEntryHandle_t xEntryHandle, const char* szSymbol, uint32_t uiLength);
172
173#if ((TRC_CFG_USE_TRACE_ASSERT) == 1)
174
184traceResult xTraceEntryCreateWithAddress(void* const pvAddress, TraceEntryHandle_t* pxEntryHandle);
185
196traceResult xTraceEntrySetState(const TraceEntryHandle_t xEntryHandle, TraceUnsignedBaseType_t uxStateIndex, TraceUnsignedBaseType_t uxState);
197
207traceResult xTraceEntrySetOptions(const TraceEntryHandle_t xEntryHandle, uint32_t uiMask);
208
218traceResult xTraceEntryClearOptions(const TraceEntryHandle_t xEntryHandle, uint32_t uiMask);
219
229traceResult xTraceEntryGetAddress(const TraceEntryHandle_t xEntryHandle, void **ppvAddress);
230
238void* pvTraceEntryGetAddressReturn(const TraceEntryHandle_t xEntryHandle);
239
249traceResult xTraceEntryGetSymbol(const TraceEntryHandle_t xEntryHandle, const char** pszSymbol);
250
261traceResult xTraceEntryGetState(const TraceEntryHandle_t xEntryHandle, TraceUnsignedBaseType_t uxStateIndex, TraceUnsignedBaseType_t *puxState);
262
271TraceUnsignedBaseType_t xTraceEntryGetStateReturn(const TraceEntryHandle_t xEntryHandle, TraceUnsignedBaseType_t uxStateIndex);
272
282traceResult xTraceEntryGetOptions(const TraceEntryHandle_t xEntryHandle, uint32_t *puiOptions);
283
284#else
285
286#define xTraceEntryCreateWithAddress TRC_ENTRY_CREATE_WITH_ADDRESS
287
288#define xTraceEntrySetState TRC_ENTRY_SET_STATE
289#define xTraceEntrySetOptions TRC_ENTRY_SET_OPTIONS
290#define xTraceEntryClearOptions TRC_ENTRY_CLEAR_OPTIONS
291
292#define xTraceEntryGetAddress TRC_ENTRY_GET_ADDRESS
293#define pvTraceEntryGetAddressReturn TRC_ENTRY_GET_ADDRESS_RETURN
294#define xTraceEntryGetSymbol TRC_ENTRY_GET_SYMBOL
295#define xTraceEntryGetState TRC_ENTRY_GET_STATE
296#define xTraceEntryGetStateReturn TRC_ENTRY_GET_STATE_RETURN
297#define xTraceEntryGetOptions TRC_ENTRY_GET_OPTIONS
298
299#endif /* ((TRC_CFG_USE_TRACE_ASSERT) == 1) */
300
302
303#ifdef __cplusplus
304}
305#endif
306
307#else
308
309#define xTraceEntryCreate(_pxEntryHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_pxEntryHandle), TRC_SUCCESS)
310
311#define xTraceEntryDelete(_xEntryHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_xEntryHandle), TRC_SUCCESS)
312
313#define xTraceEntryFind(_pvAddress, _pxEntryHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_pvAddress), (void)(_pxEntryHandle), TRC_SUCCESS)
314
315#define xTraceEntryGetCount(_puiCount) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_puiCount), TRC_SUCCESS)
316
317#define xTraceEntryGetAtIndex(_index, _pxEntryHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_index), (void)(_pxEntryHandle), TRC_SUCCESS)
318
319#define xTraceEntrySetSymbol(_xEntryHandle, _szSymbol, _uiLength) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4((void)(_xEntryHandle), (void)(_szSymbol), (void)(_uiLength), TRC_SUCCESS)
320
321#define xTraceEntryCreateWithAddress(_pvAddress, _pxEntryHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_pvAddress), (void)(_pxEntryHandle), TRC_SUCCESS)
322
323#define xTraceEntrySetState(_xEntryHandle, _uxStateIndex, _uxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4((void)(_xEntryHandle), (void)(_uxStateIndex), (void)(_uxState), TRC_SUCCESS)
324
325#define xTraceEntrySetOptions(_xEntryHandle, _uiMask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xEntryHandle), (void)(_uiMask), TRC_SUCCESS)
326
327#define xTraceEntryClearOptions(_xEntryHandle, _uiMask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xEntryHandle), (void)(_uiMask), TRC_SUCCESS)
328
329#define xTraceEntryGetAddress(_xEntryHandle, _ppvAddress) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xEntryHandle), (void)(_ppvAddress), TRC_SUCCESS)
330
331#define pvTraceEntryGetAddressReturn(_xEntryHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_xEntryHandle), (void*)0)
332
333#define xTraceEntryGetSymbol(_xEntryHandle, _pszSymbol) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xEntryHandle), (void)(_pszSymbol), TRC_SUCCESS)
334
335#define xTraceEntryGetState(_xEntryHandle, _uxStateIndex, _puxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4((void)(_xEntryHandle), (void)(_uxStateIndex), (void)(_puxState), TRC_SUCCESS)
336
337#define xTraceEntryGetStateReturn(_xEntryHandle, _uxStateIndex) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xEntryHandle), (void)(_uxStateIndex), 0)
338
339#define xTraceEntryGetOptions(_xEntryHandle, _puiOptions) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xEntryHandle), (void)(_puiOptions), TRC_SUCCESS)
340
341#endif
342
343#endif
traceResult xTraceEntryCreate(TraceEntryHandle_t *pxEntryHandle)
Creates trace entry.
Definition trcEntryTable.c:78
traceResult xTraceEntryFind(const void *const pvAddress, TraceEntryHandle_t *pxEntryHandle)
Finds trace entry mapped to object address.
Definition trcEntryTable.c:166
traceResult xTraceEntrySetSymbol(const TraceEntryHandle_t xEntryHandle, const char *szSymbol, uint32_t uiLength)
Sets symbol for entry.
Definition trcEntryTable.c:195
struct TraceEntry TraceEntry_t
traceResult xTraceEntryGetCount(uint32_t *puiCount)
Gets the number of entries in the trace entry table.
Definition trcEntryTable.c:230
traceResult xTraceEntryDelete(TraceEntryHandle_t xEntryHandle)
Deletes trace entry.
Definition trcEntryTable.c:125
traceResult xTraceEntryGetAtIndex(uint32_t index, TraceEntryHandle_t *pxEntryHandle)
Gets trace table entry at index.
Definition trcEntryTable.c:243
Definition trcEntryTable.h:68