LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1460|回复: 7

问linux下串口程序奇偶校验问题。

[复制链接]
发表于 2007-4-19 19:20:48 | 显示全部楼层 |阅读模式
设置串口的奇偶校验位时,设置完结构struct的成员c_cflag的PARENB和PARODD位以后,
其成员c_iflag成员支持的变量有一个INPCK和ISTRIP还用设置马?用的话这两个变量和
c_cflag中设置的有什么冲突和关系吗?
发表于 2007-4-22 13:14:40 | 显示全部楼层
switch (parity) {
        case 'n':        // No Parity
        case 'N':
                options.c_cflag &= ~PARENB;                        /* Clear parity enable */
                options.c_cflag &= ~CSTOPB;
                break;
        case 'e':        // Even Parity
        case 'E':
                options.c_cflag |= PARENB;                        /* Enable parity */
                options.c_cflag &= ~CSTOPB;
                options.c_cflag &= ~PARODD;                        /* change to even parity */
                options.c_iflag |= (INPCK | ISTRIP);
                break;
        break;
        case 'o':        // Odd Parity
        case 'O':
                options.c_cflag |= PARENB;                        /* Enable parity */
                options.c_cflag &= ~CSTOPB;
                options.c_cflag |= PARODD;                        /* change to odd parity */
                options.c_iflag |= (INPCK | ISTRIP);
                break;
        case 'S':        // Space Parity is set the same as no parity
        case 's':               
                options.c_cflag &= ~PARENB;                        /* Clear parity enable */
                options.c_cflag &= ~CSTOPB;
                break;
        default:
.....
}
回复 支持 反对

使用道具 举报

发表于 2007-4-22 13:51:32 | 显示全部楼层
当激活c_cflag中的奇偶校验后,应该激活输入的奇偶校验。与之相关的标志有INPCK,IGNPAR,PARMRK和ISTRIP。一般是通过选择INPCK和ISTRIP激活检验和移除奇偶位

option.c_iflag |= (INPCK | ISTRIP);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-22 19:56:21 | 显示全部楼层
谢谢,我想在问一下ISTRIP位不是移出奇偶校验位马?如果设置了奇偶校验在移出奇偶校验位岂不是相当于没有设置奇偶校验位吗 ?
谢谢您的回答了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-22 20:06:49 | 显示全部楼层
我又想了想是不是我理解错误了阿。ISTRIP不是移除的是上次奇偶校验的结果,并不是移除奇偶校验的设置位阿。我肯定是理解错了
回复 支持 反对

使用道具 举报

发表于 2007-4-23 11:34:07 | 显示全部楼层
在你设置了校验位的情况下,串口传来的数据是包含校验位数据的。在你的数据位、停止位之外,还有额外的校验位。如果你不把输入的校验位验证后移除出去,接收到的数据就会多了这个校验信息,会造成信息混乱
回复 支持 反对

使用道具 举报

发表于 2007-4-23 11:38:18 | 显示全部楼层
简单的说,是校验后把数据流中的刚校验过的校验信息剔除掉。
个人理解,仅供参考,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-23 16:40:41 | 显示全部楼层
谢谢了阿
明白了:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表