linux串口数据部分丢失,Arm,Linux串口数据丢失的问题

在Linux环境下,程序在执行任务时遇到串口数据丢失问题。当去除任务执行,仅读取串口时,数据不再丢失。问题在于读取时间设置与串口数据处理的平衡。文章探讨了Linux是否提供串口数据缓冲,以及如何设置缓冲大小和时间,同时提到了在Windows下使用overlap读写没有丢包情况。作者提供了串口读取和初始化的代码,并指出在某些情况下,设置缓冲区为4096字节可能是最佳选择。最后建议使用单独的线程来处理串口数据接收,以避免数据丢失。
摘要由CSDN通过智能技术生成

我的程序是这样的

while(1)

{

do job:use about 1/30 second;

m_pCom->Read(pBuffer,iSize,uMilliSescond);

}

程序运行的情况是,当数据在do job时过来,则丢掉了;去掉do job,只是不断读端口的话就不会丢数据。

为了保持FPS,读取串口时间不能设得太大,但读取时间设置的越小则丢包越严重,设为0则几乎全丢了,但在windows下用overlap读写串口则没有丢数据。我想知道linux有没有把串口来的数据buffer起来供异步读取,这个buffer大小,时间的保存有没有的设置,除了开线程外有没有办法解决?谢谢。

我的数据量很小,速率也很低,下面是我初始化和读取的代码:

int CSerialPort::Read( void* pBuffer, uint32 uBufferLength, uint32 uWaitTime /*= 0*/ )

{

fd_set fs_read;

struct timeval tv_timeout;

int retval = 0;

FD_ZERO (&fs_read);

FD_SET (m_iFD, &fs_read);

tv_timeout.tv_sec = uWaitTime / 1000;

tv_timeout.tv_usec = (uWaitTime % 1000) * 1000;

retval = select (m_iFD + 1, &am

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值