微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > MQTT_client断开和重连的问题,求解答。急!

MQTT_client断开和重连的问题,求解答。急!

时间:10-02 整理:3721RD 点击:

用了MQTT的例程,上电正常运行,按键触发Publish Topic后想断开连接,调用函数lRetVal = sl_ExtLib_MqttClientDisconnect(user_con_conf->clt_ctx);发现卡死在这个函数,没有返回值。之后测试发现,只有超时调用回调函数static void sl_MqttDisconnect(void *app_hndl)之后,再运行这个sl_ExtLib_MqttClientDisconnect(user_con_conf->clt_ctx);函数才不会卡死

请问:是我调用方式不对,还是确实存在这个问题。若是我调用方式不对,那该如何自己断开连接,然后切换网络重连。纠结了好几天了,之前发帖有网友建议重启芯片,但是目前这个方式对我来说不可行。希望大家给个建议,指导下。

可以设置个复位函数吗?比如看门狗复位。或者就别开来正中错误的方法了,你已经知道了正确发方式,如果非在原来的基础上做,设置个超时复位最好不过了

应该有液晶显示的部分,所以复位不太合适。暂时就不考虑了。

然后没有发现正确的方式,只是发现超时之后能调用disconnet函数不卡死而已,超时重连还是有问题,按例程里那个超时重新连上网之后跑会卡死在sl_ExtLib_MqttClientConnect函数上面。。。

第二次发这个MQTT的帖了,结果还是只有你回复我,很感谢。

1. 能不能把main.c里面的结构体改成下面的,这是把30改成了300。有时候因为网络的关系所以不稳定。

/* library configuration */

SlMqttClientLibCfg_t Mqtt_Client={

    1882,

    TASK_PRIORITY,

    300,

    true,

    (long(*)(const char *, ...))UART_PRINT

};

Let’s increase the timeout from 30 to 300 in case network stability issue .

2. 还有就是函数tcp_recv在 cc31xx_sl_net.c里面,有DEBUG的选项,能否把这个打开之后给我看一下相应的LOG。

我每次调用smartconfig成功后,我又重启网络了(调用sl_stop和sl_start),所以一直不成功,但是不太明白,重启网络后,我重新建立连接为什么不行?

你重启网络后世WIFI连不上了吗?还是MQTT连不上了?

WIFI连上了,有打印信息,然后MQTT连不上,goto connect_to_broker后,程序跑到sl_ExtLib_MqttClientConnect函数就卡住了。

那建议你把MQTT专门做个task, 每次要重启WIFI的时候,就先把这个task干掉,然后WIFI连上之后再启动。

我也遇到了同样的问题

而且我发现,不仅仅是主动调用sl_ExtLib_MqttClientDisconnect()会出现卡住不返回的情况,

有时因为网络原因导致MQTT连接断开时会出现一样的情况。

举例我的应用场景,我有一个比较大的数据包,我将其拆分为很多段不停地调用Mqtt_Client_Public()发出,在该过程中因为网络原因导致MQTT连接断开,这种状态下Mqtt_Client_Public()调用同样出现了卡住不返回的情况

请问LZ和TI的兄弟,这个问题目前有什么解决思路吗?

卡死在函数里面,感觉无解啊,加个看门狗复位看看。我数据间隔比较久,还没遇到pub数据卡死的情况。但长时间运行MQTT还是有问题,有时候都到mqtt断开的回调函数,我重新连MQTT还会出现连接失败的情况。尴尬。

谢谢,目前来看也只有这个办法了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top