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

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

origin 2007-09-30


AVRStudio6での設定方法を追記(2012-12-12)


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


▲ページ Top へ...