defmt
詳細情報
- 開発者
- Ferrous Systems(Knurling)
- 公開年
- 2020
- ライセンス
- MIT / Apache 2.0
- ソースコード
- github.com/knurling-rs/defmt
フォーマット文字列が開発機の外に出ない組み込みRust向けロギング。デバイスが送るのはインデックスと生データだけだ。
名前はdeferred formatting(遅延フォーマット)の略。マイコン上の素のprintfは、文字列ごとにフラッシュを消費し、数値を文字にする処理にサイクルを使う。defmtは文字列をデバイスにロードされないELFセクションへ移し、各文字列を整数に置き換える。ターゲットから送られるのはそのインデックスとバイナリ形式の引数だけで、ホストがELFファイルから文字列を引き当てて整形する。
その結果、ログのサイズは何分の一にもなり、タイミングの厳しいコードへの影響もほとんどない。転送には通常、probe-rs経由のRTTが使われる。難点は、まったく同じELFファイルがないとログが読めないことで、違うバイナリを使うとメッセージの代わりに数字が並ぶ。開発はKnurlingプロジェクトの一環としてFerrous Systemsが行い、Embassyでも多用されている。