redworlf007 发表于 2020-10-22 22:46:20

请教arm linux上qt c艹开发串口程序问题。

1、nuc980+linux
2、软件用的 qt 5.9.8 c艹开发,用qt的串口库
3、应用:每间隔300ms给外设发8个字节的命令,外设应答。
4、运行一两天后,应用程序显示在发命令出去,实际硬件上没有往外发东西,串口引脚上我接了led+电阻上拉到3.3V,没数据灯不闪。
5、kill掉应用程序,再手动启动程序,恢复。
6、现在甩锅给了Linux串口驱动,怎么玩?

echocxp 发表于 2020-10-22 23:24:00

要是使用 USB转串口,很容易出现问题,并且不能恢复,需要手动拔插一下才能恢复正常。
要长期稳定地使用串口工作,最好不要用usb转串口的。

redworlf007 发表于 2020-10-22 23:24:59

echocxp 发表于 2020-10-22 23:24
要是使用 USB转串口,很容易出现问题,并且不能恢复,需要手动拔插一下才能恢复正常。
要长期稳定地使用串 ...

Arm片子上的原生串口。

xjavr 发表于 2020-10-22 23:28:12

上代码呀,这样人家想回答都不知道怎么回答。{:titter:}

echocxp 发表于 2020-10-22 23:28:51

kill掉应用程序,再手动启动程序,恢复。
看来还是你的程序出了问题。

donglaile 发表于 2020-10-23 08:02:23

程序问题可能性比较大

redworlf007 发表于 2020-10-23 08:34:32

xjavr 发表于 2020-10-22 23:28
上代码呀,这样人家想回答都不知道怎么回答。


不是我写的代码,我做的硬件和系统。

jenkins 发表于 2020-10-23 08:36:14

应该是qt的串口库有问题,不要用qt的串口库。

笑笑我笑了 发表于 2020-10-23 08:37:49

搞个第三方串口工具比如cutecom试一下?要是也出现这种情况那这个问题就和应用程序关系不大。

miaoguoqiang 发表于 2020-10-23 08:56:46

写一个shell脚本,定时echo,看有没有问题。

redworlf007 发表于 2020-10-23 09:02:29

jenkins 发表于 2020-10-23 08:36
应该是qt的串口库有问题,不要用qt的串口库。

我的意思是直接用Linux的api操作串口,软件说qt的库大量人用,没人说有问题。qt的串口库真的问题多?

redworlf007 发表于 2020-10-23 09:03:05

miaoguoqiang 发表于 2020-10-23 08:56
写一个shell脚本,定时echo,看有没有问题。

准备用c写个测试代码,放进去一直跑

jenkins 发表于 2020-10-23 09:05:51

redworlf007 发表于 2020-10-23 09:02
我的意思是直接用Linux的api操作串口,软件说qt的库大量人用,没人说有问题。qt的串口库真的问题多? ...

QT串口库的问题不少的

三年模拟 发表于 2020-10-23 09:15:10

哈哈,我qt5.6也是嵌入式上跑的,串口通信也是qt自带的,稳定批量出货了,qt这个东西还是非常稳定的,不管是网络还是其它,长时间运行没毛病,代码写的好,从来不会死机。

三年模拟 发表于 2020-10-23 09:17:11

qt串口通信也得做好心跳,如果长时间没通信,可以尝试关闭串口,再次打开,不能用以前单片机的编程,打开就没问题了,嵌入式linux编程的思维和裸奔有很大的区别

三年模拟 发表于 2020-10-23 09:19:40

我这边软硬件系统qt都是自己一条龙了,也不存在甩锅给谁,出问题自己维护,方法建议使用我上面的。

redworlf007 发表于 2020-10-23 10:20:05

三年模拟 发表于 2020-10-23 09:17
qt串口通信也得做好心跳,如果长时间没通信,可以尝试关闭串口,再次打开,不能用以前单片机的编程,打开就 ...

我再想是不是Linux串口驱动的问题,我再用C写个代码,调用Linux上write函数测测看看啥问题,我感觉应该不是Linux串口驱动问题。

canspider 发表于 2020-10-23 10:36:35

先命令行下用 cat /dev/ttyS0 测试一下,看看是不是驱动问题
如果cat 没问题那就是你的程序问题
发的话随便找个能输出东西重定向到/dev/ttyS0

7073640 发表于 2020-10-23 11:04:14

你不会自己写个C语言,的定时只发送变化数据 外面短路,看是不是正确自发自收,跑几天看看不就知道了

chunxx 发表于 2020-10-23 17:11:27

