我一直在尝试在装有 Linux (Debian Wheezy) 操作系统的 Olimex A13 机器上设置串行端口。要设置参数以设置 UART,我使用的是termios结构。就我而言,我只是在parameter = value
下面设置一个...
options.c_cflag = (CLOCAL | CREAD);
我还在互联网上看到了如下示例代码...
tcgetattr(fd, &options);
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~( ICANON | ECHO | ECHOE |ISIG );
options.c_iflag &= ~(IXON | IXOFF | IXANY );
options.c_oflag &= ~OPOST;
tcsetattr(fd, TCSANOW, &options);
在上述情况下,参数分配似乎使用按位运算符来设置参数。
我的问题是,如何解释上述作业?
例如:怎么...
options.c_cflag |= (CLOCAL | CREAD);
解释为...
options.c_cflag = (CLOCAL | CREAD);
???
同样的:如何...
options.c_cflag &= ~PARENB;
解释比较...
options.c_cflag = ~PARENB;
???
termios 标志真的是一组位,其中参数对应于标志中的特定位位置吗?
由于这些值是由参数(即 CLOCAL、CREAD)设置的,所以在设置flag =
参数时,位操作符是多余的吗?
如果有人能澄清这一点,我将不胜感激。