---
title: "Target output and serial monitor"
---

# Target output and serial monitor

Semihosting, SEGGER RTT and ITM over SWO output in the Debug Console, sending input to the firmware over an RTT down channel, and the serial monitor for UARTs and probes' virtual COM ports.

**Verification state:** none of the outputs on this page has run on a board. ITM decoding, the RTT configuration strings and the serial formatting are unit-tested; the RTT path is kit shipped (jlink).

## Output in the Debug Console

| Output | Setting | Notes |
|---|---|---|
| Semihosting | `neuralInverse.embedded.debug.semihosting` | Firmware built for semihosting stops at a breakpoint instruction when no debugger is attached |
| SEGGER RTT | `neuralInverse.embedded.debug.rtt`, `debug.rttChannel` (default 0) | The program must link SEGGER's RTT sources and initialise them; the session finds `_SEGGER_RTT` and starts streaming after that |
| ITM over SWO | `neuralInverse.embedded.debug.swo`, `debug.swoCpuClock`, `debug.swoFrequency` (default 2 MHz), `debug.swoPort` | `swoCpuClock` must be the real core clock and the SWO frequency must divide it exactly. One stimulus port at a time, as `printf` over ITM port 0 usually is |

The launch configuration's `semihosting`, `rtt`, `rttChannel`, `swo` and `swoCpuClock` override the settings for one configuration.

Which probe path gives which:

| GDB server | Semihosting | RTT | SWO |
|---|---|---|---|
| J-Link GDB Server | Yes | Yes, through its RTT port | Yes |
| ST-LINK GDB server | No | No | Yes |
| OpenOCD | Yes | Yes | Yes |
| TRACE32 (GDB back end) | No | No | No |
| QEMU | Yes | No | No |

## Send input over RTT

Type a setpoint into the firmware's RTT console: run **Send to RTT Down Channel...** and type a line, or type `rtt` and the text in the Debug Console. A newline is added. Only ASCII characters can be sent, and the length per send is limited.

State: unit-tested; through J-Link and OpenOCD, not yet run on a probe (kit jlink). Agents can send to the RTT down channel too.

## Serial monitor

**Open Serial Monitor** opens a terminal on a serial port, including a probe's virtual COM port, to talk to the controller's command line.

1. Pick the port; the last one used is marked. If none is listed, enter a port path, such as `/dev/ttyACM0` or `COM5`.
2. Pick the baud rate, or **Other Baud Rate...**. The last one used is remembered.

| Setting | Default |
|---|---|
| `neuralInverse.embedded.serial.baudRate` | 115200 |
| `serial.dataBits` | 8 |
| `serial.parity` | `none` |
| `serial.stopBits` | 1 |
| `serial.flowControl` | `none` |
| `serial.lineEnding` | `crlf` (also `cr`, `lf`) |
| `serial.localEcho` | `false` |
| `serial.timestamps` | `true` |
| `serial.logToFile` | `true`: every session, with timestamps, to a log file |
| `serial.logDirectory` | empty: the window's logs folder |

The serial port is opened in the Editor's shared process with `@serialport/bindings-cpp` (MIT); no other runtime is needed.

State: formatting unit-tested. **Not run on a real serial port or USB virtual COM port** on any operating system, including Windows COM ports.
