标题:老问题:串口接收数据(readall),,会换行问题,,希望大家都给点解决意见
作者:hello_树哥
日期:2017-08-22 17:53
内容:
利用串口调试工具,跳线帽短接收发,实现通过软件界面的一个textedit发,,另一个textedit收,功能已经实现了,但是还有问题
问题:数据能完全读到,但是会出现换行,,网上的都说家read.waitreadyread()函数,或者sleep()函数,但是我都试过了,,没有解决这个问题,大家有什么更好的办法吗??或者是通过多个线程能解决吗??
#1 [hello_树哥 08-22 18:02]
就是假如我发送一串字符串“cbashcnklasnkc”,但是在接受端会出现数据不连续,,换行,而且每次换行的位置不一样,可能接受的是:
cbashcnkl
asnkc
这样的序列,也可能是
cb
ashcnklasnkc
这样的序列
#2 [lichen221334 08-23 08:38]
发送的时候 flush()一下,接收的时候 waitreadyread()
再不行就用处理网络的方式 来 接受信息,拼接信息直到满足条件或 超出可接受范围
#3 [liudianwu 08-23 09:07]
任何数据的接收肯定是不确定的,你可以将接收到的数据放入buffer,然后开个定时器从buffer中取出来判断是否完整,完整则解析。如果你想不要断行,你可以在接收数据前延时100毫秒试试。
#4 [nigoole 08-23 09:26]
延时问题应该能解决大部分时候,毕竟时间这个东西,大家都很难估摸,假如你知道接收数据的长度,可以用这个来进行处理,等串口buf的数据接收到某个长度的时候再读,如此往复。
#5 回 liudianwu 的帖子 [hello_树哥 08-23 10:16]
liudianwu:任何数据的接收肯定是不确定的,你可以将接收到的数据放入buffer,然后开个定时器从buffer中取出来判断是否完整,完整则解析。如果你想不要断行,你可以在接收数据前延时100毫秒试试。 (2017-08-23 09:07)
这里我将waitForReadyRead(10),函数换成sleep(10),在接受数据前加了一个sleep(10)毫秒级的函数确实能够读取,而且不换行,,但是又了新问题,貌似readyread信号发射了多次,,,本来就一行就完成了,这里出现了好多行,而且是不确定的,后面读到了的行是没有数据