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

你可能感兴趣的:(嵌入式开发)