linux下串口多线程通信 ,多串口收发数据错乱问题解决办法

本文讲述了在Linux系统中遇到的串口多线程通信问题,特别是新系统内核下16路串口收发数据错乱和丢包。通过分析和实验,作者发现静态变量static在多线程环境中的使用导致了问题,移除static后问题得到解决。同时提到了串口配置、阻塞模式的重要性,以及新旧内核下串口速度的差异。
摘要由CSDN通过智能技术生成

 

 

最近在写AM335x平台的串口测试工具,最开始的时候写的第一版本,测试一直很ok,但是存在一些缺陷,于是就想改进一下,没想到后面在新的板子测试,竟然发现了以个很致命的问题,在旧系统旧内核测试一切正常,在新系统的情况下,系统16路串口测试,am335x自带的4路总是出现丢包的问题,其他扩展出来的16路没有任何问题,于是折腾了好久。

 

总算搞定。

 

我的板子系统自带4路,经过spi扩展出来12路,总的16路,首先是串口配置,一般有两种情况下的配置,一种是使用默认的参数直接配置即可,一种就是根据自己的需要重新配置。

 

首先定义termios结构体

 static  struct termios termold[17],termnew[17];

 

使用系统默认参数配置:

 

fd[i]=open(port[i],O_RDWR) ;     //打开串口
tcgetattr(fd[i],&termold[i]);          //获得默认串口配置参数
tcgetattr(fd[i],&termnew[i]);
cfmakeraw(&termnew[i]);          //使用cfmakeraw 配置
cfsetspeed(&termnew[i],B115200); //{115200,460800,921600}           //设置波特率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值