gpt4 book ai didi

c - Linux termios参数解释

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:38 33 4
gpt4 key购买 nike

我一直在尝试在装有 Linux (Debian Wheezy) 操作系统的 Olimex A13 机器上设置串口。要设置参数以设置 UART,我使用的是 termios 结构。在我的例子中,我只是简单地设置一个 parameter = value 如下...

options.c_cflag = (CLOCAL | CREAD);

我还在 Internet 上看到如下示例代码...

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 = 设置为参数时,按位运算符是否多余?
如果有人能澄清这一点,我将不胜感激。

最佳答案

termios 位确实是在 unsigned int 上设置的位在 struct termios 内(至少在 Linux 上)。它们在 /usr/include/<platform>/bits/termios.h 中定义.

How is... options.c_cflag |= (CLOCAL | CREAD); ...interpreted compared to... options.c_cflag = (CLOCAL | CREAD);

|= (CLOCAL | CREAD)会将请求的 termios 位额外设置为已经存在的位,而 = (CLOCAL | CREAD)设置您请求的位,将其他所有内容重置为零(这很可能是错误的,因为它会将例如字符大小设置为 5 位 (CS5)。

c_cflag &= ~PARENB;相同反对options.c_cflag = ~PARENB .而前者将设置PARENB标志为零,后者会将 所有位 设置为 1,除了 PARENB将设置为零的标志 - 我不认为这是期望的结果。

关于c - Linux termios参数解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965725/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com