This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220S-LAUNCHXL:添加订阅会导致错误

Guru**** 2578945 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/732826/cc3220s-launchxl-adding-a-subscription-results-in-error

器件型号:CC3220S-LAUNCHXL

您好!

我一直在使用 http://www.ti.com/tool/TIDC-01005上的门锁示例、并尝试通过执行以下操作来添加我自己的订阅主题。

网址为 wifi_doorlock_app.h

#define subscription_topic_count 5
#define subscription_TOPIC4 "/CC3220/门锁/%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x/锁测试" 

在 network_if.c 的函数"SetTopicNames "中

sprintf (topic[4]、subscription_TOPIC4、App_CB.lockUID[0]、
APP_CB.lockUID[1]、APP_CB.lockUID[2]、APP_CB.lockUID[3]、
APP_CB.lockUID[4]、APP_CB.lockUID[5]、APP_CB.lockUID[6]、
APP_CB.lockUID[7]、APP_CB.lockUID[8]、APP_CB.lockUID[9]、
APP_CB.lockUID[10]、App_CB.lockUID[11]、App_CB.lockUID[12]、
APP_CB.lockUID[13]、APP_CB.lockUID[14]、APP_CB.lockUID[15]); 

MQTT_CLIENT_TASK_c.c 中的定义

/*订阅主题和 QoS 值 */
char * topic[subscription_topic_count]=
{subscription_TOPIC0、subscription_TOPIC1、\
subscription_topic2、subscription_TOPIC3、subscription_TOPIC4};

unsigned char QOS[subscription_topic_count]=
{MQTT_QOS_2、MQTT_QOS_2、MQTT_QOS_2、MQTT_QOS_2、MQTT_QOS_2}; 

在 MQTT_CLIENT_TASK_c 的函数"MqttClient"- Case MQTT_CLIENT_Connected 中

否则、如果(strncmp (tmpBuff、(const char*) topic[4]、
queueElemRecv.topLen)==0)
{
display_printf (
显示屏、0、0、
"\n\nr [MQTT Thread]测试!!!!!!!!!! ");
} 

但是、我在 TeraTerm 中反复出现以下错误。 如何解决此问题?

CONNACK:

连接成功

[MQTT Thread]订阅错误
sl_socket_ASYNC_EVENT 套接字事件2、 请重新启动
[sock event]-意外事件[20x]
桥接断开

[MQTT Thread]取消订阅主题/Broker/To/cc32xx/doorLock
[MQTT Thread]取消订阅主题/cc3220/doorlock/b851851d23c6b19b098d92ebe13d5e/LockControl
[MQTT Thread]取消订阅主题/cc3220/doorlock/b8520/ b85320/

未订阅主题[bd8520/ bd/ bd8520/ bdoordlewordled/cc8520/未订阅100b/ b/ b/ bd/ bd85d/未订阅门锁[mc8520]取消订阅100b/ b/ b/未订阅100b/未
订阅主题[d/未订阅100b/未订阅 d/未订阅100b/未订阅 d/未订阅100bd/未订阅100b/未订阅100bd/未订阅/未订阅/未订阅/未订阅 (15)无法传输所有排队的数据包
[MQTT Thread] MQTT 客户端句柄已删除
[MQTT Thread] MQTT 客户端库已成功初始化
[sock error]-关闭套接字(6)操作无法传输所有排队的数据包 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jack:

    如果您未添加额外的 LockTest 主题、您是否能够使 MQTT 连接正常工作?
    此外、出现订阅错误时、您会得到什么错误代码?

    此致、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.是的。
    2.我看不到错误代码。 我在上面发布的日志就是我得到的所有日志。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是什么可能导致了此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jack:

    一些更多的调试信息有助于调试此问题。 具体来说、使用 RTOS 对象查看器来检查 RTOS 线程、堆栈和堆的状态会很有用。

    为此、请在调试模式下启动程序。 然后、在中转到 tools->ROV classic 以启动 RTOS 对象查看器。 从这里、您可以通过浏览左下角的窗口来检查 RTOS 的运行状态。  

    打开 ROV 后、在"[MQTT Thread] Subscription Error" print 语句中放置一个断点。 运行程序、直到您遇到该断点。 一旦程序遇到订阅错误、请使用 RTOS 对象查看器检查堆的可用大小以及每个线程的当前/最大栈大小。 您是否看到任何不规则的东西?  

    此致、
    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     、正如 您所说的。 这是否正常?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jack:

    显示的堆状态看起来不错。 如果您检查任务堆栈、它们是否看起来也不错?

    此外,如果将该调用移到 if 语句之外并将 return 分配给临时变量,则可以获得 MQTTClient_subscribe()的错误代码,方法是执行以下操作:
    int ret = MQTTClient_subscribe (...);
    if (ret<0){




    从 MQTTClient_subscribe()获得的返回值是多少?

    此致、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     返回值为-4。 下面是任务堆栈。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jack:

    错误-4对应于 MQTT_PACKE_ERR_FNPARAM。 该错误出现在 MQTT 库中的许多位置、通常在 MQTT 库函数的输入无法进行完整性检查时引发。
    对于您的 MQTT subscribe 函数,我将暂停在 MQTTClient_subscribe ()执行,并双击所有输入参数。 确保没有 NULL 主题、其余的输入参数是合理的。

    此致、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看到"App_CB.mqttClientHandle"未知。 如何解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jack:

    如果您从 elock 示例中删除了您的附加主题并在调试模式下运行到该函数调用、您是否仍然看到 App_CB.mqttClientHandle 作为0x00000001的指针?

    此致、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hi。 对此进行了任何更新?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jack:

    在 mqttclient.c 中(从位于 source/ti/net/MQTT/interface 的 SDK 复制)、将 MQTTCLIENT_MAX_MONTHONG_SUB_TOPIELES从4更改为5。 这应该能解决问题。

    如果您仍然无法连接到 MQTT 代理、或者遇到 elock 演示的任何其他问题、请告诉我。

    此致、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢。 它现在可以工作了。