我的程序是这样的
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