我遇到了一个很奇怪的问题,使用g ++ 4.1.2。我有一个非常基本的程序,它打开一个串口并向它写入数据。该端口被打开使用下列命令&设置:g ++优化小写字母大写 - bug?
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);
我具有由char
ASCII常量的阵列,以通过串行链路被发送。数据使用简单的write(fd, &serial_out, 1)
,serial_out
是要写入的字符。然后将这些数据放到16x2 LCD上。
现在这里是奇怪的事情。只要我编译-O0
这一切都很好。但是,如果我用更高的值(1,2,3或s)进行编译,则所有小写字符在LCD上都显示为大写字母。
有没有人知道可能是什么原因造成的?我可能会忽略一些简单的东西,但我真的不知道。
这似乎是有道理的。明天考试! – Darhuuk
你正在清除'CS8',但他的代码正在设置那个位。 – Tim
@Tim:谢谢你敏锐的眼睛;我修复了它。 – wallyk