The Running Snail car team is back for another season

You may have heard about "Running Snail", a team of German university students building an electric race car as a school project – we blogged about them last year. Now they're at it again, they will build a new car for the 2017/18 competitive season, and of course Percepio will continue to sponsor the team with licenses [...]

2020-07-02T11:06:09+02:00June 14th, 2017|Categories: Blog|Tags: , , , , |

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

2019-06-25T11:26:33+02:00November 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 [...]

2019-06-25T11:26:32+02:00February 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. If you need to support more concurrent users, you can extend the license to multiple floating seats. Our [...]

2018-08-16T09:45:21+02:00January 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+01:00December 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+01:00October 27th, 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+01:00March 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+02:00March 6th, 2014|Categories: FAQ|Tags: |

What hardware platforms are supported?

The Tracealyzer support for FreeRTOS, SafeRTOS and Micrium relies on Percepio's own recorder library. This can be used on most processors and contains ports for several common processor families, including: Arm Cortex-M devices, e.g., STM32, NXP LPC series, Renesas Synergy, etc. Arm Cortex-A9 devices, e.g. Xilinx Zynq. Renesas RX600 series Microchip PIC32 series Atmel AVR32 [...]

2018-08-06T15:13:10+02:00October 21st, 2013|Categories: FAQ|Tags: , , |

What debuggers are supported?

(This answer is only applicable for Percepio's own recorder library, used for e.g. FreeRTOS, OpenRTOS, SafeRTOS and Micrium µC/OS) Streaming mode As for v4.1.6, Tracealyzer supports streaming via SEGGER J-Link, IAR I-Jet and Keil ULINKpro/ULINKplus. Streaming is also possible in other ways, e.g. using USB CDC or a network connection. IAR users can find more [...]

2018-08-06T12:09:59+02:00October 20th, 2013|Categories: FAQ|Tags: , , |

How much RAM does the trace recorder need?

(This answer is only applicable for Percepio's own recorder library, used for e.g. FreeRTOS, OpenRTOS, SafeRTOS and Micrium µC/OS) It depends if you are using snapshot or streaming mode. Snapshot mode requires a decent RAM buffer if you want a long trace. A RAM buffer of 5-10 KB can give a trace of 50-200 ms, depending on [...]

2018-08-06T11:46:17+02:00October 19th, 2013|Categories: FAQ|Tags: , , |

How much FLASH does the trace recorder need?

(This answer is only applicable for Percepio's own recorder library, used for e.g. FreeRTOS, OpenRTOS, SafeRTOS and Micrium µC/OS) The below table shows an example, using version 2.5.1 of the recorder library when compiled for ARM Cortex M4 (Atmel SAM4S16C) using ARM GCC v4.7.3. Recorder configuration Compiler optimization Flash usage Basic features -Os (minimum size) [...]

2018-08-06T11:49:26+02:00October 18th, 2013|Categories: FAQ|Tags: , , |

How do I enable tracing of interrupt handlers?

(This answer is only applicable for Percepio's own recorder library, used for e.g. FreeRTOS, OpenRTOS, SafeRTOS and Micrium µC/OS) 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. [...]

2018-08-06T11:48:02+02:00October 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 Object", where Object is the queue [...]

2018-08-06T11:22:16+02:00October 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+01:00October 14th, 2013|Categories: FAQ|Tags: , , |