g ++ 4.1.2で非常に奇妙な問題が発生しました。私はシリアルポートを開いてそれにデータを書き込む非常に基本的なプログラムを持っています。ポートは、次のコマンドを使用して&セットアップを開いている:g ++小文字から大文字に最適化する - バグ?
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
struct termios port_settings;
cfsetispeed(&port_settings, B115200);
cfsetospeed(&port_settings, B115200);
port_settings.c_cflag &= ~PARENB;
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;
tcsetattr(fd, TCSANOW, &port_settings);
私は、シリアルリンクを介して送信されるASCII定数からなるchar
の配列を持っています。データは、書かれるべき文字であるwrite(fd, &serial_out, 1)
、serial_out
を直接使用して書き込まれる。このデータは16x2 LCDに表示されます。
ここでは奇妙なことがあります。私が-O0
とコンパイルする限り、これはすべて素晴らしいです。しかし、それ以上のコンパイル(1、2、3、またはs)の場合、すべての小文字はLCDに大文字で表示されます。
これを引き起こした原因は何ですか?私は単純なものを見落としているかもしれないが、私は本当に手がかりがない。
意味をなさないように思われること。明日テストします! – Darhuuk
あなたは 'CS8'をクリアしていますが、彼のコードがそのビットを設定していました。 – Tim
@Tim:鋭い目に感謝します。私はそれを修正しました。 – wallyk