Percepio Trace Recorder v4.8.0.hotfix1
Loading...
Searching...
No Matches
trcEntryTable.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_ENTRY_TABLE_H
16#define TRC_ENTRY_TABLE_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
34#define TRC_ENTRY_CREATE_WITH_ADDRESS(_pvAddress, _pxEntryHandle) (xTraceEntryCreate(_pxEntryHandle) == TRC_SUCCESS ? (((TraceEntry_t*)*(_pxEntryHandle))->pvAddress = (_pvAddress), TRC_SUCCESS) : TRC_FAIL)
35#define TRC_ENTRY_SET_STATE(xEntryHandle, uxStateIndex, uxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(((TraceEntry_t*)(xEntryHandle))->xStates[uxStateIndex] = (uxState), TRC_SUCCESS)
36#define TRC_ENTRY_SET_OPTIONS(xEntryHandle, uiMask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(((TraceEntry_t*)(xEntryHandle))->uiOptions |= (uiMask), TRC_SUCCESS)
37#define TRC_ENTRY_CLEAR_OPTIONS(xEntryHandle, uiMask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(((TraceEntry_t*)(xEntryHandle))->uiOptions &= ~(uiMask), TRC_SUCCESS)
38#define TRC_ENTRY_GET_ADDRESS(xEntryHandle, ppvAddress) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(ppvAddress) = ((TraceEntry_t*)(xEntryHandle))->pvAddress, TRC_SUCCESS)
39#define TRC_ENTRY_GET_SYMBOL(xEntryHandle, pszSymbol) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(pszSymbol) = ((TraceEntry_t*)(xEntryHandle))->szSymbol, TRC_SUCCESS)
40#define TRC_ENTRY_GET_STATE(xEntryHandle, uxStateIndex, puxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(puxState) = ((TraceEntry_t*)(xEntryHandle))->xStates[uxStateIndex], TRC_SUCCESS)
41#define TRC_ENTRY_GET_STATE_RETURN(xEntryHandle, uxStateIndex) (((TraceEntry_t*)(xEntryHandle))->xStates[uxStateIndex])
42#define TRC_ENTRY_GET_OPTIONS(xEntryHandle, puiOptions) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(puiOptions) = ((TraceEntry_t*)(xEntryHandle))->uiOptions, TRC_SUCCESS)
43
44#define TRC_ENTRY_TABLE_STATE_COUNT (3UL)
45#define TRC_ENTRY_TABLE_SYMBOL_LENGTH ((uint32_t)(TRC_CFG_ENTRY_SYMBOL_MAX_LENGTH))
46
47/* 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) */
48#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))
49
50#if (TRC_CFG_ENTRY_SLOTS > 256UL)
51typedef uint16_t TraceEntryIndex_t;
52#define TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE (4) /* Must align to 64-bit (sizeof(uint64_t) / sizeof(uint16_t)) */
53#else
54typedef uint8_t TraceEntryIndex_t;
55#define TRC_ENTRY_INDEX_ALIGNMENT_MULTIPLE (8) /* Must align to 64-bit (sizeof(uint64_t) / sizeof(uint8_t)) */
56#endif
57
58#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)
59
60typedef struct EntryIndexTable /* Aligned because TRC_ENTRY_TABLE_SLOTS is always a multiple that aligns to 64-bit */
61{
62 TraceEntryIndex_t axFreeIndexes[TRC_ENTRY_TABLE_SLOTS]; /* slot count and size is aligned to 64-bit */
63 uint32_t uiFreeIndexCount;
64 uint32_t reserved; /* alignment */
65} TraceEntryIndexTable_t;
66
68typedef struct TraceEntry /* Aligned because TRC_ENTRY_TABLE_SLOT_SYMBOL_SIZE will align together with uiOptions */
69{
70 void* pvAddress;
71 TraceUnsignedBaseType_t xStates[TRC_ENTRY_TABLE_STATE_COUNT];
72 uint32_t uiOptions;
73 char szSymbol[TRC_ENTRY_TABLE_SLOT_SYMBOL_SIZE];
75
76typedef struct TraceEntryTable /* Aligned */
77{
78 TraceUnsignedBaseType_t uxSlots;
79 TraceUnsignedBaseType_t uxEntrySymbolLength;
80 TraceUnsignedBaseType_t uxEntryStateCount;
81 TraceEntry_t axEntries[TRC_ENTRY_TABLE_SLOTS];
82} TraceEntryTable_t;
83
95traceResult xTraceEntryIndexTableInitialize(TraceEntryIndexTable_t* const pxBuffer);
96
108traceResult xTraceEntryTableInitialize(TraceEntryTable_t* const pxBuffer);
109
118traceResult xTraceEntryCreate(TraceEntryHandle_t *pxEntryHandle);
119
128traceResult xTraceEntryDelete(TraceEntryHandle_t xEntryHandle);
129
139traceResult xTraceEntryFind(const void* const pvAddress, TraceEntryHandle_t* pxEntryHandle);
140
149traceResult xTraceEntryGetCount(uint32_t* puiCount);
150
160traceResult xTraceEntryGetAtIndex(uint32_t index, TraceEntryHandle_t* pxEntryHandle);
161
172traceResult xTraceEntrySetSymbol(const TraceEntryHandle_t xEntryHandle, const char* szSymbol, uint32_t uiLength);
173
174#if ((TRC_CFG_USE_TRACE_ASSERT) == 1)
175
185traceResult xTraceEntryCreateWithAddress(void* const pvAddress, TraceEntryHandle_t* pxEntryHandle);
186
197traceResult xTraceEntrySetState(const TraceEntryHandle_t xEntryHandle, TraceUnsignedBaseType_t uxStateIndex, TraceUnsignedBaseType_t uxState);
198
208traceResult xTraceEntrySetOptions(const TraceEntryHandle_t xEntryHandle, uint32_t uiMask);
209
219traceResult xTraceEntryClearOptions(const TraceEntryHandle_t xEntryHandle, uint32_t uiMask);
220
230traceResult xTraceEntryGetAddress(const TraceEntryHandle_t xEntryHandle, void **ppvAddress);
231
241traceResult xTraceEntryGetSymbol(const TraceEntryHandle_t xEntryHandle, const char** pszSymbol);
242
253traceResult xTraceEntryGetState(const TraceEntryHandle_t xEntryHandle, TraceUnsignedBaseType_t uxStateIndex, TraceUnsignedBaseType_t *puxState);
254
263TraceUnsignedBaseType_t xTraceEntryGetStateReturn(const TraceEntryHandle_t xEntryHandle, TraceUnsignedBaseType_t uxStateIndex);
264
274traceResult xTraceEntryGetOptions(const TraceEntryHandle_t xEntryHandle, uint32_t *puiOptions);
275
276#else
277
278#define xTraceEntryCreateWithAddress TRC_ENTRY_CREATE_WITH_ADDRESS
279
280#define xTraceEntrySetState TRC_ENTRY_SET_STATE
281#define xTraceEntrySetOptions TRC_ENTRY_SET_OPTIONS
282#define xTraceEntryClearOptions TRC_ENTRY_CLEAR_OPTIONS
283
284#define xTraceEntryGetAddress TRC_ENTRY_GET_ADDRESS
285#define xTraceEntryGetSymbol TRC_ENTRY_GET_SYMBOL
286#define xTraceEntryGetState TRC_ENTRY_GET_STATE
287#define xTraceEntryGetStateReturn TRC_ENTRY_GET_STATE_RETURN
288#define xTraceEntryGetOptions TRC_ENTRY_GET_OPTIONS
289
290#endif /* ((TRC_CFG_USE_TRACE_ASSERT) == 1) */
291
294#ifdef __cplusplus
295}
296#endif
297
298#endif /* (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING) */
299
300#endif /* (TRC_USE_TRACEALYZER_RECORDER == 1) */
301
302#endif /* TRC_ENTRY_TABLE_H */
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:235
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:248
Definition: trcEntryTable.h:69