-------------------------------------------------------------------------------
          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. 