SystemView—System Verification Tool
- Minimally system intrusive
- Free tool. No license cost, no hidden fees
- RTOS task, resource, and API tracing
- Interrupt tracing for bare metal systems without an RTOS
- Continuous real-time recording and live analysis with J-Link and SEGGER RTT technology
- Live analysis of captured data - view responses to stimuli in real time without stopping the target
- SEGGER embOS, emNet, and emFile API call tracing as standard
- uC/OS-III, Micrium OS Kernel, and FreeRTOS instrumentation included
- Can be adapted to other RTOS using a fully documented API
- Works on any CPU
SystemView is a real-time recording and visualization tool for embedded systems that reveals the true runtime behavior of an application, going far deeper than the system insights provided by debuggers. This is particularly effective when developing and working with complex embedded systems comprising multiple threads and interrupts: SystemView can ensure a system performs as designed, can track down inefficiencies, and show unintended interactions and resource conflicts, with a focus on details of every single system ticks.
Analyzing with SystemView
SystemView can record data from the embedded target system while it is running. The recorded data is analyzed and the system behavior is visualized in different views.
All system information is sent by the application and is part of the recording. The information is shown in the window on the top right and includes the application name, the underlying OS, the target device and the timing information. Additional information about task switches and interrupt frequency provide a quick overview of the embedded system.
With the Timeline and the Events window the whole system execution can be visually analyzed.
The 'Events' window lists all SystemView events which were recorded from the system and displays information about the exact timestamp when the event was generated, in which task or interrupt context it happened, which event it is, and the details of the event. The type of events to be displayed can be filtered to show only events of interest. The Timeline displays the interrupt and task activity, as well as scheduler activity and idle over the system time. Scrolling through the events and zooming in on the timeline provide an exact view on how the contexts are connected:
- How often do interrupts occur
- Which interrupt starts which task
- When are tasks or interrupts interrupted
- When does the scheduler trigger a task switch
- How long does it take for a task to run when it becomes ready
- How long does an interrupt run
The 'Contexts' window provides run-time information about tasks and interrupts. For each item the frequency, run time information and CPU load are shown. This information can be used for profiling, to see whether the system runs evenly or not, and to get an overview where the CPU time is spent.
The CPU Load window displays the used CPU time by context over a time period. This enables analysis of how much CPU time is used when the system is active or idle and can provide an indicator for where the system might be inefficient, i.e. when interrupts happen too often or simple computations take too long.
What is the difference between SystemView and SystemView PRO?
A: SystemView PRO enables additional features of the SystemView application. It includes all features of SystemView plus the features unlimited recording and custom filters as described above.
Can I use SystemView while I am debugging my application?
A: Yes. SystemView can run in parallel to a debugger and do continuous recording. To make sure that data can be read fast enough, configure the debugger connection to a high interface speed (>= 4 MHz). Parallel connections to a target are currently only supported on Windows and Linux.
Can I do continuous recording without a J-Link?
A: No. Continuous recording requires the J-Link Real Time Transfer (RTT) technology to automatically read the data from the target. One-time recording can be done with any debug probe.
Can I use SystemView with my J-Link LITE or J-Link OB?
A: Yes. SystemView can in general be used with any J-Link. J-Link LITE and J-Link OB are limited in the debug interface speed, which can lead to overflow events when the RTT buffer cannot be read fast enough and the system creates too many events. To get a full-featured J-Link, have a look at the purchase options.
Can I use SystemView with my old J-Link?
A: Yes. SystemView can in general be used with any J-Link if the J-Link supports the target core. Older J-Links (V8 and older) might have limited RTT capability, which can lead to overflow events when the RTT buffer cannot be read fast enough and the system creates too many events. To trade-in or upgrade your J-Link, have a look at our purchase options.
Can I do continuous recording on Cortex-A or Cortex-R devices?
A: This is target device-dependent. RTT requires memory access on the target while the target is running. On cortex-A and Cortex-R this is done via the AHB-AP. If your target device has an AHB-AP you can continuously record with SystemView.
Can I do continuous recording on ARM7, ARM9?
A: No. RTT requires memory access on the target while the target is running. If you have one of these devices, only one-time recording can be done.
I don't use embOS or FreeRTOS, can I still use SystemView for my application?
A: Yes. SystemView can be used with any (RT)OS. For Task and OS execution recording your OS might have options to hook up trace/profiling instrumentation modules where you can add SystemView, otherwise the OS has to be instrumented to be able to do so. In case of doubt get in contact with your OS vendor. If instrumenting the OS is not possible you can still use SystemView to record interrupt activity and user events.
I don't use any OS at all. Should I still use SystemView?
A: Yes. Even without any OS SystemView can be used to record interrupt activity to verify interrupts occur as expected and to record user events which can be used to measure module execution times.
I get overflow events when continuously recording. How can I prevent this?
A: Overflow events occur when the SystemView RTT buffer is full. This can happen for following reasons:
- J-Link is kept busy by a debugger and cannot read the data fast enough.
- The target interface speed is too low to read the data fast enough.
- The application generates too many events to fit into the buffer. To prevent this:
- Minimize the interactions of the debugger with J-Link while the target is running. (i.e. disable live watches)
- Select a higher interface speed in all instances connected to J-Link. (i.e. The debugger and SystemView)
- Choose a larger buffer for SystemView. (1 - 4 kByte)
- Run SystemViewer stand-alone without a debugger.
My application crashes when I connect SystemView. What might be wrong?
A: Make sure ~200 Bytes of stack are available for SystemView in every context (Task, Interrupt, Scheduler) which can create SystemView events.
I cannot start recording in SystemView. What might be wrong?
A: Possible reasons are:
- J-Link or target is not connected: Make sure all connections are okay.
- The target is not running: Make sure the target is running, otherwise connection might fail or the RTT Control Block can not be found.
- The SystemView module is not configured: Make sure the SystemView module is included in your application and SEGGER_SYSVIEW_Conf() is called at the start of the application.
- The J-Link Software is out-of-date: Make sure you have the latest J-Link Software and Documentation Package installed.
SystemView cannot find the RTT control block, How can I configure it?
A: Auto-detection of the RTT Control Block can only be done in a known RAM address range after it is initialized. Make sure the application startup has ran when starting to record. If the RTT Control Block is outside the known range for the selected device, either select 'Address' and enter the exact address of the RTT Control Block or select 'Address Range' and enter an address range in which the RTT Control Block will be.
I receive invalid packets. How can this happen?
A: Invalid packets are mostly generated by the target system due to either one of two reasons: 1. SystemView does not correctly lock when recording an event and is interrupted by another event. In this case make sure SEGGER_SYSVIEW_LOCK() and SEGGER_RTT_LOCK() are configured correctly for your device. 2. The system goes into sleep or low-power mode and the J-Link cannot correctly access the RAM to read the SystemView buffer. It is recommended to not use WFI or any low-power mode while a debug probe is connected to the system.
Do I have to select a target device to start recording?
A: Yes. J-Link needs to know which target device is connected. The drop-down lists the most recently used devices. To select another device simply enter its name. A list of supported devices can be found here.
My question is not listed above. Where can I get more information?
A: For more information and help please pose your question in the SEGGER Forum.