关于termios中的一个小问题

前些天在写一个2410上的串口通信程序的时候,一开校验,数据就不对,不知道为什么。后来,感觉问题可能是出在开校验的那个标识的设置。但是我是按照手头的资料,而且在网上的资料千篇一律的也都是要求把termios结构体这样设置:c_iflag |= (INPCK | ISTRIP)。而且解释ISTRIP是为了在校验后去除校验位。

但是,问题就出自这里,还是查阅了Stevens的《Unix环境高级编程 》,这里说ISTRIP是去除串口数据的第八位,问题就在这里,若串口是类似7E1这样的设置,那么第八位是校验位,刚好去除,但是若像我那个程序被要求的,串口设置是8E1,就出现了问题,我根本不需要加这个ISTRIP去除校验位。加了反倒就错了,经验证,去掉ISTRIP后,数据收发正确。而在《Unix环境高级编程》中给出的将串口设置为原始模式的范例中,明确去除了ISTRIP位,不知道是否这个ISTRIP标识是终端模式专用的?

但是这个,就我看到的所有资料貌似没有说明这个问题,而且网上的文章几乎都完全一样,而且有点像是出自《POSIX串口编程指南》 不知道是否一个资料有误而被未加验证得传抄造成。谨记之~

《关于termios中的一个小问题》有3条评论

回复 luguo 取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据