2 个不稳定版本

0.2.0 2023 年 3 月 6 日
0.1.0 2023 年 3 月 3 日

#944 in 嵌入式开发

MIT/Apache

12KB
168 代码行

defmt-ringbuf

该工具包将 defmt 日志消息存储在简单的环形缓冲区中,该缓冲区在重置后仍可持久化。您仍需要从缓冲区中读取消息并将它们传输到主机进行格式化。

许可证

许可方式为以下之一:

任选其一。

贡献

除非您明确声明,否则您有意提交以包含在 defmt-ringbuf 中的任何贡献均应按上述方式许可,不附加任何额外条款或条件。


lib.rs:

defmt-ringbuf 是一个 defmt 全局记录器,它将日志记录到持久化的环形缓冲区中。

环形缓冲区在启动时不会被清除,即如果将其放置在静态全局变量中,则重置后日志消息仍然可用。

要使用此工具包,请通过在项目中某处导入它来链接到它。

use core::mem::MaybeUninit;
use defmt_ringbuf as _;

static mut LOG: MaybeUninit<defmt_ringbuf::RingBuffer<1024>> = MaybeUninit::uninit();

#[entry]
fn main() -> ! {
    unsafe {
        defmt_ringbuf::init(&mut LOG, || ());
    }

    // ...
}

调用 [init] 以初始化日志记录,并调用 [read] 以读取缓冲区中的日志数据。

关键部分实现

该工具包使用 critical-section 以确保一次只有一个线程写入缓冲区。您必须导入一个提供适合当前目标的 critical-section 实现的工具包。有关详细信息,请参阅 critical-section 的 README。

例如,对于单核特权模式 Cortex-M 目标,您可以将以下内容添加到您的 Cargo.toml 中。

[dependencies]
cortex-m = { version = "0.7.6", features = ["critical-section-single-core"]}

依赖项

~1.1–1.7MB
~29K SLoC