我正在使用一些开源软件,我想将一些错误修复程序返回给原始项目。该软件包括使用termios.h访问的串行接口。运行Ubuntu的PC和外围设备都使用相同的配置。我只想要非常基本的发送和接收字节设置:没有奇偶校验,没有流控制或XON / XOFF,没有规范模式。
原始代码只更改了一个标记:uart_config.c_oflag &= ~ONLCR;
这没有充分配置PC端的端口,我最终更换了所有标志值:
uart_config.c_iflag = IGNBRK | INPCK;
uart_config.c_oflag = NL0 | VT0;
uart_config.c_cflag = CS8 | CREAD | CLOCAL;
uart_config.c_lflag = 0;
哪作得好。 然而,几乎每个在线代码示例都显示仅设置特定位并使用& =〜或| =保持所有其他位不变 例如http://slackware.osuosl.org/slackware-3.3/docs/mini/Serial-Port-Programming
在设置中保留某些标志,值或未使用位的值背后的原因是什么?我想不出太多可以获得,除非有人无法理解所有标志的目的并且害怕改变它们,并且如果原始设置未预先配置为合理值,则存在很大风险。