/* * Percepio Trace Recorder SDK for Tracealyzer v4.6.0 * Copyright 2021 Percepio AB * www.percepio.com * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * * @brief Public trace stack monitor APIs. */ #ifndef TRC_STACK_MONITOR_H #define TRC_STACK_MONITOR_H #if (TRC_USE_TRACEALYZER_RECORDER == 1) #if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING) #include #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup trace_stack_monitor_apis Trace Stack Monitor APIs * @ingroup trace_recorder_apis * @{ */ #if (((TRC_CFG_ENABLE_STACK_MONITOR) == 1) && ((TRC_CFG_SCHEDULING_ONLY) == 0)) #define TRACE_STACK_MONITOR_BUFFER_SIZE ((sizeof(void*) + sizeof(TraceUnsignedBaseType_t)) * (TRC_CFG_STACK_MONITOR_MAX_TASKS) + sizeof(uint32_t)) /** * @internal Trace Stack Monitor Buffer Structure */ typedef struct TraceStackMonitorBuffer { uint32_t buffer[(TRACE_STACK_MONITOR_BUFFER_SIZE) / sizeof(uint32_t)]; } TraceStackMonitorBuffer_t; /** * @internal Initialize trace stack monitor system. * * @param[in] pxBuffer Pointer to memory that will be used by the trace * stack monitor system. * * @retval TRC_FAIL Failure * @retval TRC_SUCCESS Success */ traceResult xTraceStackMonitorInitialize(TraceStackMonitorBuffer_t* pxBuffer); /** * @brief Adds task/thread to trace stack monitor. * * @param[in] pvTask Task/Thread. * * @retval TRC_FAIL Failure * @retval TRC_SUCCESS Success */ traceResult xTraceStackMonitorAdd(void* pvTask); /** * @brief Removes task/thread from trace stack monitor. * * @param[in] pvTask Task/Thread. * * @retval TRC_FAIL Failure * @retval TRC_SUCCESS Success */ traceResult xTraceStackMonitorRemove(void* pvTask); /** * @brief Gets trace stack monitor tread/task at index. * * @param[in] uiIndex Index. * @param[in] ppvTask Task/Thread. * @param[out] puxLowWaterMark Low water mark. * * @retval TRC_FAIL Failure * @retval TRC_SUCCESS Success */ traceResult xTraceStackMonitorGetAtIndex(uint32_t uiIndex, void** ppvTask, TraceUnsignedBaseType_t* puxLowWaterMark); /** * @brief Performs trace stack monitor reporting. * * This routine performs a trace stack monitor check and report * for TRC_CFG_STACK_MONITOR_MAX_REPORTS number of registered * tasks/threads. * * @retval TRC_FAIL Failure * @retval TRC_SUCCESS Success */ traceResult xTraceStackMonitorReport(void); #else /* (((TRC_CFG_ENABLE_STACK_MONITOR) == 1) && ((TRC_CFG_SCHEDULING_ONLY) == 0)) */ typedef struct TraceStackMonitorBuffer { uint32_t buffer[1]; } TraceStackMonitorBuffer_t; #define xTraceStackMonitorInitialize(pxBuffer) ((void)pxBuffer, TRC_SUCCESS) #define xTraceStackMonitorDiagnosticsGet(xType, puiValue) ((void)xType, puiValue != 0 ? *puiValue = 0 : 0, puiValue != 0 ? TRC_SUCCESS : TRC_FAIL) #define xTraceStackMonitorDiagnosticsSet(xType, uiValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)xType, (void)uiValue, TRC_SUCCESS) #define xTraceStackMonitorAdd(pvTask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)pvTask, TRC_SUCCESS) #define xTraceStackMonitorRemove(pvTask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)pvTask, TRC_SUCCESS) #define xTraceStackMonitorGetAtIndex(uiIndex, ppvTask, puxLowWaterMark) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4((void)uiIndex, (void)ppvTask, (void)puxLowWaterMark, TRC_SUCCESS) #define xTraceStackMonitorReport() TRC_COMMA_EXPR_TO_STATEMENT_EXPR_1(TRC_SUCCESS) #endif /* (((TRC_CFG_ENABLE_STACK_MONITOR) == 1) && ((TRC_CFG_SCHEDULING_ONLY) == 0)) */ /** @} */ #ifdef __cplusplus } #endif #endif /* (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING) */ #endif /* (TRC_USE_TRACEALYZER_RECORDER == 1) */ #endif /* TRC_STACK_MONITOR_H */