3个不稳定版本
0.1.0 | 2021年12月17日 |
---|---|
0.0.2 | 2021年12月14日 |
0.0.1 | 2021年12月14日 |
#915 在 嵌入式开发
每月 33次下载
用于 teensy4-bsp
29KB
232 行
defmt-bbq
defmt
(“de格式化”,缩写为“deferred formatting”)是一个针对资源受限设备(如微控制器)的高效日志框架。
该crate将日志消息存储到线程安全的FIFO队列中,然后可以通过任何媒介(如USB、RS-485或其他传输方式)进行传输。
尽管这个crate充当了defmt
的global_logger
实现者,但它仍然需要你对消息进行操作。这旨在成为各种不同传输方法的可重用构建块。
使用方法
该crate要求用户执行以下操作
- (可选): 如果你想选择与默认的1024不同的队列大小,你需要在构建时设置
DEFMT_BBQ_BUFFER_SIZE
环境变量来配置大小。例如:DEFMT_BBQ_BUFFER_SIZE=4096 cargo build
。 - 在第一次
defmt
日志之前,用户必须调用defmt_bbq::init()
,这将初始化日志缓冲区,并返回队列的Consumer
部分,它提供了对传入日志消息的访问 - 用户必须定期清除日志消息。如果队列已满,任何额外的字节将被丢弃,可能会损坏(一些)日志消息
有关Consumer接口的更多信息,请参阅bbqueue
crate文档中的Consumer文档。
示例
#[entry]
fn main() {
// MUST be called before the first `defmt::*` call!
let mut consumer = defmt_bbq::init().unwrap();
loop {
defmt::println!("Hello, world!");
if let Some(grant) = consumer.read() {
// do something with `bytes`, like send
// it over a serial port..
// Then when done, make sure you release the grant
// to free the space for future logging.
let glen = grant.len();
grant.release(glen);
}
}
}
有关通过USB串行更详细的端到端示例,请参阅项目的示例文件夹。
默认功能(s)
该软件包具有一个默认功能,该功能启用 encoding-rzcobs
功能,这是 defmt
软件包的一部分。
强烈建议在使用此软件包时启用此功能(并使用 rzcobs 编码)。如果缓冲区被填满,则剩余的字节将被丢弃,这将暂时损坏消息流。
由于 rzcobs 以零字节为分隔符,因此可以从中恢复,但会丢失有限数量的消息。当使用“原始”编码时,您必须确保缓冲区 绝不能 被填满,因为无法从这种错误状态中恢复。
来源
此存储库是从 defmt
存储库中获取的 defmt-rtt
的分支。
此存储库是在上游提交 50e3db37d5429ed3344726f01e1bc4bf04902251
时分叉的。
许可
许可如下之一
-
Apache 许可证 2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
-
MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则任何您有意提交以包含在作品中的贡献,根据 Apache-2.0 许可证定义,应按上述方式许可,不附加任何其他条款或条件。
依赖项
~1.2–1.7MB
~30K SLoC