3 个不稳定版本
0.1.1 | 2023年4月10日 |
---|---|
0.1.0 | 2023年4月4日 |
0.0.0 | 2023年3月21日 |
在 嵌入式开发 中排名第 1561
每月下载量 469 次
36KB
454 代码行
defmt-brtt
: 同时通过 rtt
和 bbq
使用 defmt
该软件包将 defmt-rtt
和 defmt-bbq
的功能合并为一个单一软件包。
这允许您通过 RTT 获取数据,也可以通过从 bbqueue
读取数据的方式,通过其他传输方式输出数据。
即使这不是您感兴趣的用例,您也可以将 defmt-brtt
作为在 RTT 和/或 BBQueue 之间切换 defmt 传输的更简单方式。
特性
rtt
: 激活 RTT 传输(功能与defmt-rtt
相同,除了 缓冲区大小)。bbq
: 激活 BBQueue 传输(功能与defmt-bbq
相同,除了 缓冲区大小)。async-await
: 向defmt_brtt::DefmtConsumer
添加一个函数,允许异步等待日志数据。
您必须激活 rtt
和 bbq
中至少一个。
缓冲区大小
要配置 defmt-brtt
使用的缓冲区大小,您可以设置环境变量 DEFMT_BRTT_BUFFER_SIZE
为所需的大小。
例如,如果我们想使用 512 字节的内部缓冲区,我们将在项目构建目录中运行 DEFMT_BRTT_BUFFER_SIZE=512 cargo build
。
请注意,如果激活了这些功能,defmt-brtt
为 rtt
和 bbq
分配了一个大小为 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