#rtt #defmt #logging #bbqueue

no-std defmt-brtt

Defmt 通过 RTT 以及 BBQueue 记录日志

3 个不稳定版本

0.1.1 2023年4月10日
0.1.0 2023年4月4日
0.0.0 2023年3月21日

嵌入式开发 中排名第 1561

Download history 111/week @ 2024-03-13 205/week @ 2024-03-20 127/week @ 2024-03-27 122/week @ 2024-04-03 377/week @ 2024-04-10 148/week @ 2024-04-17 107/week @ 2024-04-24 42/week @ 2024-05-01 103/week @ 2024-05-08 109/week @ 2024-05-15 54/week @ 2024-05-22 145/week @ 2024-05-29 97/week @ 2024-06-05 128/week @ 2024-06-12 88/week @ 2024-06-19 95/week @ 2024-06-26

每月下载量 469

MIT/Apache

36KB
454 代码行

defmt-brtt: 同时通过 rttbbq 使用 defmt

该软件包将 defmt-rttdefmt-bbq 的功能合并为一个单一软件包。

这允许您通过 RTT 获取数据,也可以通过从 bbqueue 读取数据的方式,通过其他传输方式输出数据。

即使这不是您感兴趣的用例,您也可以将 defmt-brtt 作为在 RTT 和/或 BBQueue 之间切换 defmt 传输的更简单方式。

特性

  • rtt: 激活 RTT 传输(功能与 defmt-rtt 相同,除了 缓冲区大小)。
  • bbq: 激活 BBQueue 传输(功能与 defmt-bbq 相同,除了 缓冲区大小)。
  • async-await: 向 defmt_brtt::DefmtConsumer 添加一个函数,允许异步等待日志数据。

您必须激活 rttbbq 中至少一个。

缓冲区大小

要配置 defmt-brtt 使用的缓冲区大小,您可以设置环境变量 DEFMT_BRTT_BUFFER_SIZE 为所需的大小。

例如,如果我们想使用 512 字节的内部缓冲区,我们将在项目构建目录中运行 DEFMT_BRTT_BUFFER_SIZE=512 cargo build

请注意,如果激活了这些功能,defmt-brttrttbbq 分配了一个大小为 DEFMT_BRTT_BUFFER_SIZE 的缓冲区。

使用所需的用户代码

要使用 defmt-brtt 提供的 defmt 日志记录器实现,您必须在项目中某处添加以下使用语句

use defmt_brtt as _;

rtt

要使用此crate的rtt功能,您只需要激活rtt功能(默认已激活)。

bbq

要使用此crate的bbq功能,您必须激活bbq功能(默认已激活)。您必须调用defmt_brtt::init并使用返回的DefmtConsumer来消费defmt数据。

DefmtConsumer产生的数据然后可以被传输并馈送到解码器,例如defmt-print,它会从defmt数据中重建日志消息。

fn main() {
    let logger = defmt_brtt::init();

    loop {
        if let Some(grant) = logger.read() {
            let written_bytes = write_my_log_data_over_usb(&grant).ok();
            // The step below is optional. Dropping the `Grant` releases
            // all read bytes.
            grant.release(written_bytes);
        }
    }
}

// If you have the `async-await` feature enabled, you
// can also do the following:
async fn read_logs(consumer: DefmtConsumer) {
    loop {
        let grant = logger.wait_for_log().await;
        let written_bytes = write_my_log_data_over_usb(&grant).ok();
        // The step below is optional. Dropping the `Grant` releases
        // all read bytes.
        grant.release(written_bytes);
    }
}

依赖项

~0.6–1MB
~24K SLoC