linux下关于串口write error (11: Resource temporarily unavailable)问题解决

出现的原因:由于串口写数据字节数有限,上一次数据没有写完的情况下,第二次数据已经到来,造成写数据失败,表现为串口不可用。

解决方法,1.加延时的方法

              通过波特率,计算延时。

              以波特率为115200为例,一帧数据包括:1个起始位:8个数据位;1个停止位;总共10bits;所以

               波特率115200 = 115200 (位/秒)

               如果没有校验位,就应该除以 10,得到的是每秒字节数:
               波特率115200 = 115200 (位/秒) = 11520 (字节/秒)

               现在串口最大传输数据位4095字节,4095/11520 = 0.355秒,也就是在波特率为115200下传输4095个字节需要0.355秒,

               所以需要保证在这个时间范围内才能传输完数据,如果小于这个时间传输数据失败。

 

              2. 将串口设置为阻塞状态

               将串口用阻塞的方式打开,fd = open(dev, O_RDWR | O_NOCTTY)

                                                         fcntl(serial->fd, F_SETFL, 0);设置为阻塞。

             对fcntl函数的理解:https://baike.baidu.com/item/fcntl/6860021?fr=aladdin

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值