#![no_std] #![no_main] use core::mem; use cortex_m::{asm::nop, peripheral::SCB}; use cortex_m_rt::entry; use defmt_ringbuf::{RingBuf, RingBuffer}; use defmt_rtt as _; use panic_probe as _; use stm32f1::stm32f103::Peripherals; #[no_mangle] #[used] #[link_section = ".uninit.BUFFER"] pub static mut BUFFER: mem::MaybeUninit<defmt_ringbuf::RingBuffer<4096>> = mem::MaybeUninit::uninit(); #[entry] fn main() -> ! { let _dp = Peripherals::take().unwrap(); defmt::info!("Init"); let buffer = unsafe { RingBuffer::init(&mut BUFFER) }; let mut data = [0; 128]; let (n, lost) = buffer.read(&mut data); let data = &data[..n]; defmt::info!("Buffer contents (lost={}): {}", lost, data); let mut data = [0; 255]; for (i, d) in data.iter_mut().enumerate() { *d = i as u8; } buffer.write(&data); defmt::info!("Wrote {} bytes to buffer", data.len()); defmt::info!("Done"); for _ in 0..1_000_000 { nop(); } SCB::sys_reset(); }