mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-10-17 10:17:45 -04:00
Percepio Trace Recorder v4.6.0 (#789)
* * Percepio Trace Recorder v4.6.0 * Add space between inclusion of header and comment * Fix broken posix build - part 1 * Add percepio timer implementation * Remove delted trace recorder header file * Fix Networking demo build * Fix CLI demo * Fix visual studio version number * Fix core header check * Fix more core checks * Fix last of core checks Co-authored-by: Aniruddha Kanhere <60444055+AniruddhaKanhere@users.noreply.github.com> Co-authored-by: Alfred Gedeon <alfred2g@hotmail.com>
This commit is contained in:
parent
aa316fc1b4
commit
c568ba8c44
143 changed files with 23823 additions and 16781 deletions
243
FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace/Include/trcTask.h
Normal file
243
FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace/Include/trcTask.h
Normal file
|
@ -0,0 +1,243 @@
|
|||
/*
|
||||
* Percepio Trace Recorder for Tracealyzer v4.6.0
|
||||
* Copyright 2021 Percepio AB
|
||||
* www.percepio.com
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @brief Public trace task APIs.
|
||||
*/
|
||||
|
||||
#ifndef TRC_TASK_H
|
||||
#define TRC_TASK_H
|
||||
|
||||
#if (TRC_USE_TRACEALYZER_RECORDER == 1)
|
||||
|
||||
#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
|
||||
|
||||
#include <trcTypes.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup trace_task_apis Trace Task APIs
|
||||
* @ingroup trace_recorder_apis
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef TRC_CFG_ENABLE_STACK_MONITOR
|
||||
#define TRC_CFG_ENABLE_STACK_MONITOR 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @internal Trace Task Info Structure
|
||||
*/
|
||||
typedef struct TraceTaskInfo
|
||||
{
|
||||
void* coreTasks[TRC_CFG_CORE_COUNT];
|
||||
} TraceTaskInfo_t;
|
||||
|
||||
extern TraceTaskInfo_t* pxTraceTaskInfo;
|
||||
|
||||
#define TRACE_TASK_INFO_BUFFER_SIZE (sizeof(TraceTaskInfo_t))
|
||||
|
||||
/**
|
||||
* @internal Trace Task Info Buffer Structure
|
||||
*/
|
||||
typedef struct TraceTaskInfoBuffer
|
||||
{
|
||||
uint8_t buffer[TRACE_TASK_INFO_BUFFER_SIZE];
|
||||
} TraceTaskInfoBuffer_t;
|
||||
|
||||
/**
|
||||
* @internal Initialize trace task system.
|
||||
*
|
||||
* @param[in] pxBuffer Pointer to memory that will be used by the
|
||||
* trace task system.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskInitialize(TraceTaskInfoBuffer_t* pxBuffer);
|
||||
|
||||
/**
|
||||
* @brief Register trace task in the trace.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] szName Name.
|
||||
* @param[in] uxPriority Priority.
|
||||
* @param[out] pxTaskHandle Pointer to uninitialized trace task.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskRegister(pvTask, szName, uxPriority, pxTaskHandle) ((((pvTask) != 0) && (xTraceObjectRegister(PSF_EVENT_TASK_CREATE, pvTask, szName, uxPriority, (TraceObjectHandle_t*)(pxTaskHandle)) == TRC_SUCCESS)) ? (xTraceStackMonitorAdd(pvTask), TRC_SUCCESS) : TRC_FAIL)
|
||||
|
||||
/**
|
||||
* @brief Unregister trace task from trace.
|
||||
*
|
||||
* @param[in] xTaskHandle Pointer to initialized trace task.
|
||||
* @param[in] uxPriority Priority.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskUnregister(TraceTaskHandle_t xTaskHandle, TraceUnsignedBaseType_t uxPriority);
|
||||
|
||||
/**
|
||||
* @brief Sets trace task name.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] szName Name.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskSetName xTraceObjectSetName
|
||||
|
||||
/**
|
||||
* @brief Sets trace task priority.
|
||||
*
|
||||
* @param[in] xTaskHandle Pointer to initialized trace task.
|
||||
* @param[in] uxPriority Priority.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskSetPriority(TraceTaskHandle_t xTaskHandle, TraceUnsignedBaseType_t uxPriority);
|
||||
|
||||
/**
|
||||
* @brief Registers trace task without trace task handle.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] szName Name.
|
||||
* @param[in] uxPriority Priority.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskRegisterWithoutHandle(pvTask, szName, uxPriority) ((((pvTask) != 0) && (xTraceObjectRegisterWithoutHandle(PSF_EVENT_TASK_CREATE, pvTask, szName, uxPriority) == TRC_SUCCESS)) ? (xTraceStackMonitorAdd(pvTask), TRC_SUCCESS) : TRC_FAIL)
|
||||
|
||||
/**
|
||||
* @brief Unregisters trace task without trace task handle.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] uxPriority Priority.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskUnregisterWithoutHandle(pvTask, uxPriority) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(xTraceStackMonitorRemove(pvTask), xTraceObjectUnregisterWithoutHandle(PSF_EVENT_TASK_DELETE, pvTask, uxPriority))
|
||||
|
||||
/**
|
||||
* @brief Sets trace task name without trace task handle.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] szName Name.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskSetNameWithoutHandle xTraceObjectSetNameWithoutHandle
|
||||
|
||||
/**
|
||||
* @brief Sets trace task priority without trace task handle.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] uxPriority Priority.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskSetPriorityWithoutHandle(void* pvTask, TraceUnsignedBaseType_t uxPriority);
|
||||
|
||||
/**
|
||||
* @brief Registers trace task switch event.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
* @param[in] uxPriority Priority.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskSwitch(void* pvTask, TraceUnsignedBaseType_t uxPriority);
|
||||
|
||||
#if (TRC_CFG_INCLUDE_READY_EVENTS == 1)
|
||||
/**
|
||||
* @brief Registers trace task ready event.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskReady(void* pvTask);
|
||||
#else
|
||||
#define xTraceTaskReady(p) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)p, TRC_SUCCESS)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Sets current trace task.
|
||||
*
|
||||
* @param[in] pvTask Task.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskSetCurrent(pvTask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(pxTraceTaskInfo->coreTasks[TRC_CFG_GET_CURRENT_CORE()] = (pvTask), TRC_SUCCESS)
|
||||
|
||||
/**
|
||||
* @brief Gets current trace task.
|
||||
*
|
||||
* @param[out] ppvTask Task.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
#define xTraceTaskGetCurrent(ppvTask) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2(*(ppvTask) = pxTraceTaskInfo->coreTasks[TRC_CFG_GET_CURRENT_CORE()], TRC_SUCCESS)
|
||||
|
||||
/**
|
||||
* @brief Registers trace task instance finished event.
|
||||
*
|
||||
* This routine creates a trace event that ends the current task instance at
|
||||
* this very instant. This makes the viewer split the current fragment at
|
||||
* this point and begin a new actor instance, even if no task-switch has
|
||||
* occurred
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskInstanceFinishedNow(void);
|
||||
|
||||
/**
|
||||
* @brief Marks the current trace task instance as finished on the next
|
||||
* kernel call.
|
||||
*
|
||||
* If that kernel call is blocking, the instance ends after the blocking event
|
||||
* and the corresponding return event is then the start of the next instance.
|
||||
* If the kernel call is not blocking, the viewer instead splits the current
|
||||
* fragment right before the kernel call, which makes this call the first event
|
||||
* of the next instance.
|
||||
*
|
||||
* @retval TRC_FAIL Failure
|
||||
* @retval TRC_SUCCESS Success
|
||||
*/
|
||||
traceResult xTraceTaskInstanceFinishedNext(void);
|
||||
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING) */
|
||||
|
||||
#endif /* (TRC_USE_TRACEALYZER_RECORDER == 1) */
|
||||
|
||||
#endif /* TRC_TASK_H */
|
Loading…
Add table
Add a link
Reference in a new issue