U014 Embedded Systems

Content outdated

We are in the process of migrating all content to impulse version 2.0.

The embedded system’s complexity is growing constantly and high-level languages such as Java take up more and more space in this area. impulse can help developers to improve the visibility of what is going on inside.

The embedded system’s complexity is growing constantly and high-level languages such as Java take up more and more space in this area. impulse can help developers to improve the visibility of what is going on inside. impulse allows developers to view signals and other information from multiple sources that are formatted in various ways — reading logic data from an analyser, fetching rtos infomration from the debug probe, parsing and visualizing log data from the serial line, showing line diagrams of analogue inputs, and presenting communication protocols grabbed from the Ethernet.

Connecting to a debug probe

Read trace streams from your debug probe (e.g. SWO) or read and analyze contents of your memory.
You may use the TCP, Pipe or J-Link adapter to connect your debug probe. Analyze the trace data with existing readers (flux, SWV, SystemView,...) or sketch your own reader.
impulse can evaluate expressions (e.g. trace->buffer) to find memory locations (e.g. ring buffers) with trace information.  Memory content can be read and analyzed like any other source.

Analyse log data

Logging is probably the most frequently used technique in debugging embedded systems. In most cases, log data are in form of text lines with columns of given value types and order (pattern log).

With impulse you can load any pattern log data from a file, a pipe or a serial interface and show them in line with signals of another type (analogue, digital, events,… ). See Using log files for more information. Beside simple pattern logs, Impulse also supports xml log files (log4j 1.2).

2014-02-21 15:18:08,173 FATAL [main] Main (Main.java:56) - Started X unresolved
2014-02-21 15:18:08,222 WARN  [main] Main (Main.java:52) - No more tuples
2014-02-21 15:18:08,235 INFO [main] Main (Main.java:54) - Started X2
2014-02-21 15:18:08,247 INFO [main] Main (Main.java:56) - Started X3
2014-02-21 15:18:08,296 INFO [main] Main (Main.java:52) - Started X4
2014-02-21 15:18:08,309 INFO [main] Main (Main.java:54) - Started X5
2014-02-21 15:18:08,321 INFO [main] Main (Main.java:56) - Started X6

Combine multiple sources

It's often the case that an embedded system has multiple outputs (e.g., log files, analogue data,… ). By using a Multi-Adapter Port, you can combine multiple sources into one. These sources can be streaming sources (pipes, sockets,…  ) but also file resources, so you may combine multiple files into a single view.

Attach logic analysers and analogue acquisition devices

The sigrok project provides drivers to access various acquisition device types, such as logic analysers, MSOs, oscilloscopes, multimeters, LCR meters, sound level meters, thermometers, hygrometers, anemometers, light meters, energy meters, DAQs, dataloggers, function generators, RF receivers, spectrum analysers, power supplies and GPIB interfaces.

You will also find protocol decoders, like SPI, serial, USB,...

impulse contains an adapter to access sigrok by using the sigrok command-line interface. See Using the new Sigrok Adapter for more information.

Using the Serial Wire Viewer

The Serial Wire Viewer from ARM (Cortex-M microcontroller) provides non-intrusive real-time tracing. Usually this mechanism is used for 'print' only. The impulse SWV Tracer enhances SWV use-cases as it allows you to log and trace different kinds of data (real, integer, strings, logic) to be stored, visualized and analysed with impulse.See Using the SWV Tracer for how to get started.

  void itm_write_i8(unsigned char port, signed char b);
  void itm_write_i16(unsigned char port, short b);
  void itm_write_i32(unsigned char port, long b);
  void itm_write_i64(unsigned char port, long long b);
  void itm_write_f32(unsigned char port, float f);
  void itm_write_f64(unsigned char port, double f);
  void itm_write_t0(unsigned char port, const char* text);
  void itm_write_tn(unsigned char port, const char* text, char e);
  void itm_write_log(unsigned char port, unsigned char severity, const char* source, const char* message);

Using this simple API, you can write any kind of variables, logs and text, and visualize them as tables, line diagrams,...

Adopting the flux trace format

The flux trace format makes it simple to transfer your trace data into impulse. The format includes all required information, such as signal names, types and context, and is easily generated with the help of existing open-source trace emitters. It supports multi-core tracing (trace data from multiple cores can be merged), and can be used on any connection. See A3 Trace format to get the full information.

Implementing your own trace formats and attach to new hardware, communication interfaces or platforms

impulse uses the eclipse extension mechanism consistently. It is designed to be extensible in an easy way, and composed to be adaptable to different environments and use cases..

Implementing your own reader for a specific format is not a difficult job. What you need is some basic JS or Java knowledge and the following articles about extending impulse .

If you need further support or development services, just contact us. We are looking forward to supporting you in all technical areas.

Contact us


technical software and tooling


Contact Us

This email address is being protected from spambots. You need JavaScript enabled to view it.