probe_rs

Module 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.

§Example

use probe_rs::probe::list::Lister;
use probe_rs::Permissions;
use probe_rs::rtt::Rtt;

// First obtain a probe-rs session (see probe-rs documentation for details)
let lister = Lister::new();

let probes = lister.list_all();

let probe = probes[0].open()?;
let mut session = probe.attach("somechip", Permissions::default())?;
// Select a core.
let mut core = session.core(0)?;

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

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

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

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

Structs§

Enums§

  • 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.

Traits§

  • Trait for channel information shared between up and down channels.

Functions§