Having problems with J-Link RTT streaming?

If your systems' real-time behavior would be noticeably affected by the tracing when using J-Link RTT streaming, this is most likely caused by insufficient throughput, causing the J-Link RTT transfer to block execution. If it works good in snapshot mode, the streaming mode should normally be even faster, otherwise there is blocking in the streaming channel. [...]

2018-02-21T09:57:26+00:00 February 19th, 2018|Categories: FAQ|

Upgrading the Trace Recorder to v3.1

The improved trace recorder library is the biggest change in Tracealyzer v3.1, at least for FreeRTOS, Micrium and SafeRTOS. We have merged snapshot and streaming support into a single recorder module that support both modes, and improved the API and documentation to make it easier to use. If you are using an older version of the [...]

2018-03-13T10:50:12+00:00 November 22nd, 2016|Categories: FAQ|Tags: , , , , , |

How much processor time is used by the recorder?

Software-based tracing always means some processing overhead, where the exact amount is f x e, where f is the average event frequency and e is the average execution time for storing an event. This is very dependent on your application and processor. The more RTOS calls, the larger overhead. The faster processor, the less overhead. Let's put in some [...]

2017-03-10T09:14:40+00:00 February 3rd, 2016|Categories: FAQ|Tags: , , |

How does the floating licenses work?

Floating network licenses offer a flexible licensing solution for most development teams. With a floating license, you can install the tool on any number of computers, but the number of concurrent users is limited by the license server. Our floating licenses have a linger time, i.e., a minimum session time during which the license is [...]

2017-04-25T20:41:14+00:00 January 30th, 2015|Categories: FAQ|Tags: , , , , , , |

Got error “uiTraceGetPriorityProperty: Invalid value for id”

If asserts are enabled the recorder configuration (trcConfig.h), this error is generated in uiTraceGetPriorityProperty when a task has an "object handle" value larger than expected. Our FreeRTOS recorder assignes each task an 8-bit "object handle" (the "id" parameter in uiTraceGetPriorityProperty), which should be in the range [1..NTask]. The NTask constant is defined in trcConfig.h and [...]

2014-12-19T12:09:25+00:00 December 19th, 2014|Categories: FAQ|Tags: , , |

How to define critical sections for the trace recorder?

Our Tracealyzer versions for microcontroller RTOS uses Percepio's own recorder library, which uses separate definitions for critical sections within the recorder. This since the standard critical sections offered by some RTOS kernels, like portENTER_CRITICAL/portEXIT_CRITICAL in FreeRTOS, might not safe to use from interrupt (kernel) context. Some recorder functions are called both from task-level and interrupt-level [...]

2014-10-28T09:46:11+00:00 October 27th, 2014|Categories: FAQ|Tags: , , |

How to upload traces from RAM in Keil µVision?

The upcoming version 2.7 of FreeRTOS+Trace contains a demo project for Keil µVision and the STM32F400. Related to this, we like to highlight a smart solution for how to save the trace data in Keil µVision, provided by our partner Antycip. Many thanks, Julien! If you don't have a J-Link or Atmel SAM-ICE debugger (for [...]

2016-11-08T22:16:48+00:00 August 22nd, 2014|Categories: FAQ|Tags: , , |


To trace the execution of exception/interrupt handlers (ISRs), you need to call vTraceStoreISRBegin and vTraceStoreISREnd in the beginning and in the end of the handler function. The vTraceStoreISREnd routine normally assumes a return to the previously executing task. But sometimes another ISR is pending and executes in direct sequence, making this assumption incorrect. For instance, ARM Cortex-M devices [...]

2017-01-05T15:02:57+00:00 March 21st, 2014|Categories: FAQ|Tags: |

Why do I get “error: ‘uxPendedTicks’ undeclared”?

If you get this error when compiling the recorder, you are probably using an older version of FreeRTOS (v7.5.x or earlier) together with a newer version of the recorder library. The FreeRTOS variable 'uxPendedTicks' was before v7.5.2 named 'uxMissedTicks', so you need to replace uxPendedTicks with uxMissedTicks in the definition of traceTASK_INCREMENT_TICK in trcKernelPort.h Update: [...]

2014-08-22T10:53:06+00:00 March 6th, 2014|Categories: FAQ|Tags: |

Why do I get “Failed to load trace: Invalid control marker value (debug marker 1)”

This means that something that appears to be trace data was found in the RAM dump, but with some difference in the expected data format. This typically occurs if you are using an older version of the application (e.g, FreeRTOS+Trace or µC/Trace) with a newer version of the recorder. We have received several questions about [...]

2014-03-04T13:45:14+00:00 March 4th, 2014|Categories: FAQ|Tags: , , |

How does Tracealyzer for VxWorks relate to Wind River Workbench?

Tracealyzer for VxWorks uses the same data source as System Viewer in Wind River Workbench, but provides a more powerful visualization featuring over 20 different views that all are interconnected in clever ways. Tracealyzer is more intuitive to use and gives a much better understanding of your system. Some unique features of Tracealyzer are: Trace [...]

2016-11-08T22:16:48+00:00 November 11th, 2013|Categories: FAQ|Tags: |

What hardware platforms are supported?

