mbedでprintfを使っても浮動小数の値が表示されない・・・だと?

mbedには公式のオンラインコンパイラが用意されていますが、オフラインコンパイルを行うことも可能です。
しかし、オンラインコンパイラとオフラインコンパイラで何か設定が違うようで・・・。

私はオフラインコンパイラにCoocox CoIDEを使用しているのですが、
メンドクサイ設定は少ないし、コード制限はないし、問題が多いNucleoも標準でカバーしてくれている等
いいことづくめだと思っていたのですが、実は
printfで浮動小数(float, doubleなど)を入出力できないんですね・・・。
(出力指定しても0ではなく空白’0x0’になります)

もちろんprintfだけではなく、scanfやsprintfなどの標準入出力すべてがこの問題の対象になります。
調べると無理矢理な解決方法はいろいろあるみたいですが、標準環境から遠のく上に実行ファイルのサイズが桁違いに増えるらしい。

お金や時間をかけず最短で解決する方法は、「STM32系で浮動小数を入出力したい場合はオンラインコンパイラを使え」ってことですね。

対象がstm32系っぽいので、青mbedとかではこの問題が発生しないのかな?
コメントをいただきました。青mbedでも同様の問題が発生するとのことです。
Cortex-M系で同じGCCコンパイラを使用する限りこの問題はつきまといます。

Nucleoはすべてこの問題が発生します。やっぱり標準品の青mbedを買うしかないのかぁ・・・。
GR-PEACH待ちなんだけど、なんかお爺ちゃんたちがワガママ言ってモメてるらしいしリリースも遅いだろうなぁ。


2 comments to this article

  1. newlib

    on 2015年1月21日 at 10:05 AM - 返信

    青mbedの中身はLPC1769でSTM32(Nucleo)と同じCortex-M系のマイコンです。当然同じGCCコンパイラを
    使うので浮動小数点の扱いで全く同じ問題が発生します。
    オフラインコンパイラではバイナリサイズが激増するのを承知で浮動小数点までサポートする
    ライブラリを使うか、浮動小数点をオミットしたライブラリをつかうか、はたまたmbedの利便性を
    捨ててmakefileをいじって最適化されたスマートな浮動小数点ライブラリを使いこなすかの3択になります。

  2. Level52

    on 2015年1月22日 at 7:00 AM - 返信

    > 青mbedの中身はLPC1769でSTM32(Nucleo)と同じCortex-M系のマイコンです。当然同じGCCコンパイラを
    > 使うので浮動小数点の扱いで全く同じ問題が発生します。
    mbedのplatformページにあるほぼすべてで同様の現象が発生するということですね・・・。
    海外のフォーラムにて「This issue "ST Nucleo board(STM32)" only.」とか記載されていたので
    他ボードでは発生しないと思っていました。記事は後日修正致します。
    情報ありがとうございました。

コメントを残す