WinAVRのprintfで浮動小数点の出力

最終更新時間:2007年09月30日 21時22分31秒

[電子工作/AVR]
[AVR,WinAVR,AVRstudio]

origin 2007-09-30


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..."で選択します。

image012.png

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

image013.png

これでプロジェクトをビルドしてAVRマイコンに書き込めば正常な表示が得られました。

AVRStudio6


 設定方法が、AVRStudio4と多少違うので追記します。

 プロジェクトのプロパティを開いて、AVR/GNU LinkerのGeneralにリストアップされている Use vprintf Library(-Wl,-u,-vfprintf)にチェックを追加する。

AVRStudio6_Linker_option.png

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

AVRStudio6_Libraries_add.png

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

AVRStudio6_F_CPU.png

Microchip Studio


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

microchip_studio_option_nogood.png

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

microchip_studio_install_message.png

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

microchip_studio_option_good.png

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

microchip_studio_libprintf.png

 最新版でこのオプションがサポートされていない理由はよくわかりません。ただ、この浮動小数点対応ライブラリをリンクするとバイナリが巨大となることから使用が推奨されていないことも考えられます。本来は、自力で関数作成するなどして対応するのが良いかと思われます。
 
 

このテンプレートをデザインした者がへたれなので IE6 には非対応です。IE7FirefoxSafariOperaChrome など、モダンなブラウザを利用して下さい。


▲ページ Top へ...