SystemView is a real-time recording and visualization tool for embedded systems. It reveals the runtime behavior of an application in much greater detail than conventional debugging alone, which is particularly valuable in complex systems with multiple tasks, interrupts and events. SystemView helps developers verify whether a system behaves as intended, identify inefficiencies, and investigate unintended interactions and resource conflicts.
Key features:
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rw861F9C6C_8659_42B3_88FB_B5A73444DC97',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rw409EF6C1_D65C_4C3C_B552_F080AD97929C',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
On the target system, SystemView records events that happen during runtime. These can be interrupts, timers, task switches and scheduling with an RTOS, API function calls and returns, or user events and messages. The events are retrieved, analyzed and visualized in the SystemView application, while the target keeps running. The Events Window in SystemView displays the recorded events along with more information.
To maintain low communication overhead on the target system, SystemView only records basic information.
SystemView analyzes all information from the events and shows:
SystemView is designed for low-overhead runtime recording. The actual recording overhead and timing resolution depend on the target architecture, system configuration and recorded event rate.
Most embedded systems do not have linear code execution. They implement interrupts for timers and use of peripherals, or might use an RTOS with multiple tasks.
The target generates events on enter and leave of interrupts, when tasks become ready for execution, and when a task starts or stops execution. The SystemView Application plots these events in the Timeline Window and shows the context in which they happen.
This enables easy analysis of when, how long, and why tasks run or what happens on an interrupt.
This helps identify issues and inefficiencies, such as:
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rwA1274FAA_8741_4C61_AEB3_6AA45BF6E34D',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rwE9BAB9D2_5FD7_40B7_AEDE_EF3C4B6917AC',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rw4212E320_FA46_47FF_AF60_5135DDB85DED',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
CPU cycles are limited on embedded systems, making it important to optimize the performance of tasks as well as to get the order of execution and the time distribution right.
With the CPU Load Window, SystemView helps analyze where CPU load is high. By knowing what happens at or before high-load times, the system can be tuned to avoid bottlenecks which may lead to delayed execution of important tasks.
The Runtime Window provides additional information about the runtime distribution of contexts. It can be used to verify that each context runs within its timing limits or to find cases where a context unexpectedly runs too long.
SystemView provides marker events specifically designed to measure timing between defined points in the target system. To measure the duration from point A to point B — or across multiple points — marker start, mark and marker stop events can be generated. The SystemView application automatically links corresponding markers and provides additional information such as runtime and execution count.
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rwA4BBFDE5_B130_4A28_8993_B6FB321A1178',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rw8AD74ACD_0F27_48D8_843F_F2B153333E49',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
SystemView includes logging of messages with a recording. Simple strings can be recorded as a log, warning, or error message. The logging functions support formatting of strings, similar to printf(). Since formatting strings can be time-consuming and requires additional memory, this can be deferred to the SystemView Application. The target system simply records the format string and the parameters in an event. Then the SystemView Application takes care of formatting the string and prints it in the Terminal Window.
SystemView monitors heap memory allocation. In many cases, memory can be allocated for the lifetime of the application without a problem. A problem occurs when the peak load of the heap increases over time, i.e. the application is consistently increasing the amount of memory it uses. This means the application is leaking memory and will eventually run into trouble. SystemView's heap monitoring helps identify where memory allocations occur, supporting the investigation of potential memory leaks.
{ if (window.innerWidth >= bp.minWidth) enabled = bp.enabled; });
if (!enabled) return;
$event.preventDefault();
const pic = $el.closest('picture');
const light = pic && pic.querySelector('source[data-lightbox-role="light"]');
const dark = pic && pic.querySelector('source[data-lightbox-role="dark"]');
$dispatch('image-lightbox-open', {
id: 'rwD1CB0745_5D0A_46CB_9661_3F8D611F6482',
src: (light && light.getAttribute('srcset')) || $el.currentSrc || $el.src,
srcDark: (dark && dark.getAttribute('srcset')) || null,
alt: $el.alt,
});
" decoding="async" />
Update: September 4th, 2026
© 2026 Carnica Technology. All Rights Reserved. Contact Us · Legal & Privacy