TraceRecorder demo added in CORTEX_MPS2_QEMU_IAR_GCC (#1320)
* * Added TraceRecorder demo for Percepio View in CORTEX_MPS2_QEMU_IAR_GCC (only gcc supported at the moment) * * Added TraceRecorder demo instructions in readme.md. * * Updated FreeRTOS-Plus-Trace pointer * * Using FreeRTOS-Plus-Trace submodule (TraceRecorder) instead of a static TraceRecorder copy.pull/1255/merge
parent
642e2ecfc7
commit
6d364f0b1f
@ -1 +1 @@
|
|||||||
Subproject commit 3aa03556bdb47641d6ff0c95416d16e42a8cdc02
|
Subproject commit 45086cef5c85ab01526a811d0dc2880fad3e384f
|
@ -0,0 +1,338 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Main configuration parameters for the trace recorder library.
|
||||||
|
* More settings can be found in trcStreamingConfig.h and trcSnapshotConfig.h.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_CONFIG_H
|
||||||
|
#define TRC_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Include of processor header file
|
||||||
|
*
|
||||||
|
* Here you may need to include the header file for your processor. This is
|
||||||
|
* required at least for the ARM Cortex-M port, that uses the ARM CMSIS API.
|
||||||
|
* Try that in case of build problems. Otherwise, remove the #error line below.
|
||||||
|
*****************************************************************************/
|
||||||
|
//#error "Trace Recorder: Please include your processor's header file here and remove this line."
|
||||||
|
|
||||||
|
/* TODO TraceRecorder (Step 6): For Arm Cortex-M devices, include cmsis.h here. */
|
||||||
|
#include <cmsis.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_HARDWARE_PORT
|
||||||
|
* @brief Specify what hardware port to use (i.e., the "timestamping driver").
|
||||||
|
*
|
||||||
|
* All ARM Cortex-M MCUs are supported by "TRC_HARDWARE_PORT_ARM_Cortex_M".
|
||||||
|
* This port uses the DWT cycle counter for Cortex-M3/M4/M7 devices, which is
|
||||||
|
* available on most such devices. In case your device don't have DWT support,
|
||||||
|
* you will get an error message opening the trace. In that case, you may
|
||||||
|
* force the recorder to use SysTick timestamping instead, using this define:
|
||||||
|
*
|
||||||
|
* #define TRC_CFG_ARM_CM_USE_SYSTICK
|
||||||
|
*
|
||||||
|
* For ARM Cortex-M0/M0+ devices, SysTick mode is used automatically.
|
||||||
|
*
|
||||||
|
* See trcHardwarePort.h for available ports and information on how to
|
||||||
|
* define your own port, if not already present.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO TraceRecorder (Step 7): Select the Arm Cortex-M hardware port. */
|
||||||
|
#define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M
|
||||||
|
|
||||||
|
/* Needed to use TraceRecorder on QEMU - specifies using SysTick counter
|
||||||
|
* for timestamping, instead of DWT cycle counter (default but unsupported on qemu) */
|
||||||
|
#define TRC_CFG_ARM_CM_USE_SYSTICK
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_SCHEDULING_ONLY
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* If this setting is enabled (= 1), only scheduling events are recorded.
|
||||||
|
* If disabled (= 0), all events are recorded (unless filtered in other ways).
|
||||||
|
*
|
||||||
|
* Default value is 0 (= include additional events).
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_SCHEDULING_ONLY 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_MEMMANG_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* This controls if malloc and free calls should be traced. Set this to zero (0)
|
||||||
|
* to exclude malloc/free calls, or one (1) to include such events in the trace.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_MEMMANG_EVENTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_USER_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), all code related to User Events is excluded in order
|
||||||
|
* to reduce code size. Any attempts of storing User Events are then silently
|
||||||
|
* ignored.
|
||||||
|
*
|
||||||
|
* User Events are application-generated events, like "printf" but for the
|
||||||
|
* trace log, generated using vTracePrint and vTracePrintF.
|
||||||
|
* The formatting is done on host-side, by Tracealyzer. User Events are
|
||||||
|
* therefore much faster than a console printf and can often be used
|
||||||
|
* in timing critical code without problems.
|
||||||
|
*
|
||||||
|
* Note: In streaming mode, User Events are used to provide error messages
|
||||||
|
* and warnings from the recorder (in case of incorrect configuration) for
|
||||||
|
* display in Tracealyzer. Disabling user events will also disable these
|
||||||
|
* warnings. You can however still catch them by calling xTraceErrorGetLast
|
||||||
|
* or by putting breakpoints in xTraceError and xTraceWarning.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_USER_EVENTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_ISR_TRACING
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), the code for recording Interrupt Service Routines is
|
||||||
|
* excluded, in order to reduce code size. This means that any calls to
|
||||||
|
* vTraceStoreISRBegin/vTraceStoreISREnd will be ignored.
|
||||||
|
* This does not completely disable ISR tracing, in cases where an ISR is
|
||||||
|
* calling a traced kernel service. These events will still be recorded and
|
||||||
|
* show up in anonymous ISR instances in Tracealyzer, with names such as
|
||||||
|
* "ISR sending to <queue name>".
|
||||||
|
* To disable such tracing, please refer to vTraceSetFilterGroup and
|
||||||
|
* vTraceSetFilterMask.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*
|
||||||
|
* Note: tracing ISRs requires that you insert calls to vTraceStoreISRBegin
|
||||||
|
* and vTraceStoreISREnd in your interrupt handlers.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_ISR_TRACING 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_READY_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If one (1), events are recorded when tasks enter scheduling state "ready".
|
||||||
|
* This allows Tracealyzer to show the initial pending time before tasks enter
|
||||||
|
* the execution state and present accurate response times in the statistics
|
||||||
|
* report.
|
||||||
|
* If zero (0), "ready events" are not created, which allows for recording
|
||||||
|
* longer traces in the same amount of RAM. This will however cause
|
||||||
|
* Tracealyzer to report a single instance for each actor and prevent accurate
|
||||||
|
* response times in the statistics report.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_READY_EVENTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_OSTICK_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is one (1), events will be generated whenever the OS clock is
|
||||||
|
* increased. If zero (0), OS tick events are not generated, which allows for
|
||||||
|
* recording longer traces in the same amount of RAM.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO TraceRecorder (Tweak 2): Disabling OS tick event tracing (to reduce event rate). */
|
||||||
|
#define TRC_CFG_INCLUDE_OSTICK_EVENTS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_ENABLE_STACK_MONITOR
|
||||||
|
* @brief If enabled (1), the recorder periodically reports the unused stack space of
|
||||||
|
* all active tasks.
|
||||||
|
* The stack monitoring runs in the Tracealyzer Control task, TzCtrl. This task
|
||||||
|
* is always created by the recorder when in streaming mode.
|
||||||
|
* In snapshot mode, the TzCtrl task is only used for stack monitoring and is
|
||||||
|
* not created unless this is enabled.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_ENABLE_STACK_MONITOR 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_STACK_MONITOR_MAX_TASKS
|
||||||
|
* @brief Macro which should be defined as a non-zero integer value.
|
||||||
|
*
|
||||||
|
* This controls how many tasks that can be monitored by the stack monitor.
|
||||||
|
* If this is too small, some tasks will be excluded and a warning is shown.
|
||||||
|
*
|
||||||
|
* Default value is 10.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_STACK_MONITOR_MAX_TASKS 10
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_STACK_MONITOR_MAX_REPORTS
|
||||||
|
* @brief Macro which should be defined as a non-zero integer value.
|
||||||
|
*
|
||||||
|
* This defines how many tasks that will be subject to stack usage analysis for
|
||||||
|
* each execution of the Tracealyzer Control task (TzCtrl). Note that the stack
|
||||||
|
* monitoring cycles between the tasks, so this does not affect WHICH tasks that
|
||||||
|
* are monitored, but HOW OFTEN each task stack is analyzed.
|
||||||
|
*
|
||||||
|
* This setting can be combined with TRC_CFG_CTRL_TASK_DELAY to tune the
|
||||||
|
* frequency of the stack monitoring. This is motivated since the stack analysis
|
||||||
|
* can take some time to execute.
|
||||||
|
* However, note that the stack analysis runs in a separate task (TzCtrl) that
|
||||||
|
* can be executed on low priority. This way, you can avoid that the stack
|
||||||
|
* analysis disturbs any time-sensitive tasks.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_STACK_MONITOR_MAX_REPORTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_CTRL_TASK_PRIORITY
|
||||||
|
* @brief The scheduling priority of the Tracealyzer Control (TzCtrl) task.
|
||||||
|
*
|
||||||
|
* In streaming mode, TzCtrl is used to receive start/stop commands from
|
||||||
|
* Tracealyzer and in some cases also to transmit the trace data (for stream
|
||||||
|
* ports that uses the internal buffer, like TCP/IP). For such stream ports,
|
||||||
|
* make sure the TzCtrl priority is high enough to ensure reliable periodic
|
||||||
|
* execution and transfer of the data, but low enough to avoid disturbing any
|
||||||
|
* time-sensitive functions.
|
||||||
|
*
|
||||||
|
* In Snapshot mode, TzCtrl is only used for the stack usage monitoring and is
|
||||||
|
* not created if stack monitoring is disabled. TRC_CFG_CTRL_TASK_PRIORITY should
|
||||||
|
* be low, to avoid disturbing any time-sensitive tasks.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_CTRL_TASK_PRIORITY 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_CTRL_TASK_DELAY
|
||||||
|
* @brief The delay between loops of the TzCtrl task (see TRC_CFG_CTRL_TASK_PRIORITY),
|
||||||
|
* which affects the frequency of the stack monitoring.
|
||||||
|
*
|
||||||
|
* In streaming mode, this also affects the trace data transfer if you are using
|
||||||
|
* a stream port leveraging the internal buffer (like TCP/IP). A shorter delay
|
||||||
|
* increases the CPU load of TzCtrl somewhat, but may improve the performance of
|
||||||
|
* of the trace streaming, especially if the trace buffer is small.
|
||||||
|
*
|
||||||
|
* The unit depends on the delay function used for the specific kernel port (trcKernelPort.c).
|
||||||
|
* For example, FreeRTOS uses ticks while Zephyr uses ms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TRC_CFG_CTRL_TASK_DELAY 0xFFFFFFFF
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_CTRL_TASK_STACK_SIZE
|
||||||
|
* @brief The stack size of the Tracealyzer Control (TzCtrl) task.
|
||||||
|
* See TRC_CFG_CTRL_TASK_PRIORITY for further information about TzCtrl.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_CTRL_TASK_STACK_SIZE 256
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_RECORDER_BUFFER_ALLOCATION
|
||||||
|
* @brief Specifies how the recorder buffer is allocated (also in case of streaming, in
|
||||||
|
* port using the recorder's internal temporary buffer)
|
||||||
|
*
|
||||||
|
* Values:
|
||||||
|
* TRC_RECORDER_BUFFER_ALLOCATION_STATIC - Static allocation (internal)
|
||||||
|
* TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC - Malloc in vTraceEnable
|
||||||
|
* TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM - Use vTraceSetRecorderDataBuffer
|
||||||
|
*
|
||||||
|
* Static and dynamic mode does the allocation for you, either in compile time
|
||||||
|
* (static) or in runtime (malloc).
|
||||||
|
* The custom mode allows you to control how and where the allocation is made,
|
||||||
|
* for details see TRC_ALLOC_CUSTOM_BUFFER and vTraceSetRecorderDataBuffer().
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_RECORDER_BUFFER_ALLOCATION TRC_RECORDER_BUFFER_ALLOCATION_STATIC
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_MAX_ISR_NESTING
|
||||||
|
* @brief Defines how many levels of interrupt nesting the recorder can handle, in
|
||||||
|
* case multiple ISRs are traced and ISR nesting is possible. If this
|
||||||
|
* is exceeded, the particular ISR will not be traced and the recorder then
|
||||||
|
* logs an error message. This setting is used to allocate an internal stack
|
||||||
|
* for keeping track of the previous execution context (4 byte per entry).
|
||||||
|
*
|
||||||
|
* This value must be a non-zero positive constant, at least 1.
|
||||||
|
*
|
||||||
|
* Default value: 8
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_MAX_ISR_NESTING 8
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_ISR_TAILCHAINING_THRESHOLD
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* If tracing multiple ISRs, this setting allows for accurate display of the
|
||||||
|
* context-switching also in cases when the ISRs execute in direct sequence.
|
||||||
|
*
|
||||||
|
* vTraceStoreISREnd normally assumes that the ISR returns to the previous
|
||||||
|
* context, i.e., a task or a preempted ISR. But if another traced ISR
|
||||||
|
* executes in direct sequence, Tracealyzer may incorrectly display a minimal
|
||||||
|
* fragment of the previous context in between the ISRs.
|
||||||
|
*
|
||||||
|
* By using TRC_CFG_ISR_TAILCHAINING_THRESHOLD you can avoid this. This is
|
||||||
|
* however a threshold value that must be measured for your specific setup.
|
||||||
|
* See http://percepio.com/2014/03/21/isr_tailchaining_threshold/
|
||||||
|
*
|
||||||
|
* The default setting is 0, meaning "disabled" and that you may get an
|
||||||
|
* extra fragments of the previous context in between tail-chained ISRs.
|
||||||
|
*
|
||||||
|
* Note: This setting has separate definitions in trcSnapshotConfig.h and
|
||||||
|
* trcStreamingConfig.h, since it is affected by the recorder mode.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_ISR_TAILCHAINING_THRESHOLD 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_RECORDER_DATA_INIT
|
||||||
|
* @brief Macro which states whether the recorder data should have an initial value.
|
||||||
|
*
|
||||||
|
* In very specific cases where traced objects are created before main(),
|
||||||
|
* the recorder will need to be started even before that. In these cases,
|
||||||
|
* the recorder data would be initialized by vTraceEnable(TRC_INIT) but could
|
||||||
|
* then later be overwritten by the initialization value.
|
||||||
|
* If this is an issue for you, set TRC_CFG_RECORDER_DATA_INIT to 0.
|
||||||
|
* The following code can then be used before any traced objects are created:
|
||||||
|
*
|
||||||
|
* extern uint32_t RecorderInitialized;
|
||||||
|
* RecorderInitialized = 0;
|
||||||
|
* xTraceInitialize();
|
||||||
|
*
|
||||||
|
* After the clocks are properly initialized, use vTraceEnable(...) to start
|
||||||
|
* the tracing.
|
||||||
|
*
|
||||||
|
* Default value is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_RECORDER_DATA_INIT 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_RECORDER_DATA_ATTRIBUTE
|
||||||
|
* @brief When setting TRC_CFG_RECORDER_DATA_INIT to 0, you might also need to make
|
||||||
|
* sure certain recorder data is placed in a specific RAM section to avoid being
|
||||||
|
* zeroed out after initialization. Define TRC_CFG_RECORDER_DATA_ATTRIBUTE as
|
||||||
|
* that attribute.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* #define TRC_CFG_RECORDER_DATA_ATTRIBUTE __attribute__((section(".bss.trace_recorder_data")))
|
||||||
|
*
|
||||||
|
* Default value is empty.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_RECORDER_DATA_ATTRIBUTE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_USE_TRACE_ASSERT
|
||||||
|
* @brief Enable or disable debug asserts. Information regarding any assert that is
|
||||||
|
* triggered will be in trcAssert.c.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_USE_TRACE_ASSERT 1
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _TRC_CONFIG_H */
|
@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Configuration parameters for the kernel port.
|
||||||
|
* More settings can be found in trcKernelPortStreamingConfig.h and
|
||||||
|
* trcKernelPortSnapshotConfig.h.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_KERNEL_PORT_CONFIG_H
|
||||||
|
#define TRC_KERNEL_PORT_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_RECORDER_MODE
|
||||||
|
* @brief Specify what recording mode to use. Snapshot means that the data is saved in
|
||||||
|
* an internal RAM buffer, for later upload. Streaming means that the data is
|
||||||
|
* transferred continuously to the host PC.
|
||||||
|
*
|
||||||
|
* For more information, see http://percepio.com/2016/10/05/rtos-tracing/
|
||||||
|
* and the Tracealyzer User Manual.
|
||||||
|
*
|
||||||
|
* Values:
|
||||||
|
* TRC_RECORDER_MODE_SNAPSHOT (no longer used)
|
||||||
|
* TRC_RECORDER_MODE_STREAMING (supports snapshots and streaming)
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_FREERTOS_VERSION
|
||||||
|
* @brief Specify what version of FreeRTOS that is used (don't change unless using the
|
||||||
|
* trace recorder library with an older version of FreeRTOS).
|
||||||
|
*
|
||||||
|
* TRC_FREERTOS_VERSION_7_3_X If using FreeRTOS v7.3.X
|
||||||
|
* TRC_FREERTOS_VERSION_7_4_X If using FreeRTOS v7.4.X
|
||||||
|
* TRC_FREERTOS_VERSION_7_5_X If using FreeRTOS v7.5.X
|
||||||
|
* TRC_FREERTOS_VERSION_7_6_X If using FreeRTOS v7.6.X
|
||||||
|
* TRC_FREERTOS_VERSION_8_X_X If using FreeRTOS v8.X.X
|
||||||
|
* TRC_FREERTOS_VERSION_9_0_0 If using FreeRTOS v9.0.0
|
||||||
|
* TRC_FREERTOS_VERSION_9_0_1 If using FreeRTOS v9.0.1
|
||||||
|
* TRC_FREERTOS_VERSION_9_0_2 If using FreeRTOS v9.0.2
|
||||||
|
* TRC_FREERTOS_VERSION_10_0_0 If using FreeRTOS v10.0.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_0_1 If using FreeRTOS v10.0.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_1_0 If using FreeRTOS v10.1.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_1_1 If using FreeRTOS v10.1.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_2_0 If using FreeRTOS v10.2.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_2_1 If using FreeRTOS v10.2.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_3_0 If using FreeRTOS v10.3.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_3_1 If using FreeRTOS v10.3.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_4_0 If using FreeRTOS v10.4.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_4_1 If using FreeRTOS v10.4.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_4_2 If using FreeRTOS v10.4.2
|
||||||
|
* TRC_FREERTOS_VERSION_10_4_3 If using FreeRTOS v10.4.3
|
||||||
|
* TRC_FREERTOS_VERSION_10_5_0 If using FreeRTOS v10.5.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_5_1 If using FreeRTOS v10.5.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_6_0 If using FreeRTOS v10.6.0
|
||||||
|
* TRC_FREERTOS_VERSION_10_6_1 If using FreeRTOS v10.6.1
|
||||||
|
* TRC_FREERTOS_VERSION_10_6_2 If using FreeRTOS v10.6.2
|
||||||
|
* TRC_FREERTOS_VERSION_11_0_0 If using FreeRTOS v11.0.0
|
||||||
|
* TRC_FREERTOS_VERSION_11_0_1 If using FreeRTOS v11.0.1
|
||||||
|
* TRC_FREERTOS_VERSION_11_1_0 If using FreeRTOS v11.1.0 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO TraceRecorder (Step 8): Specify FreeRTOS version here. */
|
||||||
|
#define TRC_CFG_FREERTOS_VERSION TRC_FREERTOS_VERSION_11_1_0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_EVENT_GROUP_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), the trace will exclude any "event group" events.
|
||||||
|
*
|
||||||
|
* Default value is 0 (excluded) since dependent on event_groups.c
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_EVENT_GROUP_EVENTS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_TIMER_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), the trace will exclude any Timer events.
|
||||||
|
*
|
||||||
|
* Default value is 0 since dependent on timers.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO TraceRecorder (Tweak 1): Enabling Timer event tracing. */
|
||||||
|
/* Note: Only the "optional" FreeRTOS services mentioned in this file
|
||||||
|
* needs to be enabled in the tracing. Others are included by default.*/
|
||||||
|
#define TRC_CFG_INCLUDE_TIMER_EVENTS 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_PEND_FUNC_CALL_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), the trace will exclude any "pending function call"
|
||||||
|
* events, such as xTimerPendFunctionCall().
|
||||||
|
*
|
||||||
|
* Default value is 0 since dependent on timers.c
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_PEND_FUNC_CALL_EVENTS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_STREAM_BUFFER_EVENTS
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), the trace will exclude any stream buffer or message
|
||||||
|
* buffer events.
|
||||||
|
*
|
||||||
|
* Default value is 0 since dependent on stream_buffer.c (new in FreeRTOS v10)
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_STREAM_BUFFER_EVENTS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_ACKNOWLEDGE_QUEUE_SET_SEND
|
||||||
|
* @brief When using FreeRTOS v10.3.0 or v10.3.1, please make sure that the trace
|
||||||
|
* point in prvNotifyQueueSetContainer() in queue.c is renamed from
|
||||||
|
* traceQUEUE_SEND to traceQUEUE_SET_SEND in order to tell them apart from
|
||||||
|
* other traceQUEUE_SEND trace points. Then set this to TRC_ACKNOWLEDGED.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_ACKNOWLEDGE_QUEUE_SET_SEND 0 /* TRC_ACKNOWLEDGED */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* TRC_KERNEL_PORT_CONFIG_H */
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Kernel port configuration parameters for snapshot mode.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_KERNEL_PORT_SNAPSHOT_CONFIG_H
|
||||||
|
#define TRC_KERNEL_PORT_SNAPSHOT_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_NTASK, TRC_CFG_NISR, TRC_CFG_NQUEUE, TRC_CFG_NSEMAPHORE...
|
||||||
|
* @brief A group of macros which should be defined as integer values, zero or larger.
|
||||||
|
*
|
||||||
|
* These define the capacity of the Object Property Table, i.e., the maximum
|
||||||
|
* number of objects active at any given point, within each object class (e.g.,
|
||||||
|
* task, queue, semaphore, ...).
|
||||||
|
*
|
||||||
|
* If tasks or other objects are deleted in your system, this
|
||||||
|
* setting does not limit the total amount of objects created, only the number
|
||||||
|
* of objects that have been successfully created but not yet deleted.
|
||||||
|
*
|
||||||
|
* Using too small values will cause vTraceError to be called, which stores an
|
||||||
|
* error message in the trace that is shown when opening the trace file. The
|
||||||
|
* error message can also be retrieved using xTraceGetLastError.
|
||||||
|
*
|
||||||
|
* It can be wise to start with large values for these constants,
|
||||||
|
* unless you are very confident on these numbers. Then do a recording and
|
||||||
|
* check the actual usage by selecting View menu -> Trace Details ->
|
||||||
|
* Resource Usage -> Object Table.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_NTASK 15
|
||||||
|
#define TRC_CFG_NISR 5
|
||||||
|
#define TRC_CFG_NQUEUE 10
|
||||||
|
#define TRC_CFG_NSEMAPHORE 10
|
||||||
|
#define TRC_CFG_NMUTEX 10
|
||||||
|
#define TRC_CFG_NTIMER 5
|
||||||
|
#define TRC_CFG_NEVENTGROUP 5
|
||||||
|
#define TRC_CFG_NSTREAMBUFFER 5
|
||||||
|
#define TRC_CFG_NMESSAGEBUFFER 5
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_NAME_LEN_TASK, TRC_CFG_NAME_LEN_QUEUE, ...
|
||||||
|
* @brief Macros that specify the maximum lengths (number of characters) for names of
|
||||||
|
* kernel objects, such as tasks and queues. If longer names are used, they will
|
||||||
|
* be truncated when stored in the recorder.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_NAME_LEN_TASK 15
|
||||||
|
#define TRC_CFG_NAME_LEN_ISR 15
|
||||||
|
#define TRC_CFG_NAME_LEN_QUEUE 15
|
||||||
|
#define TRC_CFG_NAME_LEN_SEMAPHORE 15
|
||||||
|
#define TRC_CFG_NAME_LEN_MUTEX 15
|
||||||
|
#define TRC_CFG_NAME_LEN_TIMER 15
|
||||||
|
#define TRC_CFG_NAME_LEN_EVENTGROUP 15
|
||||||
|
#define TRC_CFG_NAME_LEN_STREAMBUFFER 15
|
||||||
|
#define TRC_CFG_NAME_LEN_MESSAGEBUFFER 15
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* TRC_KERNEL_PORT_SNAPSHOT_CONFIG_H */
|
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Kernel port configuration parameters for streaming mode.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_KERNEL_PORT_STREAMING_CONFIG_H
|
||||||
|
#define TRC_KERNEL_PORT_STREAMING_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Nothing yet */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* TRC_KERNEL_PORT_STREAMING_CONFIG_H */
|
@ -0,0 +1,245 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Configuration parameters for trace recorder library in snapshot mode.
|
||||||
|
* Read more at http://percepio.com/2016/10/05/rtos-tracing/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_SNAPSHOT_CONFIG_H
|
||||||
|
#define TRC_SNAPSHOT_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_SNAPSHOT_MODE
|
||||||
|
* @brief Macro which should be defined as one of:
|
||||||
|
* - TRC_SNAPSHOT_MODE_RING_BUFFER
|
||||||
|
* - TRC_SNAPSHOT_MODE_STOP_WHEN_FULL
|
||||||
|
* Default is TRC_SNAPSHOT_MODE_RING_BUFFER.
|
||||||
|
*
|
||||||
|
* With TRC_CFG_SNAPSHOT_MODE set to TRC_SNAPSHOT_MODE_RING_BUFFER, the
|
||||||
|
* events are stored in a ring buffer, i.e., where the oldest events are
|
||||||
|
* overwritten when the buffer becomes full. This allows you to get the last
|
||||||
|
* events leading up to an interesting state, e.g., an error, without having
|
||||||
|
* to store the whole run since startup.
|
||||||
|
*
|
||||||
|
* When TRC_CFG_SNAPSHOT_MODE is TRC_SNAPSHOT_MODE_STOP_WHEN_FULL, the
|
||||||
|
* recording is stopped when the buffer becomes full. This is useful for
|
||||||
|
* recording events following a specific state, e.g., the startup sequence.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_SNAPSHOT_MODE TRC_SNAPSHOT_MODE_RING_BUFFER
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_EVENT_BUFFER_SIZE
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* This defines the capacity of the event buffer, i.e., the number of records
|
||||||
|
* it may store. Most events use one record (4 byte), although some events
|
||||||
|
* require multiple 4-byte records. You should adjust this to the amount of RAM
|
||||||
|
* available in the target system.
|
||||||
|
*
|
||||||
|
* Default value is 1000, which means that 4000 bytes is allocated for the
|
||||||
|
* event buffer.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_EVENT_BUFFER_SIZE 1000
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_INCLUDE_FLOAT_SUPPORT
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If this is zero (0), the support for logging floating point values in
|
||||||
|
* vTracePrintF is stripped out, in case floating point values are not used or
|
||||||
|
* supported by the platform used.
|
||||||
|
*
|
||||||
|
* Floating point values are only used in vTracePrintF and its subroutines, to
|
||||||
|
* allow for storing float (%f) or double (%lf) arguments.
|
||||||
|
*
|
||||||
|
* vTracePrintF can be used with integer and string arguments in either case.
|
||||||
|
*
|
||||||
|
* Default value is 0.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_INCLUDE_FLOAT_SUPPORT 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_SYMBOL_TABLE_SIZE
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* This defines the capacity of the symbol table, in bytes. This symbol table
|
||||||
|
* stores User Events labels and names of deleted tasks, queues, or other kernel
|
||||||
|
* objects. If you don't use User Events or delete any kernel
|
||||||
|
* objects you set this to a very low value. The minimum recommended value is 4.
|
||||||
|
* A size of zero (0) is not allowed since a zero-sized array may result in a
|
||||||
|
* 32-bit pointer, i.e., using 4 bytes rather than 0.
|
||||||
|
*
|
||||||
|
* Default value is 800.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_SYMBOL_TABLE_SIZE 800
|
||||||
|
|
||||||
|
#if (TRC_CFG_SYMBOL_TABLE_SIZE == 0)
|
||||||
|
#error "TRC_CFG_SYMBOL_TABLE_SIZE may not be zero!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*** ADVANCED SETTINGS ********************************************************
|
||||||
|
******************************************************************************
|
||||||
|
* The remaining settings are not necessary to modify but allows for optimizing
|
||||||
|
* the recorder setup for your specific needs, e.g., to exclude events that you
|
||||||
|
* are not interested in, in order to get longer traces.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_HEAP_SIZE_BELOW_16M
|
||||||
|
* @brief An integer constant that can be used to reduce the buffer usage of memory
|
||||||
|
* allocation events (malloc/free). This value should be 1 if the heap size is
|
||||||
|
* below 16 MB (2^24 byte), and you can live with reported addresses showing the
|
||||||
|
* lower 24 bits only. If 0, you get the full 32-bit addresses.
|
||||||
|
*
|
||||||
|
* Default value is 0.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_HEAP_SIZE_BELOW_16M 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_USE_IMPLICIT_IFE_RULES
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
* Default is 1.
|
||||||
|
*
|
||||||
|
* Tracealyzer groups the events into "instances" based on Instance Finish
|
||||||
|
* Events (IFEs), produced either by default rules or calls to the recorder
|
||||||
|
* functions xTraceTaskInstanceFinishedNow and xTraceTaskInstanceFinishedNext.
|
||||||
|
*
|
||||||
|
* If TRC_CFG_USE_IMPLICIT_IFE_RULES is one (1), the default IFE rules is
|
||||||
|
* used, resulting in a "typical" grouping of events into instances.
|
||||||
|
* If these rules don't give appropriate instances in your case, you can
|
||||||
|
* override the default rules using xTraceTaskInstanceFinishedNow/Next for one
|
||||||
|
* or several tasks. The default IFE rules are then disabled for those tasks.
|
||||||
|
*
|
||||||
|
* If TRC_CFG_USE_IMPLICIT_IFE_RULES is zero (0), the implicit IFE rules are
|
||||||
|
* disabled globally. You must then call xTraceTaskInstanceFinishedNow or
|
||||||
|
* xTraceTaskInstanceFinishedNext to manually group the events into instances,
|
||||||
|
* otherwise the tasks will appear a single long instance.
|
||||||
|
*
|
||||||
|
* The default IFE rules count the following events as "instance finished":
|
||||||
|
* - Task delay, delay until
|
||||||
|
* - Task suspend
|
||||||
|
* - Blocking on "input" operations, i.e., when the task is waiting for the
|
||||||
|
* next a message/signal/event. But only if this event is blocking.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_USE_IMPLICIT_IFE_RULES 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_USE_16BIT_OBJECT_HANDLES
|
||||||
|
* @brief Macro which should be defined as either zero (0) or one (1).
|
||||||
|
*
|
||||||
|
* If set to 0 (zero), the recorder uses 8-bit handles to identify kernel
|
||||||
|
* objects such as tasks and queues. This limits the supported number of
|
||||||
|
* concurrently active objects to 255 of each type (tasks, queues, mutexes,
|
||||||
|
* etc.) Note: 255, not 256, since handle 0 is reserved.
|
||||||
|
*
|
||||||
|
* If set to 1 (one), the recorder uses 16-bit handles to identify kernel
|
||||||
|
* objects such as tasks and queues. This limits the supported number of
|
||||||
|
* concurrent objects to 65535 of each type (object class). However, since the
|
||||||
|
* object property table is limited to 64 KB, the practical limit is about
|
||||||
|
* 3000 objects in total.
|
||||||
|
*
|
||||||
|
* Default is 0 (8-bit handles)
|
||||||
|
*
|
||||||
|
* NOTE: An object with handle above 255 will use an extra 4-byte record in
|
||||||
|
* the event buffer whenever the object is referenced. Moreover, some internal
|
||||||
|
* tables in the recorder gets slightly larger when using 16-bit handles.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_USE_16BIT_OBJECT_HANDLES 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* Set TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER to 1 to enable the
|
||||||
|
* separate user event buffer (UB).
|
||||||
|
* In this mode, user events are stored separately from other events,
|
||||||
|
* e.g., RTOS events. Thereby you can get a much longer history of
|
||||||
|
* user events as they don't need to share the buffer space with more
|
||||||
|
* frequent events.
|
||||||
|
*
|
||||||
|
* The UB is typically used with the snapshot ring-buffer mode, so the
|
||||||
|
* recording can continue when the main buffer gets full. And since the
|
||||||
|
* main buffer then overwrites the earliest events, Tracealyzer displays
|
||||||
|
* "Unknown Actor" instead of task scheduling for periods with UB data only.
|
||||||
|
*
|
||||||
|
* In UB mode, user events are structured as UB channels, which contains
|
||||||
|
* a channel name and a default format string. Register a UB channel using
|
||||||
|
* xTraceRegisterUBChannel.
|
||||||
|
*
|
||||||
|
* Events and data arguments are written using vTraceUBEvent and
|
||||||
|
* vTraceUBData. They are designed to provide efficient logging of
|
||||||
|
* repeating events, using the same format string within each channel.
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* TraceStringHandle_t chn1;
|
||||||
|
* TraceStringHandle_t fmt1;
|
||||||
|
* xTraceStringRegister("Channel 1", &chn1);
|
||||||
|
* xTraceStringRegister("Event!", &fmt1);
|
||||||
|
* traceUBChannel UBCh1 = xTraceRegisterUBChannel(chn1, fmt1);
|
||||||
|
*
|
||||||
|
* TraceStringHandle_t chn2;
|
||||||
|
* TraceStringHandle_t fmt2;
|
||||||
|
* xTraceStringRegister("Channel 2", &chn2);
|
||||||
|
* xTraceStringRegister("X: %d, Y: %d", &fmt2);
|
||||||
|
* traceUBChannel UBCh2 = xTraceRegisterUBChannel(chn2, fmt2);
|
||||||
|
*
|
||||||
|
* // Result in "[Channel 1] Event!"
|
||||||
|
* vTraceUBEvent(UBCh1);
|
||||||
|
*
|
||||||
|
* // Result in "[Channel 2] X: 23, Y: 19"
|
||||||
|
* vTraceUBData(UBCh2, 23, 19);
|
||||||
|
*
|
||||||
|
* You can also use the other user event functions, like xTracePrintF.
|
||||||
|
* as they are then rerouted to the UB instead of the main event buffer.
|
||||||
|
* vTracePrintF then looks up the correct UB channel based on the
|
||||||
|
* provided channel name and format string, or creates a new UB channel
|
||||||
|
* if no match is found. The format string should therefore not contain
|
||||||
|
* "random" messages but mainly format specifiers. Random strings should
|
||||||
|
* be stored using %s and with the string as an argument.
|
||||||
|
*
|
||||||
|
* // Creates a new UB channel ("Channel 2", "%Z: %d")
|
||||||
|
* xTracePrintF(chn2, "%Z: %d", value1);
|
||||||
|
*
|
||||||
|
* // Finds the existing UB channel
|
||||||
|
* xTracePrintF(chn2, "%Z: %d", value2);
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_SEPARATE_USER_EVENT_BUFFER_SIZE
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* This defines the capacity of the user event buffer (UB), in number of slots.
|
||||||
|
* A single user event can use multiple slots, depending on the arguments.
|
||||||
|
*
|
||||||
|
* Only applicable if TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_SEPARATE_USER_EVENT_BUFFER_SIZE 200
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_UB_CHANNELS
|
||||||
|
* @brief Macro which should be defined as an integer value.
|
||||||
|
*
|
||||||
|
* This defines the number of User Event Buffer Channels (UB channels).
|
||||||
|
* These are used to structure the events when using the separate user
|
||||||
|
* event buffer, and contains both a User Event Channel (the name) and
|
||||||
|
* a default format string for the channel.
|
||||||
|
*
|
||||||
|
* Only applicable if TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER is 1.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_UB_CHANNELS 32
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*TRC_SNAPSHOT_CONFIG_H*/
|
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* The configuration for trace streaming ("stream ports").
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_STREAM_PORT_CONFIG_H
|
||||||
|
#define TRC_STREAM_PORT_CONFIG_H
|
||||||
|
|
||||||
|
#if (TRC_USE_TRACEALYZER_RECORDER == 1)
|
||||||
|
|
||||||
|
#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
|
||||||
|
|
||||||
|
#include <trcTypes.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Type flags */
|
||||||
|
#define TRC_STREAM_PORT_RINGBUFFER_MODE_STOP_WHEN_FULL (0U)
|
||||||
|
#define TRC_STREAM_PORT_RINGBUFFER_MODE_OVERWRITE_WHEN_FULL (1U)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_STREAM_PORT_BUFFER_SIZE
|
||||||
|
*
|
||||||
|
* @brief Defines the size of the ring buffer use for storing trace events.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO TraceRecorder (Tweak 3): Adjust the RingBuffer size here
|
||||||
|
* to increase trace length or reduce memory usage. */
|
||||||
|
#define TRC_CFG_STREAM_PORT_BUFFER_SIZE 10240
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_STREAM_PORT_BUFFER_MODE
|
||||||
|
*
|
||||||
|
* @brief Configures the behavior of the ring buffer when full.
|
||||||
|
*
|
||||||
|
* With TRC_CFG_STREAM_PORT_MODE set to TRC_STREAM_PORT_RINGBUFFER_MODE_OVERWRITE_WHEN_FULL, the
|
||||||
|
* events are stored in a ring buffer, i.e., where the oldest events are
|
||||||
|
* overwritten when the buffer becomes full. This allows you to get the last
|
||||||
|
* events leading up to an interesting state, e.g., an error, without having
|
||||||
|
* to store the whole run since startup.
|
||||||
|
*
|
||||||
|
* When TRC_CFG_STREAM_PORT_MODE is TRC_STREAM_PORT_RINGBUFFER_MODE_STOP_WHEN_FULL, the
|
||||||
|
* recording is stopped when the buffer becomes full. This is useful for
|
||||||
|
* recording events following a specific state, e.g., the startup sequence.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_STREAM_PORT_RINGBUFFER_MODE TRC_STREAM_PORT_RINGBUFFER_MODE_OVERWRITE_WHEN_FULL
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*(TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)*/
|
||||||
|
|
||||||
|
#endif /*(TRC_USE_TRACEALYZER_RECORDER == 1)*/
|
||||||
|
|
||||||
|
#endif /* TRC_STREAM_PORT_CONFIG_H */
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Trace Recorder for Tracealyzer v4.10.2
|
||||||
|
* Copyright 2023 Percepio AB
|
||||||
|
* www.percepio.com
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Configuration parameters for the trace recorder library in streaming mode.
|
||||||
|
* Read more at http://percepio.com/2016/10/05/rtos-tracing/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TRC_STREAMING_CONFIG_H
|
||||||
|
#define TRC_STREAMING_CONFIG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_ENTRY_SLOTS
|
||||||
|
* @brief The maximum number of objects and symbols that can be stored. This includes:
|
||||||
|
* - Task names
|
||||||
|
* - Named ISRs (vTraceSetISRProperties)
|
||||||
|
* - Named kernel objects (vTraceStoreKernelObjectName)
|
||||||
|
* - User event channels (xTraceStringRegister)
|
||||||
|
*
|
||||||
|
* If this value is too small, not all symbol names will be stored and the
|
||||||
|
* trace display will be affected. In that case, there will be warnings
|
||||||
|
* (as User Events) from TzCtrl task, that monitors this.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_ENTRY_SLOTS 50
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def TRC_CFG_ENTRY_SYMBOL_MAX_LENGTH
|
||||||
|
* @brief The maximum length of symbol names, including:
|
||||||
|
* - Task names
|
||||||
|
* - Named ISRs (vTraceSetISRProperties)
|
||||||
|
* - Named kernel objects (vTraceStoreKernelObjectName)
|
||||||
|
* - User event channel names (xTraceStringRegister)
|
||||||
|
*
|
||||||
|
* If longer symbol names are used, they will be truncated by the recorder,
|
||||||
|
* which will affect the trace display. In that case, there will be warnings
|
||||||
|
* (as User Events) from TzCtrl task, that monitors this.
|
||||||
|
*/
|
||||||
|
#define TRC_CFG_ENTRY_SYMBOL_MAX_LENGTH 28
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* TRC_STREAMING_CONFIG_H */
|
Loading…
Reference in New Issue