diff --git a/CHANGELOG.md b/CHANGELOG.md index cb95a0b1..0a0e4c83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -650,6 +650,7 @@ Initial release * [#902] Use `core::ptr::addr_of_mut!` instead of `&mut` on mutable statics. No observable change. * [#901] `defmt-rtt`: Update to critical-section 1.2 +* [#915] Introduced `disable-blocking-mode` feature ### [defmt-rtt-v0.4.1] (2024-05-13) diff --git a/firmware/defmt-rtt/Cargo.toml b/firmware/defmt-rtt/Cargo.toml index 1c6f60ec..128e0d3d 100644 --- a/firmware/defmt-rtt/Cargo.toml +++ b/firmware/defmt-rtt/Cargo.toml @@ -10,6 +10,9 @@ readme = "README.md" repository = "https://github.com/knurling-rs/defmt" version = "0.4.1" +[features] +disable-blocking-mode = [] + [dependencies] defmt = { version = "0.3", path = "../../defmt" } critical-section = "1.2" diff --git a/firmware/defmt-rtt/src/channel.rs b/firmware/defmt-rtt/src/channel.rs index 552f1e5d..7d857a05 100644 --- a/firmware/defmt-rtt/src/channel.rs +++ b/firmware/defmt-rtt/src/channel.rs @@ -27,8 +27,8 @@ impl Channel { // the host-connection-status is only modified after RAM initialization while the device is // halted, so we only need to check it once before the write-loop let write = match self.host_is_connected() { - true => Self::blocking_write, - false => Self::nonblocking_write, + true if cfg!(not(feature = "disable-blocking-mode")) => Self::blocking_write, + _ => Self::nonblocking_write, }; while !bytes.is_empty() { diff --git a/firmware/defmt-rtt/src/lib.rs b/firmware/defmt-rtt/src/lib.rs index fbbed7e6..38015742 100644 --- a/firmware/defmt-rtt/src/lib.rs +++ b/firmware/defmt-rtt/src/lib.rs @@ -18,6 +18,9 @@ //! //! `defmt::flush` would also block forever in that case. //! +//! If losing data is not an concern you can disable blocking mode by enabling the feature +//! `disable-blocking-mode` +//! //! # Critical section implementation //! //! This crate uses [`critical-section`](https://github.com/rust-embedded/critical-section) to ensure only one thread