Crate probe_rs_rtt

source ·
Expand description

Host side implementation of the RTT (Real-Time Transfer) I/O protocol over probe-rs

RTT implements input and output to/from a microcontroller using in-memory ring buffers and memory polling. This enables debug logging from the microcontroller with minimal delays and no blocking, making it usable even in real-time applications where e.g. semihosting delays cannot be tolerated.

This crate enables you to read and write via RTT channels. It’s also used as a building-block for probe-rs debugging tools.


use std::sync::{Arc, Mutex};
use probe_rs::{Probe, Permissions};
use probe_rs_rtt::Rtt;

// First obtain a probe-rs session (see probe-rs documentation for details)
let probe = Probe::list_all()[0].open()?;
let mut session = probe.attach("somechip", Permissions::default())?;
let memory_map =;
// Select a core.
let mut core = session.core(0)?;

// Attach to RTT
let mut rtt = Rtt::attach(&mut core, &memory_map)?;

// Read from a channel
if let Some(input) = rtt.up_channels().take(0) {
    let mut buf = [0u8; 1024];
    let count = core, &mut buf[..])?;

    println!("Read data: {:?}", &buf[..count]);

// Write to a channel
if let Some(output) = rtt.down_channels().take(0) {
    output.write(&mut core, b"Hello, computer!\n")?;


pub use channels::Channels;


List of RTT channels.


RTT down (host to target) channel.
The RTT interface.
RTT up (target to host) channel.


Specifies what to do when a channel doesn’t have enough buffer space for a complete write on the target side.
Error type for RTT operations.
Used to specify which memory regions to scan for the RTT control block.


Trait for channel information shared between up and down channels.