Arduino用のprintf準拠の書式化文字列ライブラリを作ってみた。

Arduinoの開発&デバッグでよく困るのがprintf()がなかったり浮動小数点型など特定のデータ型に対応していないことだったりする。

printf()の完全実装は複雑かつ巨大すぎるので普段使いそうな機能に限定して作成してみたがコンパイル後のバイナリーに浮動小数点ライブラリがリンクされるとATmega32U4で約4Kほど。もう少し小さくしたいところではあるが...まぁ、こんなもんかな。

組み込み系では数値を文字列に変換する関数が実装されていないことも多いため効率は良くないが標準ライブラリを使わずに変換している。なのでほぼ全てのCPUで動作すると思う。

なお、書式のエラーチェックはしてないので間違った書式を指定してもエラーにはならないことに注意すること。

変換指定は次の形式をとる。([ ]内は省略可能)

%[フラグ][0][最小フィールド幅][.精度][長さ修飾子]変換指定子

【修正記録】
2024-09-23
int8_t/uint8_t, int16_t/uint16_tの対応を行ったのに伴い[長さ修飾子]’h’と’hh’も対応してみた。しかし、いろいろ追加してるうちにずいぶん大きくなった気がする...(-_-;)

2024-09-22
int32_t/uint32_t, int64_t/uint64_t, intmax_t/uintmax_tの対応を行った。それと浮動小数点の精度指定の不具合修正と浮動小数点の小数点以下桁数を最大16桁に変更。但し、AVRは最大7桁となる。

2024-09-21
性能とサイズの改善のためpow()関数をやめてテーブル参照方式に変更。小数点以下は最大9桁まで。この変更によりmath.hのインクルードが必要なくなった。あと数値文字変換がバグってたので修正。

【スケッチ】

【ダウンロード】
Formatライブラリ(zip形式)

【ライブラリ】
Arduino用に作ったのはPrintFormatクラスのみでArduino開発環境への明確な依存性はないため他の環境にも対応可能。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください