主题中讨论的其他器件:CC3220SF、
尝试使用最新版本(4.30)的 AWS IoT SDK 插件以及 CC3235的 SimpleLink SDK (5.20)启动 MQTT 客户端会话时遇到硬故障。
下面是我的工作成果...
我有两个不同的 AWS IoT 实例启动并运行... 一个是准系统实例、具有基本的"任何主题都正常"政策、而另一个是我们客户的实例。 我已经能够使用两个 AWS IoT 实例的凭据在 CC3220SF LaunchXL 板以及我们的定制 CC3235SF 目标上运行"subscribe_publish_sample" SDK 示例。 因此、我已验证我正在使用有效的凭据(Starfield 根 CA 证书、设备证书和设备私钥)、并且我已成功地将这些文件合并到烧录到目标的 SLI 映像中。
我还有一个在 CC3235上开发的主应用、演示成功运行的 SDK 示例后、我将 AWS IoT MQTT 示例代码移植到我的应用中。 具体而言,我提取了所有"AWS_IoT_*"源文件和头文件,此外还有:
- jsmn.c
- jsmn.h
- network_interface.h
- network_platform.h
- network_sl.c
- timer_interface.h
- timer_platform.h
- 定时器.c
我对该库所做的唯一重大修改是重写 aws_iot_log.h、以使用我的串行记录工具、而不是 TI Display 驱动程序。
我可以成功呼叫 aws_iot_mqtt_init()。 但是,当我呼叫时 aws_iot_mqtt_connect(),系统会挂起。 具体而言、系统从 faultISR()某个未知点进入、while(1)并始终保持在循环中。 以下是最终导致硬故障的调用树:
- (我的
MqttConnect()C++方法) aws_iot_mqtt_connect()_aws_iot_mqtt_internal_connect()pClient->networkStack.connect()iot_tls_connect()SlNetSock_startSec()(首次调用绑定 TLS 上下文)netIf->ifConf->sockstartSec()(指向SlNetIfWifi_sockstartSec())
我可以单步执行sockstartSec()函数指针调用,但一旦我尝试单步执行该函数,调试器就不会再次中断,直到我暂停它,系统现在处于faultISR()中。 此外、如果我尝试在调试器中重新启动应用程序、它不会运行;必须完全重新加载目标或重启目标方才能恢复任何功能。
以下是系统准备崩溃之前的调试器状态:


我的基本问题是... 我如何确定这里实际上发生了什么错误? 我有一个线程负责所有 MQTT API 调用、我已经提供了大量的8000字节栈。 在此调用之前、系统(FreeRTOS)堆中剩余大量内存(至少32KB)。 在 MQTT 连接发生时没有发生其他重要活动。 我可以很好地运行独立示例、但当我在应用程序中进行完全相同的 API 调用时、它会爆炸。 有什么想法从哪里开始? 谢谢。
戴维·R.










