当前位置: 技术问答>linux和unix
请教个设置串口数据位的问题
来源: 互联网 发布时间:2016-12-20
本文导语: 本帖最后由 sunling83417 于 2011-08-05 15:23:17 编辑 我看了一些文档,对于gcc中设置串口数据位,代码都像这样: struct termios tio; tcgetattr(tty_fd, &tio); tio.c_cflag &= ~CSIZE; //清除数据位掩码 switch(da...
struct termios tio;
tcgetattr(tty_fd, &tio);
tio.c_cflag &= ~CSIZE; //清除数据位掩码
switch(databit){
case 5:
tio.c_cflag |= CS5;
break;
case 6:
tio.c_cflag |= CS6;
break;
case 7:
tio.c_cflag |= CS7;
break;
default:
tio.c_cflag |= CS8;
break;
}
问题是,根据宏定义,CSIZE=00x60、CS5=0x00、CS6=0x20、CS7=0x40、CS8=0x60,这样的话,前面用~CSIZE不是只清除了CS8的标志位吗,对5、6、7无效,可为什么程序都是这样写?
搞不清楚原因,望大家指点,谢谢!
|
0x60不是2的整数次方,实际上0x60=0x40+0x20,简单说,标志位前三位是011表示8位,010表示7,001表示6,000表示5,实际上清除了8也就是清除了所有的