Consistent println output, take 2 (#4162)

This commit is contained in:
Dániel Buga 2025-09-22 12:22:33 +02:00 committed by GitHub
parent 6ee143eef9
commit 7edd62d15b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 8 deletions

View File

@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- `critical-section` now wraps the entirety of the `print!` macros (#4162)
### Removed

View File

@ -38,11 +38,19 @@ log_format!("serial");
#[cfg(not(feature = "no-op"))]
#[macro_export]
macro_rules! println {
() => {{
$crate::Printer::write_bytes(&[b'\n']);
}};
($($arg:tt)*) => {{
{
use core::fmt::Write;
writeln!($crate::Printer, $($arg)*).ok();
fn _do_print(args: core::fmt::Arguments<'_>) -> Result<(), core::fmt::Error> {
$crate::with(|_| {
use ::core::fmt::Write;
($crate::Printer).write_fmt(args)?;
$crate::Printer::write_bytes(&[b'\n']);
Ok(())
})
}
_do_print(::core::format_args!($($arg)*)).ok();
}};
}
@ -51,10 +59,13 @@ macro_rules! println {
#[macro_export]
macro_rules! print {
($($arg:tt)*) => {{
{
use core::fmt::Write;
write!($crate::Printer, $($arg)*).ok();
fn _do_print(args: core::fmt::Arguments<'_>) -> Result<(), core::fmt::Error> {
$crate::with(|_| {
use ::core::fmt::Write;
($crate::Printer).write_fmt(args)
})
}
_do_print(::core::format_args!($($arg)*)).ok();
}};
}
@ -486,7 +497,8 @@ mod noop {
use core::marker::PhantomData;
#[derive(Clone, Copy)]
struct LockToken<'a>(PhantomData<&'a ()>);
#[doc(hidden)]
pub struct LockToken<'a>(PhantomData<&'a ()>);
impl LockToken<'_> {
#[allow(unused)]
@ -499,8 +511,9 @@ impl LockToken<'_> {
static LOCK: esp_sync::RawMutex = esp_sync::RawMutex::new();
/// Runs the callback in a critical section, if enabled.
#[doc(hidden)]
#[inline]
fn with<R>(f: impl FnOnce(LockToken) -> R) -> R {
pub fn with<R>(f: impl FnOnce(LockToken) -> R) -> R {
#[cfg(feature = "critical-section")]
return LOCK.lock(|| f(unsafe { LockToken::conjure() }));