3个版本 (破坏性更新)

新增 0.3.0 2024年8月16日
0.2.0 2024年6月15日
0.1.0 2024年4月13日

#1441解析器实现


用于 cdefmt-decoder

MIT 协议

27KB
490

cdefmt

cdefmt ("c de format", 简称 "c deferred formatting") 是一个针对资源受限设备(如微控制器)的高度高效的日志框架。

灵感来源于 https://github.com/knurling-rs/defmt/

设置

c

  1. 将cdefmt修改添加到链接脚本中
    1. 更新/添加 .note.gnu.build-id 部分,以定义必要的内存位置
      .note.gnu.build-id : {
          PROVIDE(__cdefmt_build_id = .);
          *(.note.gnu.build-id)
      }
      
    2. 将cdefmt元数据部分添加到链接脚本的末尾(或存在 /DISCARD/ 之前)
      /* CDEFMT: log metadata section */
      .cdefmt 0 (INFO) : {
          KEEP(*(.cdefmt.init .cdefmt.init.*))
          . = . + 8;
          KEEP(*(.cdefmt .cdefmt.*))
      }
      
  2. 确保使用以下标志进行编译
    • -g - 需要调试信息以解析日志参数。
    • -Wl,---build-id - 将构建ID链接到二进制文件,以验证elf兼容性。
  3. 将头文件 cdefmt.h 添加到您的项目中。
  4. 在需要使用的地方包含该头文件。
  5. 在您的项目中实现 cdefmt_log
  6. 在主文件中的某处调用 CDEFMT_GENERATE_INIT()
  7. 在您的日志后端初始化后,并在可以安全调用 cdefmt_log 之后,调用 cdefmt_init()
  8. 享受。

Rust

待定

使用方法

基本上,cdefmt_log 应将日志存储/写入日志接收器,然后应将这些字节原样提供给解析器,并附上elf二进制文件。

请参阅

运行示例的最简单方法是通过使用cmake构建项目

cmake -S . -B build
cmake --build build/

然后运行stdout示例,并将它的stdout管道到stdin示例

build/examples/stdout/example-stdout | build/stdin --elf build/examples/stdout/example-stdout

许可证

依赖项

~8.5MB
~161K SLoC