Linux串口接收数据读不完的问题?

mz454619501 2015-08-27 04:07:54
用PC的串口调试助手发送数据下来,我发誓11个字节,我一次从串口读取512个字节,但是Linux串口的只接收到8个字节,怎么回事呢?

串口一些配置如下:
newtio.c_lflag &= ~(ICANON); /*Input*/
newtio.c_cc[VTIME] = 5;//超时时间 百ms
newtio.c_cc[VMIN] = 0;

串口读取如下;
fd_set rfds;
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 200000;
int retval;
int nn = 0;



memset((*ReadUartDat).ReadBuf,0,UARTBUFFSIZE);

FD_ZERO(&rfds);
FD_SET(((*ReadUartDat).uart_fd),&rfds);

nn = (FD_ISSET(((*ReadUartDat).uart_fd),&rfds));
if(nn >0)
{
FD_ZERO(&rfds);
FD_SET(((*ReadUartDat).uart_fd),&rfds);
if ((select(((*ReadUartDat).uart_fd + 1),&rfds,NULL,NULL,&tv)) < 0)
{
perror("select()");
}
else
{
while(1)
{
if(R_uartDatNumAll >= 512)
break;
R_uartDatNum = read(((*ReadUartDat).uart_fd),(*ReadUartDat).ReadBuf,512);
if(R_uartDatNum <= 0)
{
// tcflush(((*ReadUartDat).uart_fd),TCIFLUSH);
break;
}
R_uartDatNumAll += R_uartDatNum;
}
}
}
...全文
660 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianmen431906 2018-12-11
  • 打赏
  • 举报
回复
newtio.c_cc(vmin)不能为0
mz454619501 2015-09-13
  • 打赏
  • 举报
回复
引用 6 楼 csszzlsw 的回复:
你试试发12 13 个 看看是不是还是只有8个字节的数据有效,若果这样的话说明你的串口一次只能接收到8位,需要分批接收
串口的缓存有1K,我只读512字节,理论上一次读取512字节应该是可以的。。。
物联风景 2015-09-09
  • 打赏
  • 举报
回复
你试试发12 13 个 看看是不是还是只有8个字节的数据有效,若果这样的话说明你的串口一次只能接收到8位,需要分批接收
zhxianbin 2015-08-28
  • 打赏
  • 举报
回复
网上搜索一个代码比较一下,另外看看 select 的用法
mz454619501 2015-08-28
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
if(R_uartDatNumAll >= 512) break; 这里不需要 计数复位吗 R_uartDatNumAll = 0;
这个我会在所有的数据处理完了之后,进行复位; 现在关键问题是,我一次读512个字节,如果我发11个,读出来的数据,只有前8个正常,后面的都是 0
zhxianbin 2015-08-27
  • 打赏
  • 举报
回复
if(R_uartDatNumAll >= 512) break; 这里不需要 计数复位吗 R_uartDatNumAll = 0;
mz454619501 2015-08-27
  • 打赏
  • 举报
回复
我发11个字节,显示我收到了11个,但是前8个字节接收正常,后面的都是0,怎么回事呢
mz454619501 2015-08-27
  • 打赏
  • 举报
回复
期待高手帮忙看一下,可能的问题出在哪里?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