linux和QT的串口库都是成熟得不能再成熟的东西,不用怀疑。一种可能是线程,如果软件用了QT的线程来包装收发程序的话。以前遇到20几小时出一次通信错,逻辑上看不出一点问题,把线程去掉就没了,这个没法深究。硬件也有可能GPIO端口软损坏,保护了,如果多电平环境是可能出现的,不过没用过这个CPU,不好判断;外面加一级缓冲,测几十个小时就可以判定。

易亭在深圳 发表于 2020-10-23 17:18:18

redworlf007 发表于 2020-10-23 10:20
我再想是不是Linux串口驱动的问题,我再用C写个代码,调用Linux上write函数测测看看啥问题,我感觉应该不 ...

上示波器看看电平有没有变化。

易亭在深圳 发表于 2020-10-23 17:20:18

redworlf007 发表于 2020-10-23 10:20
我再想是不是Linux串口驱动的问题,我再用C写个代码,调用Linux上write函数测测看看啥问题,我感觉应该不 ...

我们公司的产品也是用的QT5.6 三个做应用的同事有两个用的QT库另外一个用的LINUX C 接口。都没有问题。检查一下硬件吧。

redworlf007 发表于 2020-10-23 17:27:29

本帖最后由 redworlf007 于 2020-10-23 17:34 编辑

7073640 发表于 2020-10-23 11:04
你不会自己写个C语言,的定时只发送变化数据 外面短路,看是不是正确自发自收,跑几天看看不就知道了 ...

以前这样测过一周,没有测出问题,后面跟随新塘更新了内核,还是没解决这个问题。

redworlf007 发表于 2020-10-23 17:28:26

chunxx 发表于 2020-10-23 17:11
linux和QT的串口库都是成熟得不能再成熟的东西,不用怀疑。一种可能是线程,如果软件用了QT的线程来包装收 ...

问题在于,把应用程序kill掉,再手动打开就好了。

redworlf007 发表于 2020-10-23 17:30:41

易亭在深圳 发表于 2020-10-23 17:20
我们公司的产品也是用的QT5.6 三个做应用的同事有两个用的QT库另外一个用的LINUX C 接口。都没有问题。检 ...

串口是cpu原生的,我在cpu的io口上挂了led+电阻上拉到3.3v,只要有数据,Led会闪,不闪,就是没数据,kill掉应用程序,再手动打开应用程序,故障恢复,如果是硬件问题,应该这么搞恢复不了。

易亭在深圳 发表于 2020-10-23 17:33:08

redworlf007 发表于 2020-10-23 17:30
串口是cpu原生的,我在cpu的io口上挂了led+电阻上拉到3.3v,只要有数据,Led会闪,不闪,就是没数据,kil ...

就写一个C程序接着老化测试直到出现这个问题为止。。。然后你才能好判断是QT的问题。

redworlf007 发表于 2020-10-23 17:35:45

易亭在深圳 发表于 2020-10-23 17:33
就写一个C程序接着老化测试直到出现这个问题为止。。。然后你才能好判断是QT的问题。 ...

行,我再写一个程序,继续测试看看。

redworlf007 发表于 2020-10-23 17:44:51

chunxx 发表于 2020-10-23 17:11
linux和QT的串口库都是成熟得不能再成熟的东西,不用怀疑。一种可能是线程,如果软件用了QT的线程来包装收 ...

确实是用了qt的线程,线程里面再收发包。

易亭在深圳 发表于 2020-10-23 17:51:27

redworlf007 发表于 2020-10-23 17:35
行,我再写一个程序,继续测试看看。

然后你再写一个QT串口测试程序包括线程延时QEventLoop eventLoop;   QThread::sleep(1);还有啥定时器的全部弄一个。多找几个板子测试然后才能最后得出结论。

redworlf007 发表于 2020-10-23 19:15:15

易亭在深圳 发表于 2020-10-23 17:51
然后你再写一个QT串口测试程序包括线程延时QEventLoop eventLoop;   QThread::sleep(1);还有啥定时器的 ...

行,我先把C测的搞好。

kebaojun305 发表于 2020-10-24 09:09:48

redworlf007 发表于 2020-10-23 17:44
确实是用了qt的线程,线程里面再收发包。

绝对是线程没用好线程的发送死了。{:titter:}

redworlf007 发表于 2021-6-9 23:06:04

这个问题解决了,软件用的qt的库操作串口的,定时把串口close再重新open,再没出现过问题。

tianheyun12 发表于 2021-6-10 10:34:38

定时关闭再打开不符合逻辑

初音之恋 发表于 2021-6-10 11:21:02

感觉还是串口驱动或者库使用的问题,驱动有问题write的时候一般会曝异常,以前USB转串口老有这种问题。。。,close和open只是做了资源的释放吧,缓冲区溢出?
页: [1]
查看完整版本: 请教arm linux上qt c艹开发串口程序问题。