• 3129阅读
  • 8回复

[提问]串口如何稳定接收数据 [复制链接]

上一主题 下一主题
离线200300969
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-31
做个串口助手 比如如果按1000ms的频率发送  用的append 一行一行显示

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

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

只看该作者 1楼 发表于: 2014-08-01
将读取的数据(QByteArray)追加到数据缓存(QByteArray),然后数据缓存分解成若干个数据包。

上述说的也就是,追加数据->解析数据包->然后从缓存把解析的数据包移除
离线dosmlp

只看该作者 2楼 发表于: 2014-08-04
根据经验,串口不适合高速通信,反应比较慢
离线200300969

只看该作者 3楼 发表于: 2014-08-06
回 dosmlp 的帖子
dosmlp:根据经验,串口不适合高速通信,反应比较慢[表情]  (2014-08-04 13:39) 

50μs 适用性咋样?
离线dosmlp

只看该作者 4楼 发表于: 2014-08-08
回 200300969 的帖子
200300969:50μs 适用性咋样? (2014-08-06 09:44) 

我觉得有点快,你可以用系统的高精度计时器看一下写入一次串口要用多长时间,
感觉应该会超过50微秒,这样的话这个频率就没啥意义了
离线200300969

只看该作者 5楼 发表于: 2014-08-08
回 dosmlp 的帖子
dosmlp:我觉得有点快,你可以用系统的高精度计时器看一下写入一次串口要用多长时间,
感觉应该会超过50微秒,这样的话这个频率就没啥意义了 (2014-08-08 11:55) 

改成300了 界面还是会卡死
离线dosmlp

只看该作者 6楼 发表于: 2014-08-08
回 200300969 的帖子
200300969:改成300了 界面还是会卡死 (2014-08-08 14:57) 

一些比较耗时的操作不能放在gui线程中,否则会卡死界面,应该新建一个线程让次线程来做
离线200300969

只看该作者 7楼 发表于: 2014-08-11
回 dosmlp 的帖子
dosmlp:一些比较耗时的操作不能放在gui线程中,否则会卡死界面,应该新建一个线程让次线程来做 (2014-08-08 17:11) 

卡的元凶找到了ui->textEdit->append(str);这句话,每次要刷新一次显示。现在该如何处理?这个没法放在别的线程处理吧……
在线dbzhang800

只看该作者 8楼 发表于: 2014-08-11
回 200300969 的帖子
200300969:卡的元凶找到了ui->textEdit->append(str);这句话,每次要刷新一次显示。现在该如何处理?这个没法放在别的线程处理吧…… (2014-08-11 09:21) 

1. 确保你使用的是 QPlainTextEdit 而不是 QTextEdit
2. 设置合适的 maximumBlockCount
快速回复
限100 字节
 
上一个 下一个