eScope · Software oscilloscope

The value of your variables, now.

eScope reads variables straight from the microcontroller's RAM while it runs and plots them in real time. No halting the program, no debugger on pause, no hardware scope.

Windows · .NET 8ArduinoSTM32 Renesas RAESP32SAMD
firmware.elf symbols eScope name → address live plot MCU eScope module (passive, MIT) addresses + sizes raw values serial · Bluetooth · TCP · SEGGER RTT (SWD)
The firmware does not know which variables are being watched: eScope resolves names from the symbol file and sends the list to the MCU, which periodically sends back the raw content of those memory areas.
Features

Everything you need to watch firmware live

Acquisition

  • Several targets at once, each with its own transport and symbols
  • Serial / Bluetooth, TCP, SEGGER RTT through pyOCD or J-Link
  • Lost frames and device silences marked on the plot
  • Hot reload of the symbols after a rebuild

Symbols

  • .map file with a configurable regular expression
  • ELF through the bundled GDB: ctx.cfg.gain, tab[3].x, uart->Instance->BRR
  • Pointers read on the target at resolution time
  • Completion of variable names and struct fields

Plotting

  • One Y axis per channel, gain / offset, linked channels
  • Markers, deltas, annotations, watch line
  • Computed channels defined by a C# script
  • Copy / paste with Excel, CSV and PNG export

Analysis A key

On the selection, for each channel: min, max, peak-to-peak, mean, RMS, standard deviation, frequency, period, duty cycle and FFT spectrum (linear or dB).

Watch W key

Current values refreshed at 1 Hz, decimal / hex / float display, and writing variables on the target. With GDB, each row is a C expression evaluated live.

Traces

Independent tabs, playback, keyboard navigation, compressed trace files and saving of the whole workspace.

Firmware integration

Three lines in your firmware

The embedded code (protocol and transport) is provided under the MIT license: copy it into your firmware and ship it in your products, commercial ones included, with no eScope license. Ready-to-use examples for Arduino (DebugScope library), STM32CubeIDE and Renesas RA over RTT.

  1. Pick the protocol and transport in eScopeCfg.h.
  2. Call eScopeProtocol_Init() at startup.
  3. Call eScopeProtocol_Process() at a fixed rate: that rate is your sampling period.
  4. In eScope, declare the target, type your variable names and start recording (Ctrl+Space).
// eScopeCfg.h
#define ESCOPE_PROTOCOL_V3
#define ESCOPE_TRANSPORT_UART
#define ESCOPE_PROTOCOL_BAUDRATE      115200
#define ESCOPE_PROTOCOL_CHAN_MAX      (8U)
#define ESCOPE_PROTOCOL_ADDRESS_SIZE  (4U)
#define ESCOPE_PROTOCOL_DATASIZE_SIZE (4U)
#define ESCOPE_PROTOCOL_TX_SIZE       (128U)

// main.c
int main(void)
{
    board_init();
    eScopeProtocol_Init();
    for (;;) {
        /* ... */
    }
}

// Periodic task or interrupt, e.g. 1 kHz
void Tick_1ms(void)
{
    eScopeProtocol_Process();
}
Licensing

Free to learn, a license to work

The PC application is source-available under the PolyForm Noncommercial 1.0.0 license. The firmware code is MIT.

EditionForDurationHow to get it
DemoTrying the tool1 monthOn first launch
PersonalPersonal projects, hobby, study, research, educational and public institutionsPerpetualFree, from the application
ProfessionalUse at work, client projects, any commercial useYearly subscriptionAbout › License menu of the application

All editions have the same features. Payment, VAT and renewal of the Professional license are handled by Lemon Squeezy. Need a quote or several seats? Write to us.

Download eScope

Windows application (.NET 8). Updates are offered from within the application.