------------------------------------------------------------------------------- Tracealyzer Recorder Library for FreeRTOS ------------------------------------------------------------------------------- Tracealyzer is a sophisticated tool for tracing and visualization of FreeRTOS-based software systems. Tracealyzer gives an unprecedented insight into the runtime behavior, which speeds up debugging, validation and optimization. This, the Trace Recorder Library, is the target-side part of Tracealyzer, that performs the actual tracing. The resulting data can then be viewed in the Tracealyzer PC application, found at https://percepio.com/tracealyzer To learn more, see these links. - Getting Started (videos etc): https://percepio.com/gettingstarted - FAQ: https://percepio.com/category/faq In case you have any questions, don't hesitate to contact support@percepio.com Tracealyzer supports FreeRTOS v7.3 and newer, including Amazon FreeRTOS. ------------------------------------------------------------------------------- Changes, v4.1.4 -> v4.1.5 - Fixed a bug in the ITM stream port, that required Port 0 to be enabled. - Added missing include of stdio.h (needed by vTraceConsoleChannelPrintF). - Moved standard includes from trcRecorder.h into the .c files needing them. ------------------------------------------------------------------------------- Changes, v4.1.2 -> v4.1.4 - Fixed a compile error when certain FreeRTOS settings were used - Disabled filter support for FreeRTOS v7.3 since it uses "char" for object id ------------------------------------------------------------------------------- Changes, v4.1.0 -> v4.1.2 - Added vTraceConsoleChannelPrintF(...) ------------------------------------------------------------------------------- Changes, v4.0.3 -> v4.1.0 - Improved performance of User Events - Fixed handling of format strings ending with '%' - Improved handling of creative user configuration macros ------------------------------------------------------------------------------- Changes, v4.0.2 -> v4.0.3 - Minor fix for TCP/IP stream port. - Corrected default RTT mode setting. ------------------------------------------------------------------------------- Changes, v4.0.1 -> v4.0.2 - Memory allocation trace events now ignore filters. ------------------------------------------------------------------------------- Changes, v4.0.0 -> v4.0.1 - Minor fixes to default values. ------------------------------------------------------------------------------- Changes, v3.3.0 -> v4.0.0 - Fixed some issues with filters. ------------------------------------------------------------------------------- Changes, v3.2.0 -> v3.3.0 - Added support for FreeRTOS v10, including the new object types Message Buffer and Stream Buffer. - Improved the object-level filtering to also support Timer, Event Group, Message Buffer and Stream Buffer objects. - Fixed a few remaining build problems with older FreeRTOS versions (v7.x). - vTraceStoreISRBegin now reports an error on invalid handles, i.e., if the initialization of the handle (xTraceSetISRProperties) had not been made. ------------------------------------------------------------------------------- Changes, v3.1.2 -> v3.2.0 - Added new filtering system - that works in both snapshot and streaming mode. Filtering was previously not supported in streaming mode, but can be very useful for slower streaming interfaces. By exluding irrelevant events, the amount of data produced can be reduced a lot. * New functions vTraceSetFilterGroup and vTraceSetFilterMask allows for excluding all events from specific objects (like a semaphore or queue). * Added new "generic" filters (preprocessor level) to trcConfig.h, that exclude all events of a particular types. - TRC_CFG_INCLUDE_NOTIFY_EVENTS - TRC_CFG_INCLUDE_EVENT_GROUP_EVENTS - TRC_CFG_INCLUDE_PEND_FUNC_CALL_EVENTS - TRC_CFG_INCLUDE_TIMER_EVENTS * Upgraded some previous filters from "Snapshot only" to the Common API and thereby moved them from trcSnapshotConfig.h to trcConfig.h. - TRC_CFG_SCHEDULING_ONLY - TRC_CFG_INCLUDE_MEMMANG_EVENTS - TRC_CFG_INCLUDE_USER_EVENTS - TRC_CFG_INCLUDE_ISR_TRACING - TRC_CFG_INCLUDE_READY_EVENTS - TRC_CFG_INCLUDE_OSTICK_EVENTS * Removed the old filter system from trcSnapshotRecorder.c. - Improved streaming interface - Now only two (2) macros are needed to be defined in most cases, read and write. This makes it a lot easier to make custom stream ports. * Many definitions that were identical in most stream ports, have been replaced by default definitions in the recorder core. If needed, they can be overriden by custom definitions in trcStreamingPort.h. * Stream ports are now assumed to use recorder's internal event buffer. Other stream ports that writes directly to the streaming interface (like J-Link) should define TRC_STREAM_PORT_USE_INTERNAL_BUFFER as zero (0) to make it work correctly. * Macro TRC_STREAM_PORT_PERIODIC_SEND_DATA has been replaced by TRC_STREAM_PORT_WRITE_DATA. Together with TRC_STREAM_PORT_READ_DATA, this is all that is necessary for a typical stream port. * Return values from the stream port macros READ_DATA and WRITE_DATA are now checked. Expects 0 on success, anything else produces a warning that can be retrived using xTraceGetLastError() and also seen in Tracealyzer if a trace was produced. * Stream ports should no longer call prvPagedEventBufferInit explicitly (e.g. in TRC_STREAM_PORT_ON_TRACE_BEGIN). This is now called automatically if TRC_STREAM_PORT_USE_INTERNAL_BUFFER == 1. * Macros TRC_STREAM_PORT_ON_TRACE_BEGIN and TRC_STREAM_PORT_ON_TRACE_END are now unused by default and don't need to be defined. You can however use them to hook in some own function at these events. - Added two new stream ports * TCPIP-Win32: allows for testing the streaming on Windows ports of your RTOS, using Winsock. * File: example of streaming to a local file system (tested on Windows, but easy to modify). - Added support for FreeRTOS v9.0.1 * Replaced FreeRTOS version code TRC_FREERTOS_VERSION_9_X with - TRC_FREERTOS_VERSION_9_0_0 - TRC_FREERTOS_VERSION_9_0_1 * Using TRC_FREERTOS_VERSION_9_X is no longer allowed. - Added additional events for xQueuePeek, for blocking and timeouts events. - Added event for traceTIMER_EXPIRED, showing when the timer callback function is called. - Improved diagnostics in streaming mode, in case of errors in the recorder. * Added prvTraceWarning() - registers a "warning" error code, without stopping the recorder. Called if READ_DATA or WRITE_DATA returns a non-zero value, and in several other cases where the recorder configuration is incorrect (e.g., too small symbol table). * Added several new warning codes (PSF_WARNING_XYZ), corresponding to the issues detected by prvCheckRecorderStatus. * Fixed duplicate definitions of warning messages, so the warnings reported to Tracealyzer are the same as those provided in xTraceGetLastError(). * Added better explainations of warning/error messages in the body of xTraceGetLastError (in streaming mode). - Added xTraceIsRecordingEnabled() to Common API. - Added "unofficial" hardware port for Altera Nios-II. This is a user contribition, not yet verified by Percerpio. - Fixed bug in vTraceEnable - option TRC_START_AWAIT_HOST was ignored if already initialized. - Fixed a few remaining compiler warnings. - Changed order of some settings in trcConfig.h - moved advanced stuff to the bottom. - Removed SEGGER_RTT_Printf.c from the J-Link stream port since not required for Tracealyzer. ------------------------------------------------------------------------------- Changes, v3.1.1 -> v3.1.2 - Fixed two bugs related to User Events, one in vTracePrintF and other in vTracePrint. - Fixed a build problem related to a single reference of the old FreeRTOS type "xTaskHandle", in trcKernelPort.c. Changed to "TaskHandle_t", unless if using an older FreeRTOS kernel or the "compatibility mode". - Removed traceCREATE_MUTEX hook for FreeRTOS v9 or later (no longer required) - Updated the User Manual regarding snapshot trace via IAR Embedded Workbench. - Renamed vTraceGetTraceBuffer to xTraceGetTraceBuffer, since returning a pointer. ------------------------------------------------------------------------------- Changes, v3.1.0 -> v3.1.1 After the major changes in the v3.1.0 trace recorder library, this update corrects a number of minor issues. Only minor functional improvements. - You can now use TRC_ALLOC_CUSTOM_BUFFER to declare a trace buffer on a custom location (using linker directives). The related function vTraceSetRecorderDataBuffer has been promoted to the Common API (previously only supported in snapshot mode, but custom allocation is now generally supported also in streaming mode). - Removed TRC_CFG_USE_LINKER_PRAGMA. No longer necessary thanks to the custom allocation mode. - Added support for timestamping from custom periodic timers, required for accurate timestamping on Cortex-M0/M0+ devices when using tickless idle. Only for streaming mode so far. See TRC_CUSTOM_TIMER_INCR / DECR. - ARM Cortex-M port: Made sure the DWT unit is initialized properly, in case the debugger doesn't handle this. - ARM Cortex-M port: Added possibility to use Systick timestamping also on Cortex-M3/M4/M7 devices (that otherwise use DWT timestamping by default). To use this option, define the macro TRC_CFG_ARM_CM_USE_SYSTICK. - J-Link streaming: The default RTT buffer has been changed from 0 to 1. - J-Link streaming: The RTT buffer settings for buffer 1 and higher, are now found in trcStreamingPort.h. Note: These settings don't apply to buffer 0. - vTracePrint has been optimized for better performance in string logging. - Minor performance improvement related to symbol table transfer in streaming mode. - Timer names now registered also in streaming mode. - Timer start and stop event are now traced. - Implemented support for queue registry (traceQUEUE_REGISTRY_ADD) also for streaming. - Fixed a bug related to repeated calls of vTraceEnable. - Fixed a bug where task-switches seemed to occur even though the scheduler was disabled. - Renamed HARDWARE_PORT_TEXAS_INSTRUMENTS_TMS570_RM48, added prefix TRC. - Fixed several language issues in the comments and documentation. - Fixed several minor issues and warnings from different compilers (including PowerPC/gcc) and configurations. ------------------------------------------------------------------------------- Changes, v3.0.9 -> v3.1.0 - Merge of previously separated snapshot and streaming recorders into a single recorder supporting both streaming and snapshot as different modes. - New common API for supporting both streaming and snapshot modes. - New integration guide, see the User Manual. - Major improvement of API documentation in source files and User Manual. - New concept of "stream ports", giving a better structure defining streaming interfaces, and restructured the J-Link and TCP/IP streaming as stream ports. - Added a stream port for USB CDC connections, with STM32 as example. Since Tracealyzer now can receive serial data on Windows COM ports, this is really easy to use. - Added a warning (#error) for cases where FreeRTOS tickless idle mode is used together with timestamping using SysTick or other periodic interrupt timers, Tracing with tickless idle requires an independent time source to correctly capture the length of the idle periods. - Major changes in the recorder API. Important examples are: * Some configuration macros have changed names, e.g. for "hardware port". Make sure to remove any old "trcConfig.h" files if upgrading from an earlier version! * Recorder configuration in trcConfig.h has been minimized and now only includes the important settings that are independent of recorder mode. Advanced settings for each mode are found in trcSnapshotConfig.h and trcStreamingConfig.h. * vTraceEnable replaces Trace_Init and vTraceInitTraceData, as well as vTraceStart and uiTraceStart. * vTraceStop now part of the common API and thereby available also in streaming. And since vTraceEnable can start the streaming directly you have the option control the tracing from target, e.g., for streaming to a device file system. * vTraceStoreKernelObjectName from old streaming recorder has been replaced by vTraceSetQueueName, vTraceSetSemaphoreName, etc. * vTraceSetISRProperties now returns a "traceHandle" that should be passed as parameter to vTraceStoreISRBegin and vTraceStoreISREnd. * xTraceRegisterString has replaced the old functions xTraceOpenLabel and vTraceStoreUserEventChannelName. This now returns a "traceString" for use as "channel" parameter in vTracePrintF, and in other places where strings are stored. * Removed vTraceStoreISREndManual and vTraceStoreISREndAuto, use vTraceStoreISREnd instead. * Renamed the functions for saving User Events in a separate buffer: - xTraceRegisterChannelFormat -> xTraceRegisterUBChannel - vTraceChannelPrintF -> vTraceUBData - vTraceChannelUserEvent -> vTraceUBEvent ------------------------------------------------------------------------------- Copyright Percepio AB, 2018.