FRK-RX62N (20) scanf KPIT GNURX2011年07月20日 20時43分29秒

Optimized ライブラリで scanf
scanf といえば指定したフォーマット以外を入力した時、それ以降の scanf が使えなくなる。
本番ではあまり使わないが Debug では時々使うこともある。
という訳で scanf の動きを調べてみることにする。
まずは、 Simulator で試してみよう。
FRK-RX62N (19) printf (7) KPIT GNURX Simulator をベースに printf と scanf の無限ループに変更して試す。
最初は Optimized ライブラリだ。
予想に反して問題なく動いている。(右図)
Optimized ライブラリすばらしい!!


それでは次に Newlib ライブラリでやってみる。
数字の変わりにアルファベットの a を入れるとご覧の通り。
printf だけが連続して実行されてしまう。
Newlib ライブラリで scanf は暴走



それでは scanf の前に fflush 又は rewind を入れてみる。
fflush 又は rewind でバッファクリア
上図のように予定通りバッファがクリアされて問題なく動いている。
しかし、Optimized ライブラリとは表示が若干異なる。


というわけで
・Optimized ライブラリでは何もしなくてよい。
・Newlib ライブラリでは従来どおり fflush 又は rewind を使わなければならない。
ということがわかった。
念のためシリアルポートを使った場合も試してみたが結果は同じだった。


参照:Renesas Application Notes RX600 Series Adding Printf and Scanf Support (R01AN0509EU0100)
環境:High-performance Embedded Workshop Upgrade 4.09.00
    KPIT GNURX v11.02 Windows Tool Chain (ELF)