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.

[参考译文] RTOS/CC3220SF-LAUNCHXL:RTOS/CC3220SF-LAUNCHXL:MQTT 订阅相关查询

Guru**** 2553450 points
Other Parts Discussed in Thread: CC3220SF-LAUNCHXL, CC3220SF, CC3200MOD

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/716817/rtos-cc3220sf-launchxl-rtos-cc3220sf-launchxl-mqtt-subscription-related-query

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件: CC3220SFCC3200MOD

工具/软件:TI-RTOS

尊敬的奥斯汀:

-由于我的线程(I.e、RTOS/CC3220SF-LAUNCHXL:CC3220SF MQTT 订阅相关查询)已锁定、我打开的新线程出现相同问题。

-通过 SDK_2_20_00_10上给出的 MQTT 示例、我们能够在订阅主题上接收4K 字节( MQTTCLIENT_BUF_LEN  为8192)。 MQTTCLIENT_BUF_LEN  和订阅主题上可以接收的数据的最大限制是什么?
-主要问题是最终固件具有多个线程。 在我们的应用程序中、我们运行7个线程。 MQTT 客户端就是其中之一。
-我们不使用静态 MQTT 库。 我们已将所有 MQTT 相关文件添加到项目中。 我们通过更改 MQTTCLIENT_BUF_LEN 进行了多次测试。 在 Max 上、我们能够在订阅主题上接收600字节(这是 指 MQTTCLIENT_BUF_LEN 为4096时)。 通过增加  MQTTCLIENT_BUF_LEN (>4096)、整个应用受到干扰。 (CCMOD 重新启动或某些值损坏或某些任务未运行等。)
-我们想知道单个线程堆栈大小与.cmd 文件上声明的堆栈和堆大小之间的关系。 如果有任何与内存分配有关的可用文档、请您可以共享它们。
    请尽快回复我们。  
此致、
Sampath
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sampath、

    • 在第一个要点中、 MQTTCLIENT_BUF_LEN 似乎已成功设置为8192。  您是否说过、在进行此更改后、您仍会看到对可接收的数据量(即4K 字节)的限制?  或者、这只是您确认有效的值吗?
    • 我不确定为什么这是个问题。  如果内存管理正确、并且没有堆栈溢出或内存溢出、则这不应该是问题。
    • 在第三个项目符号中、您提到、尽管分配了 MQTTCLIENT_BUF_LEN = 4096、但仍可接收的最大字节数为600。  这可能是 MQTT 库的构建方式(未使用更新的值编译)中的问题、也可能是内存管理问题(根据您所描述的行为很可能是此问题)。
    • 有关线程堆栈大小与堆之间的关系、请参阅此 e2e 线程 以了解更多详细信息。

    此外、不确定您是否收到了我的电子邮件通信、以尝试解决您的旧已关闭线程。  请参阅以下内容:

    从共享的 e2e 链接上的最新博文开始、我能够使用 SDK 版本 simplelink_cc32xx_sdk_1_40_01_00中的 MQTT 客户端示例重现 p Sampath 描述的行为。  此问题似乎是由于未正确增加以下行中的缓冲区长度导致的:

    #define MQTCLIENT_BUF_LEN         4096 //1024 /*缓冲器长度*/

    尽管 p Sampath 可能正在更改库中的行、但其更改可能不会影响或包含在最终源代码中。  他需要确保静态库不会在其最终应用中使用、而是重新编译此库。  能否通过在文件 MQTT_CLIENT.c 中创建人工编译错误来执行快速测试、以验证是否包含了他的更改?

    我看到、当此缓冲区长度未配置足够的空间时、客户端断开总是会对我发生。  但是、在调整上述缓冲区长度参数后、该示例按预期工作。  我希望这会有所帮助、如果还有其他后续问题、请告诉我。

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

    尊敬的奥斯汀:

    感谢您的回复。

    1。 在第一个要点中、 MQTTCLIENT_BUF_LEN 似乎已成功设置为8192。  您是否说过、在进行此更改后、您仍会看到对可接收的数据量(即4K 字节)的限制?  或者、这只是您确认有效的值吗?                                                                                                                               

    是的。 我在将 MQTTCLIENT_BUF_LEN 更改为8192后收到了4K 字节的数据、这是我使用 SDK 2.20中提供的 MQTT 客户端示例所做的。 即使我将 MQTCLIENT_BUF_LEN 更改为 超过8192、我也只能接收4K 字节。 因此、我想知道我们在 MQTT 回调函数(i.e、在 MQTT 库本身)中接收到的下标数据是否存在任何限制、如果不是、我在订阅主题上可以接收的最大数据量是多少?

    2.在第三个项目符号中、您提到、尽管为 MQTTCLIENT_BUF_LEN 分配了4096、但仍可接收的最大字节数为600。  这可能是 MQTT 库的构建方式(未使用更新的值编译)中的问题、也可能是内存管理问题(根据您所描述的行为很可能是此问题)。

    在这里、我使用了应用程序所需的所有 MQTT 文件、并对 MQTT 客户端示例进行了相应的更改。 我主要认为问题仅在于内存管理、但是否有任何有关基于线程的应用程序内存管理的示例或文档。

    在我的应用程序中、线程大小声明如下:

    Thread1:12000、Thread2:8192、Thread3:16000、Thread4:4096、Thread5:4096、Thread6:4096和 Thread7:2048

    堆栈大小为20000、堆大小为0xFFF0

    我想知道线程大小、堆栈大小和堆大小之间的关系吗? 以前在 CC3200Mod 中、我们在属性中设置的堆栈和堆大小存在限制、但对于最新的 CC3220SF、我认为没有限制、但我想要使用堆栈和堆大小设置的最大值、以便我们的芯片能够更好地运行 而不会突然重新启动或全局变量损坏等?

    我设置的值正确与否、我是否需要更改任何堆栈大小以解决我的问题。

    如果可能、您可以向我分享一些与存储器管理相关的链接和文档。

    谢谢、此致、

    Sampath

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

    您好、Sampath、

    1. 我能够使用您之前发布的 SDK 运行示例(simplelink_cc32xx_sdk_1_40_01_00)、并发现我能够成功接收到完整的8K 字节。  这需要您提到的更改: MQTTCLIENT_BUF_LEN = 8192。  此外、还需要进行另一项更改、即增加缓冲区的大小、该缓冲区用于存储通过 UART 打印到串行终端的数据。  请确认这不是您只看到4K 字节打印到终端的原因(还应看到消息 "无法重新分配内存")。  关于您关于最大数据的问题--我不知道除了明显的可用内存容量之外还有一个限制。
    2. 我建议查看下一页、其中包含有关 TI-RTOS 内存管理器的部分。