禺画像]
scanf といえば指定したフォーマット以外を入力した時、それ以降の scanf が使えなくなる。
本番ではあまり使わないが Debug では時々使うこともある。
という訳で scanf の動きを調べてみることにする。
まずは、 Simulator で試してみよう。
FRK-RX62N (19) printf (7) KPIT GNURX Simulator[LINK] をベースに printf と scanf の無限ループに変更して試す。
最初は Optimized ライブラリだ。
予想に反して問題なく動いている。(右図)
Optimized ライブラリすばらしい!!
それでは次に Newlib ライブラリでやってみる。
数字の変わりにアルファベットの a を入れるとご覧の通り。
printf だけが連続して実行されてしまう。
禺画像]
それでは scanf の前に fflush 又は rewind を入れてみる。
禺画像] 上図のように予定通りバッファがクリアされて問題なく動いている。
しかし、Optimized ライブラリとは表示が若干異なる。
というわけで
・Optimized ライブラリでは何もしなくてよい。
・Newlib ライブラリでは従来どおり fflush 又は rewind を使わなければならない。
ということがわかった。
念のためシリアルポートを使った場合も試してみたが結果は同じだった。
参照:
Renesas Application Notes[LINK] RX600 Series Adding Printf and Scanf Support (R01AN0509EU0100)
環境:High-performance Embedded Workshop Upgrade 4.09.00
KPIT GNURX v11.02 Windows Tool Chain (ELF)
セコメントをする