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 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 = session.target().memory_map.clone();
// 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 = input.read(&mut 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")?;
}
Re-exports
pub use channels::Channels;
Modules
List of RTT channels.
Structs
RTT down (host to target) channel.
The RTT interface.
RTT up (target to host) channel.
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.