The recorder library can be used on any 32-bit microcontroller system that meets the following requirements: Contains a high resolution time source (a timer/counter or similar). Only read access is required, so the OS tick timer can be used. 16 KB of Flash available (can be scaled down to 6 KB in minimum configuration) At [...]

2014-01-09T15:49:42+00:00 October 21st, 2013|Categories: FAQ|Tags: , , |

What debuggers are supported?

If you have a J-Link debug probe, the viewer application can access this directly to download the trace. In other case, most debugger are able to store RAM contents to a file that can be read by FreeRTOS+Trace, SafeRTOS+Trace and µC/Trace. Binary (".bin"), Intel Hex (".hex") and ".mch" formats are supported. These can be generated [...]

2013-11-11T09:36:58+00:00 October 20th, 2013|Categories: FAQ|Tags: , , |

How much FLASH does the trace recorder need?

The below table shows an example, using version 2.5.1 of the recorder library, compiled for ARM Cortex M4 (Atmel SAM4S16C) using ARM GCC v4.7.3. Recorder configuration Compiler optimization Flash usage Basic features -Os (minimum size) 5,788 byte Basic features -O3 (maximum speed) 6,840 byte All features -Os (minimum size) 13,368 byte All features -O3 (maximum [...]

2016-11-08T22:16:48+00:00 October 18th, 2013|Categories: FAQ|Tags: , , |

How do I enable tracing of interrupt handlers?

Interrupt handlers (ISRs) are not recorded by default. To record ISRs, you need to add two calls in the interrupt handlers you wish to record, vTraceStoreISRBegin in the very beginning and vTraceStoreISREnd in the very end. See trcUser.h for further information. The parameter of vTraceStoreISRBegin is a unique numeric ISR ID that you select yourself, [...]

2014-01-10T08:15:13+00:00 October 17th, 2013|Categories: FAQ|Tags: , , |

What does the label “ISR using …” mean?

If you have interrupt handlers using interrupt-level kernel functions, but are not calling vTraceStoreISRBegin and vTraceStoreISREnd, the recorder assumes that the kernel call was made from an interrupt handler, but does not know the identity of the interrupt handler. In this case, the name is set to "ISR using ", where is the queue or [...]

2016-11-08T22:16:48+00:00 October 15th, 2013|Categories: FAQ|Tags: , , |

How do I set custom names for queues (and other kernel objects), instead of the default names (“Queue #1” etc.)

Use vTraceSetQueueName, vTraceSetSemaphoreName or vTraceSetMutexName, as in the below example: actuatorQ = xQueueCreate(3, sizeof(QueueMessage) ); if (actuatorQ != NULL) { vTraceSetQueueName(actuatorQ, "ActuatorQueue"); // Set the name ... } else { ... // Error handling }

2016-11-08T22:16:48+00:00 October 14th, 2013|Categories: FAQ|Tags: , , |

The trace does not load correctly, what is wrong?

Check the following things: 0) Are you using an updated OS kernel with the instrumentation needed by the recorder? 1) Has the trace initialization function been called? This must be called early, before calling any kernel or recorder function. 2) Has the trace recorder been started/triggered? 3) Have you integrated the recorder properly in your [...]

2016-11-08T22:16:48+00:00 October 13th, 2013|Categories: FAQ|Tags: , , |

Some trace files can’t be opened, what is wrong? (ARM Cortex-R4)

If using memory protection (MPU) on ARM Cortex-R4 devices, the debugger can't read kernel-space data (including the trace data) when in user-space code. If this is the case, your trace file (RAM dump) will only contain the byte pattern 0xBAD0BAD0 instead of the trace data. If you experience this problem, make sure to break the [...]

2013-11-11T09:34:40+00:00 October 12th, 2013|Categories: FAQ|Tags: , , |

I’m using/developing an operating system that does not have Tracealyzer support. What is involved in porting Tracealyzer to my operating system?

Our Trace Recorder Library used for FreeRTOS+Trace, SafeRTOS+Trace and Micrium µC/Trace is quite easy to port, as we have made a significant effort to generalize it. All kernel-specific definitions are located in trcKernelPort.c/.h, but you need to insert instrumentation in the kernel and add new fields to the kernel object data types. We welcome new [...]

2013-11-11T09:34:26+00:00 October 11th, 2013|Categories: FAQ|Tags: |

What is your relation to FreeRTOS?

Percepio is a member of the FreeRTOS+ program, intended for commercial add-ons to FreeRTOS. The name FreeRTOS+Trace is a trademark of Percepio AB and is used with permission from Richard Barry at FreeRTOS.org/Real Time Engineers, Ltd.

2013-11-11T09:38:01+00:00 October 6th, 2013|Categories: FAQ|Tags: |

What is the background of Tracealyzer

The first version of Tracealyzer was created in 2004, during Dr. Kraft's PhD work at Mälardalen University. A simple trace visualization was needed to verify schedling simulations, but when ABB Robotics began using the tool systematically in 2005 (on VxWorks), the project started its evolution into something much larger. Between 2005 and 2008, the tool [...]

2013-11-11T09:32:37+00:00 October 3rd, 2013|Categories: FAQ|Tags: |