OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4855|回复: 2

关于嵌入式mqtt的一些疑问,求助资深前辈(文字较多)

[复制链接]

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
发表于 2023-4-7 11:44:07 | 显示全部楼层 |阅读模式
问题是这样的,嵌入式底层在采集完成数据之后会存储在4G模块里面,然后通过服务器的指令将文件上传,有一种情况是在网络状况不好的时候依然需要上传这些数据,这个时候文件上传就会超时,就是这个超时之后设备出现某些异常(比较明确的现象是设备网络不正常了,没有上传,mqtt下发的的指令也没回),首先设备是在正常运行的,至少看门狗在运行,但是推送消息失败,一开始我觉得是因为推送文件超时导致某处的信号量没释放,在一下次获取的时候阻塞了任务,这种情况我不是很确定,因为查阅了所有的信号量都是成对使用的,然后我突然想起一个关键的点,就是mqtt的keepalive配置,这个点配置的是20秒,文件上传超时时间是90秒,我查阅资料:如果服务器在保持活动时间段的1.5倍内没有收到来自客户端的消息,那么它将断开客户端连接,就像客户端发送了断开连接消息一样。keepalive的时间文档上默认是120秒,所以这个过程极有可能造成mqtt断开,但是我不知道这个时间配置成默认的120米秒会有什么意想不到的情况,写这么多,主要是想项大家请教一些经验
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6756

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12983
金钱
12983
注册时间
2012-11-26
在线时间
3787 小时
发表于 2023-4-7 16:24:48 | 显示全部楼层
那要看MQTT的服务器是怎么配置的,是多久被踢下线。如果是被踢下线,可以从服务器修改这个时间,或者多次失败之后,客户端重新连接服务器
学无止境
回复 支持 反对

使用道具 举报

75

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2021-2-5
在线时间
135 小时
 楼主| 发表于 2023-4-10 10:55:34 | 显示全部楼层
通过反复的现场还原测试,发现是因为信号量阻塞的导致的,在文件上传失败之后,信号量被阻塞(推送消息的函数会用到这个信号量),与mqtt的交互超过了20s,断开mqtt连接,推送是用到的软件定时器,此时软件定时器任务被阻塞,但是另外一个任务里面会喂狗,所有设备不会重启,相当于死机状态,现在这个信号量释放直接相关的RT_thread  AT组件还需要学习才能尝试找出这个信号量阻塞根本原因
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 14:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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