WinAVRのprintfで浮動小数点の出力
AVRStudio6での設定方法を追記(2012-12-12)
Microchip Studioでの設定方法を追記(2023-08-01)
AVRStudio4
AVR Studio4とWinAVRでLCDに実数表示させる場合に、
fprintf(fp, “%4,2f”, ds);
なんて書いてもまともに出力されずにしばらくはまりました。・・で調べてみるとWinAVRのチュートリアルにちゃんと書いてありました。
浮動小数点を扱う場合は、リンカーオプション指示とmathライブラリとprintf用のfloatライブラリを明示的にリンクしなければいけないようです。
具体的には、AVR Studioの”Project”メニューから”Configration Options”を選択して、”Libraries”タブで”libm.a”と”libprintf_flt.a”を”Add Object…”で選択します。

つぎに下のほうの”Custom Options”タブで”[Linker Options]”に”-Wl,-u,vfprintf”を追加してやります。

これでプロジェクトをビルドしてAVRマイコンに書き込めば正常な表示が得られました。
AVRStudio6
設定方法が、AVRStudio4と多少違うので追記します。
プロジェクトのプロパティを開いて、AVR/GNU LinkerのGeneralにリストアップされている Use vprintf Library(-Wl,-u,-vfprintf)にチェックを追加する。

つぎに、同じくAVR/GNU LinkerのLibrariesにprintf_fltを追加する。おそらくlibmは最初からリストアップされている(単にmと表示)はずなので追加は不要と思うが、リストアップされていない場合はこれも必要。

ついでに、CPUのクロック周波数の宣言は次のとおり。

Microchip Studio
Microchip StudioもAVR Studioと同じような設定が必要となります。ただ、最新のバージョンではこれらライブラリのためのオプションがなくなっています。
プロジェクトを作成してプロジェクトのプロパティを開きます。以下の画像のようにToolchain→XC8 Linker→Generalに”Use vprintf library(-Wl,-u,vprintf)”が表示されない場合はMicrochip Studioのダウングレードをおススメします。

確認できる限り、Microchip StudioのVersion 7.0.2542ではこのオプションが利用可能です。この古いバージョンはこちらからダウンロードできます。
新しいMicrochip StudioをアンインストールしてVersion 7.0.2542をインストールしてください。注意事項として、以下のように最新版(latest version)をインストールするかどうかを聞かれるメッセージがでることがあります。この場合はチェックを外します。なお、インストールするとXC8もVersion2.31と少し古いものがインストールされます。

下の画像のようにToolchain→XC8 Linker→Generalにvprintfライブラリのオプションが表示されていればOKです。

Toolchain→XC8 Linker→Librariesに”libprintf_flt”を追加してやればOKです。

最新版でこのオプションがサポートされていない理由はよくわかりません。ただ、この浮動小数点対応ライブラリをリンクするとバイナリが巨大となることから使用が推奨されていないことも考えられます。本来は、自力で関数作成するなどして対応するのが良いと思われます。
3件のピンバック
ポータブルDSPラジオの製作 | henteko.org
QRPデジタルパワーメーターの製作 | henteko.org
ニッケル水素電池放電器の製作 | henteko.org
コメントは現在停止中です。