CQ-LM3S3748 (13) USB printf (2)2012年11月13日 21時12分18秒

フルバッファード I/O (_IOFBF)
「printf がおかしい」の続き。
今までに無い経験だった。もしや、と思ってUSBputc() をやめて全て printf を使ってみた。
正常に表示できる。

ためしに setvbuf(stdout, NULL, _IOFBF, 0); を指定すると(上右図)あらあら悲惨な結果だ。
この結果から _IOLBF がデフォルトということになる。

以前聞いた事があるのは「 Buffered I/O と Unbuffered I/O を混在させてはいけない。」ということだった。不具合に遭遇したことがなかったので今まで意識することはなかったがこれからは気をつけよう。
では具体的にどうすればよいのだろう?

①全て高水準関数(Buffered I/O)を使う。
② setvbuf で _IONBF を設定する。

①は意識しないとなかなか難しい。②は非効率的ということになる。
今回は①の方法で解決することにする。(USBputc() を putchar() に変更)
何とか解決はしたがもっと他にいい方法は無いのだろうか?

環境:CQ-LM3S3748
    + Keil MDK-ARM V4.53
    + GCC Sourcery CodeBench Lite 2012.03-56
    + KPIT Cummins GNU-Archive Editor v1.1
    + KPIT Cummins GNU-Map Viewer v1.0