请教arm linux上qt c艹开发串口程序问题。
1、nuc980+linux2、软件用的 qt 5.9.8 c艹开发,用qt的串口库
3、应用:每间隔300ms给外设发8个字节的命令,外设应答。
4、运行一两天后,应用程序显示在发命令出去,实际硬件上没有往外发东西,串口引脚上我接了led+电阻上拉到3.3V,没数据灯不闪。
5、kill掉应用程序,再手动启动程序,恢复。
6、现在甩锅给了Linux串口驱动,怎么玩? 要是使用 USB转串口,很容易出现问题,并且不能恢复,需要手动拔插一下才能恢复正常。
要长期稳定地使用串口工作,最好不要用usb转串口的。 echocxp 发表于 2020-10-22 23:24
要是使用 USB转串口,很容易出现问题,并且不能恢复,需要手动拔插一下才能恢复正常。
要长期稳定地使用串 ...
Arm片子上的原生串口。 上代码呀,这样人家想回答都不知道怎么回答。{:titter:} kill掉应用程序,再手动启动程序,恢复。
看来还是你的程序出了问题。 程序问题可能性比较大 xjavr 发表于 2020-10-22 23:28
上代码呀,这样人家想回答都不知道怎么回答。
不是我写的代码,我做的硬件和系统。 应该是qt的串口库有问题,不要用qt的串口库。 搞个第三方串口工具比如cutecom试一下?要是也出现这种情况那这个问题就和应用程序关系不大。 写一个shell脚本,定时echo,看有没有问题。 jenkins 发表于 2020-10-23 08:36
应该是qt的串口库有问题,不要用qt的串口库。
我的意思是直接用Linux的api操作串口,软件说qt的库大量人用,没人说有问题。qt的串口库真的问题多? miaoguoqiang 发表于 2020-10-23 08:56
写一个shell脚本,定时echo,看有没有问题。
准备用c写个测试代码,放进去一直跑 redworlf007 发表于 2020-10-23 09:02
我的意思是直接用Linux的api操作串口,软件说qt的库大量人用,没人说有问题。qt的串口库真的问题多? ...
QT串口库的问题不少的 哈哈,我qt5.6也是嵌入式上跑的,串口通信也是qt自带的,稳定批量出货了,qt这个东西还是非常稳定的,不管是网络还是其它,长时间运行没毛病,代码写的好,从来不会死机。 qt串口通信也得做好心跳,如果长时间没通信,可以尝试关闭串口,再次打开,不能用以前单片机的编程,打开就没问题了,嵌入式linux编程的思维和裸奔有很大的区别 我这边软硬件系统qt都是自己一条龙了,也不存在甩锅给谁,出问题自己维护,方法建议使用我上面的。 三年模拟 发表于 2020-10-23 09:17
qt串口通信也得做好心跳,如果长时间没通信,可以尝试关闭串口,再次打开,不能用以前单片机的编程,打开就 ...
我再想是不是Linux串口驱动的问题,我再用C写个代码,调用Linux上write函数测测看看啥问题,我感觉应该不是Linux串口驱动问题。 先命令行下用 cat /dev/ttyS0 测试一下,看看是不是驱动问题
如果cat 没问题那就是你的程序问题
发的话随便找个能输出东西重定向到/dev/ttyS0 你不会自己写个C语言,的定时只发送变化数据 外面短路,看是不是正确自发自收,跑几天看看不就知道了 linux和QT的串口库都是成熟得不能再成熟的东西,不用怀疑。一种可能是线程,如果软件用了QT的线程来包装收发程序的话。以前遇到20几小时出一次通信错,逻辑上看不出一点问题,把线程去掉就没了,这个没法深究。硬件也有可能GPIO端口软损坏,保护了,如果多电平环境是可能出现的,不过没用过这个CPU,不好判断;外面加一级缓冲,测几十个小时就可以判定。
redworlf007 发表于 2020-10-23 10:20
我再想是不是Linux串口驱动的问题,我再用C写个代码,调用Linux上write函数测测看看啥问题,我感觉应该不 ...
上示波器看看电平有没有变化。 redworlf007 发表于 2020-10-23 10:20
我再想是不是Linux串口驱动的问题,我再用C写个代码,调用Linux上write函数测测看看啥问题,我感觉应该不 ...
我们公司的产品也是用的QT5.6 三个做应用的同事有两个用的QT库另外一个用的LINUX C 接口。都没有问题。检查一下硬件吧。
本帖最后由 redworlf007 于 2020-10-23 17:34 编辑
7073640 发表于 2020-10-23 11:04
你不会自己写个C语言,的定时只发送变化数据 外面短路,看是不是正确自发自收,跑几天看看不就知道了 ...
以前这样测过一周,没有测出问题,后面跟随新塘更新了内核,还是没解决这个问题。 chunxx 发表于 2020-10-23 17:11
linux和QT的串口库都是成熟得不能再成熟的东西,不用怀疑。一种可能是线程,如果软件用了QT的线程来包装收 ...
问题在于,把应用程序kill掉,再手动打开就好了。 易亭在深圳 发表于 2020-10-23 17:20
我们公司的产品也是用的QT5.6 三个做应用的同事有两个用的QT库另外一个用的LINUX C 接口。都没有问题。检 ...
串口是cpu原生的,我在cpu的io口上挂了led+电阻上拉到3.3v,只要有数据,Led会闪,不闪,就是没数据,kill掉应用程序,再手动打开应用程序,故障恢复,如果是硬件问题,应该这么搞恢复不了。 redworlf007 发表于 2020-10-23 17:30
串口是cpu原生的,我在cpu的io口上挂了led+电阻上拉到3.3v,只要有数据,Led会闪,不闪,就是没数据,kil ...
就写一个C程序接着老化测试直到出现这个问题为止。。。然后你才能好判断是QT的问题。 易亭在深圳 发表于 2020-10-23 17:33
就写一个C程序接着老化测试直到出现这个问题为止。。。然后你才能好判断是QT的问题。 ...
行,我再写一个程序,继续测试看看。 chunxx 发表于 2020-10-23 17:11
linux和QT的串口库都是成熟得不能再成熟的东西,不用怀疑。一种可能是线程,如果软件用了QT的线程来包装收 ...
确实是用了qt的线程,线程里面再收发包。 redworlf007 发表于 2020-10-23 17:35
行,我再写一个程序,继续测试看看。
然后你再写一个QT串口测试程序包括线程延时QEventLoop eventLoop; QThread::sleep(1);还有啥定时器的全部弄一个。多找几个板子测试然后才能最后得出结论。 易亭在深圳 发表于 2020-10-23 17:51
然后你再写一个QT串口测试程序包括线程延时QEventLoop eventLoop; QThread::sleep(1);还有啥定时器的 ...
行,我先把C测的搞好。 redworlf007 发表于 2020-10-23 17:44
确实是用了qt的线程,线程里面再收发包。
绝对是线程没用好线程的发送死了。{:titter:} 这个问题解决了,软件用的qt的库操作串口的,定时把串口close再重新open,再没出现过问题。 定时关闭再打开不符合逻辑 感觉还是串口驱动或者库使用的问题,驱动有问题write的时候一般会曝异常,以前USB转串口老有这种问题。。。,close和open只是做了资源的释放吧,缓冲区溢出?
页:
[1]