搜索
bottom↓
回复: 33

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

[复制链接]
(24024069)

出0入16汤圆

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

出0入4汤圆

发表于 2020-10-22 23:24:00 | 显示全部楼层
要是使用 USB转串口,很容易出现问题,并且不能恢复,需要手动拔插一下才能恢复正常。
要长期稳定地使用串口工作,最好不要用usb转串口的。
(24021750)

出0入16汤圆

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

Arm片子上的原生串口。
(24021557)

出0入0汤圆

发表于 2020-10-22 23:28:12 | 显示全部楼层
上代码呀,这样人家想回答都不知道怎么回答。
(24021518)

出0入4汤圆

发表于 2020-10-22 23:28:51 | 显示全部楼层
kill掉应用程序,再手动启动程序,恢复。

看来还是你的程序出了问题。
(23990706)

出0入0汤圆

发表于 2020-10-23 08:02:23 来自手机 | 显示全部楼层
程序问题可能性比较大
(23988777)

出0入16汤圆

 楼主| 发表于 2020-10-23 08:34:32 来自手机 | 显示全部楼层
xjavr 发表于 2020-10-22 23:28
上代码呀,这样人家想回答都不知道怎么回答。


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

出0入0汤圆

发表于 2020-10-23 08:36:14 | 显示全部楼层
应该是qt的串口库有问题,不要用qt的串口库。
(23988580)

出0入0汤圆

发表于 2020-10-23 08:37:49 | 显示全部楼层
搞个第三方串口工具比如cutecom试一下?要是也出现这种情况那这个问题就和应用程序关系不大。
(23987443)

出0入0汤圆

发表于 2020-10-23 08:56:46 | 显示全部楼层
写一个shell脚本,定时echo,看有没有问题。
(23987100)

出0入16汤圆

 楼主| 发表于 2020-10-23 09:02:29 来自手机 | 显示全部楼层
jenkins 发表于 2020-10-23 08:36
应该是qt的串口库有问题,不要用qt的串口库。

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

出0入16汤圆

 楼主| 发表于 2020-10-23 09:03:05 来自手机 | 显示全部楼层
miaoguoqiang 发表于 2020-10-23 08:56
写一个shell脚本,定时echo,看有没有问题。

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

出0入0汤圆

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

QT串口库的问题不少的
(23986339)

出0入8汤圆

发表于 2020-10-23 09:15:10 | 显示全部楼层
哈哈,我qt5.6也是嵌入式上跑的,串口通信也是qt自带的,稳定批量出货了,qt这个东西还是非常稳定的,不管是网络还是其它,长时间运行没毛病,代码写的好,从来不会死机。
(23986218)

出0入8汤圆

发表于 2020-10-23 09:17:11 | 显示全部楼层
qt串口通信也得做好心跳,如果长时间没通信,可以尝试关闭串口,再次打开,不能用以前单片机的编程,打开就没问题了,嵌入式linux编程的思维和裸奔有很大的区别
(23986069)

出0入8汤圆

发表于 2020-10-23 09:19:40 | 显示全部楼层
我这边软硬件系统qt都是自己一条龙了,也不存在甩锅给谁,出问题自己维护,方法建议使用我上面的。
(23982444)

出0入16汤圆

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

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

出0入8汤圆

发表于 2020-10-23 10:36:35 来自手机 | 显示全部楼层
先命令行下用 cat /dev/ttyS0 测试一下,看看是不是驱动问题
如果cat 没问题那就是你的程序问题
发的话随便找个能输出东西重定向到/dev/ttyS0
(23979795)

出0入0汤圆

发表于 2020-10-23 11:04:14 | 显示全部楼层
你不会自己写个C语言,的定时只发送变化数据 外面短路,看是不是正确自发自收,跑几天看看不就知道了
(23957762)

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

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

出0入16汤圆

 楼主| 发表于 2020-10-23 17:27:29 | 显示全部楼层
本帖最后由 redworlf007 于 2020-10-23 17:34 编辑
7073640 发表于 2020-10-23 11:04
你不会自己写个C语言,的定时只发送变化数据 外面短路,看是不是正确自发自收,跑几天看看不就知道了 ...


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

出0入16汤圆

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

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

出0入16汤圆

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

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

出0入0汤圆

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

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

出0入16汤圆

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

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

出0入16汤圆

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

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

出0入0汤圆

发表于 2020-10-23 17:51:27 | 显示全部楼层
redworlf007 发表于 2020-10-23 17:35
行,我再写一个程序,继续测试看看。

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

出0入16汤圆

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

行,我先把C测的搞好。
(23900261)

出0入8汤圆

发表于 2020-10-24 09:09:48 | 显示全部楼层
redworlf007 发表于 2020-10-23 17:44
确实是用了qt的线程,线程里面再收发包。

绝对是线程没用好  线程的发送死了。
(4150885)

出0入16汤圆

 楼主| 发表于 2021-6-9 23:06:04 | 显示全部楼层
这个问题解决了,软件用的qt的库操作串口的,定时把串口close再重新open,再没出现过问题。
(4109571)

出0入0汤圆

发表于 2021-6-10 10:34:38 来自手机 | 显示全部楼层
定时关闭再打开不符合逻辑
(4106787)

出0入0汤圆

发表于 2021-6-10 11:21:02 | 显示全部楼层
感觉还是串口驱动或者库使用的问题,驱动有问题write的时候一般会曝异常,以前USB转串口老有这种问题。。。,close和open只是做了资源的释放吧,缓冲区溢出?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-7-28 00:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表