找回密码
 立即注册
收起左侧

如何接收处理大量快速的串口数据

14
回复
14839
查看
[复制链接]
累计签到:87 天
连续签到:1 天
来源: 2014-7-31 16:09:07 显示全部楼层 |阅读模式
5Qter豆
做个串口助手 比如如果按1000ms的频率发送 很好 用的append 一行一行显示

但是发送速度一快,比如1ms 就可能出现两帧黏在一起显示的情况。

现在我的发送频率只有50μs,请问应该如何处理才能避免N帧显示在一起呢?



最佳答案

查看完整内容

不是可以测试是否有可用数据吗,等没有可用数据了,就表示传送完了。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2014-7-31 16:09:08 显示全部楼层
20030969 发表于 2014-8-20 09:39
不晓得数据有多大,没法加校验和包长和包头包尾。

现在要等数据全部发送完毕了把缓存里的数据存到TXT里 ...

不是可以测试是否有可用数据吗,等没有可用数据了,就表示传送完了。

点评

byteavailable()还是啥。。求详细!  详情 回复 发表于 2014-8-28 17:08
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2014-8-1 09:52:28 显示全部楼层
添加一个缓冲试试,可以将接收到的数据先放到一个容器里面,然后再从容器里读取显示。

点评

不晓得数据有多大,没法加校验和包长和包头包尾。 现在要等数据全部发送完毕了把缓存里的数据存到TXT里 请问我要如何判断数据发完了?  详情 回复 发表于 2014-8-20 09:39
还有大约收到2万个字符的时候 程序就出错……  详情 回复 发表于 2014-8-1 16:15
因为每次收到的数据帧的字节数不一样,不好区分啊。接收数据的分辨率最小是多少?  详情 回复 发表于 2014-8-1 13:52
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-1 13:52:59 显示全部楼层
本帖最后由 20030969 于 2014-8-1 13:56 编辑
yafeilinux 发表于 2014-8-1 09:52
添加一个缓冲试试,可以将接收到的数据先放到一个容器里面,然后再从容器里读取显示。 ...

因为每次收到的数据帧的字节数不一样,不好区分啊。出现这种情况是为什么呢?用论坛的串口助手也是这样的
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-1 16:15:11 显示全部楼层
本帖最后由 20030969 于 2014-8-1 16:18 编辑
yafeilinux 发表于 2014-8-1 09:52
添加一个缓冲试试,可以将接收到的数据先放到一个容器里面,然后再从容器里读取显示。 ...

还有大约收到20万个字节的时候 程序就出错……
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2014-8-4 22:32:12 显示全部楼层
20030969 发表于 2014-8-1 16:15
还有大约收到20万个字节的时候 程序就出错……

估计是发送的太快,程序没有处理过来。

点评

经过调试 发现能够收到数据到缓存,但是界面会卡死直到显示处理完,请问啥方法可以避免卡死?我已经用了一个线程接收串口数据了,然后不断emit信号给主线程以显示数据。  详情 回复 发表于 2014-8-8 14:50
有没有QT串口高速采集的关键代码让我学习下,谢谢!  详情 回复 发表于 2014-8-7 11:24
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-7 11:24:06 显示全部楼层
yafeilinux 发表于 2014-8-4 22:32
估计是发送的太快,程序没有处理过来。

有没有QT串口高速采集的关键代码让我学习下,谢谢!
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-8 14:50:39 显示全部楼层
yafeilinux 发表于 2014-8-4 22:32
估计是发送的太快,程序没有处理过来。

经过调试 发现能够收到数据到缓存,但是界面会卡死直到显示处理完,请问啥方法可以避免卡死?我已经用了一个线程接收串口数据了,然后不断emit信号给主线程以显示数据。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2014-8-8 20:05:07 显示全部楼层
20030969 发表于 2014-8-8 14:50
经过调试 发现能够收到数据到缓存,但是界面会卡死直到显示处理完,请问啥方法可以避免卡死?我已经用了 ...

用多线程可以避免卡死的啊。

点评

现在是ui->textEdit->append(str);这句话卡 问题是这句话不能用线程处理吧……求解决办法!谢谢!  详情 回复 发表于 2014-8-11 09:18
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-11 09:18:06 显示全部楼层
yafeilinux 发表于 2014-8-8 20:05
用多线程可以避免卡死的啊。

现在找到原因了是ui->textEdit->append(str);这句话卡 问题是这句话不能用线程处理吧……求解决办法!谢谢!
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2014-8-13 23:29:57 显示全部楼层
20030969 发表于 2014-8-11 09:18
现在找到原因了是ui->textEdit->append(str);这句话卡 问题是这句话不能用线程处理吧……求解决办法!谢谢 ...

如果不追加,就把所有内容放到一个文档中,每次都显示文档的所有内容。
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-8-14 11:47:37 显示全部楼层
用线程去 处理 了,一个线程用来接收数据,另外一个线程用来显示数据就可以了,显示快慢是可以自己控制的嘛,只要保证串口接收的线程不要丢失数据就可以了。如果是PC的处理器完全可以达到这个速度
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-20 09:39:11 显示全部楼层
yafeilinux 发表于 2014-8-1 09:52
添加一个缓冲试试,可以将接收到的数据先放到一个容器里面,然后再从容器里读取显示。 ...


不晓得数据有多大,没法加校验和包长和包头包尾。

现在要等数据全部发送完毕了把缓存里的数据存到TXT里

请问我要如何判断数据发完了?
回复

使用道具 举报

累计签到:87 天
连续签到:1 天
2014-8-28 17:08:53 显示全部楼层
yafeilinux 发表于 2014-8-27 21:12
不是可以测试是否有可用数据吗,等没有可用数据了,就表示传送完了。

byteavailable()还是啥。。求详细!
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2014-9-25 22:43:46 显示全部楼层
20030969 发表于 2014-8-28 17:08
byteavailable()还是啥。。求详细!

嗯。可以了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了