
# 设备侧SDK相关问题
#### IoT Device SDK C启动失败？
C版SDK启动失败一般是openssl、paho库文件编译失败、或者没有使用export LD_LIBRARY_PATH=./lib/加载库文件。可参考[IoT Device SDK（C）使用指南](https://support.huaweicloud.com/sdkreference-iothub/iot_02_0090.html)中的"准备工作"。
#### IoT Device SDK Java启动失败？
IoT Device SDK Java启动失败一般是未安装JDK（需1.8及以上），或者未安装Maven。
 #### Java SDK中有多个demo，该参考哪一个demo？
直连设备建议参考"device_demo"（包含bootstrap设备发放功能）；如果是普通网关，或者是泛协议接入网关对子设备进行管理，请参考"gateway_demo"。
 #### C版 SDK中有多个demo，该参考哪一个demo？
C版SDK中的demo是分不同场景的，直连设备建议参考"device_demo"；如果需要集成bootstrap发放功能，请参考"bootstrap_demo"；如果是普通网关，或者是泛协议接入网关，请参考"gateway_demo"。
#### C版 SDK连接时返回错误码4是什么意思？
返回错误码4是账号名或者密码输入有误。其他连接失败时返回的错误码请参考[MQTTAsyn.h头文件](https://github.com/huaweicloud/huaweicloud-iot-device-sdk-c/tree/master/include/base)中的错误码描述。
#### 如何下载IoT Link Studio?
在[资源获取](https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#section1)页面，设备开发资源中下载IoT lIink Studio。
#### IoT Device SDK 和IoT Device SDK Tiny有什么区别？
相比于IoT Device SDK，Tiny版本更加轻量，适用于内存以及磁盘空间更小的设备，且一般很少挂载子设备，在编译中没有使用动态链接库，代码提供了操作系统抽象层，可适配多种OS，例如FreeRTOS、linux、NovaOS、ucos_ii、OpenHarmony LiteOS-M等；除MQTT(S)还支持LwM2M,CoAP协议，Tiny使用的mbedtls加密，IoT Device SDK C采用的openssl加密。详细请参考[IoT Device SDK介绍](https://support.huaweicloud.com/sdkreference-iothub/iot_02_0178.html)。
#### IoT Device SDK C Tiny相关问题
1. **日志中出现诸如mqtt_imp_init: ###please implement mqtt by yourself####此类问题。**
   首先检查编译架构中对于__attribute__ ((weak))函数的支持性，如果不支持，建议将这些函数全部注释掉；如果出现link_tcpip_imp_init:###please implement this function by yourself####，建议检查是否实现网络层的适配。
   
2. **在使用SDK时发现某些任务执行顺序与任务优先级顺序不符？**
   SDK中默认使用的优先级从大到小依次为0-31，用户可根据不同的操作系统自行调整相应任务的优先级。
   
3. **SDK移植流程主要包括哪些步骤？**
   移植过程主要包括操作系统注册到OSAL层以及TCPIP注册到SAL层，同时可以根据需求进行模块化裁剪，详见[开发指南](https://github.com/LiteOS/LiteOS_Lab/blob/iot-device-sdk-tiny/docs/Light_SDK_Developer_Guide.md)。
   
4. **使用MQTT协议对接华为云时，返回错误码2**
   具体日志如下所示
   图1MQTT链接错误提示   
   ![](https://support.huaweicloud.com/iothub_faq/figure/zh-cn_image_0000001996551329.png "点击放大")
   该问题为网络错误，首先建议用户检查开发板是否已经联网成功，如果网络联通，建议检查所要对接网络的IP地址或域名以及端口号是否正确，如linux环境下，可以ping所要对接的网络地址查看是否ping通。
   
5. **客户在对接华为云时，出现网络断连接后，在恢复网络时设备没有自动重连。**
   图2断链没有重连日志提示   
   ![](https://support.huaweicloud.com/iothub_faq/figure/zh-cn_image_0000001598411897.jpg "点击放大")
   日志中可见PAHO已经退出，设备已经与平台断开连接，主动下线。建议客户修改SDK目录中的network\\mqtt\\paho_mqtt\\port\\paho_mqtt_port.c文件中的函数__loop_entry()中的休眠时间1ms调大至100ms，具体为：osal_task_sleep(100)，查看是否可以自动重连。
   
6. **使用MQTTS对接华为云时，流程卡死在topic订阅阶段，参考日志如下所示。**
   图3流程卡死topic订阅日志提示   
   ![](https://support.huaweicloud.com/iothub_faq/figure/zh-cn_image_0000001960030898.png "点击放大")
   请将iot_config.h文件中的宏CONFIG_PAHO_LOOPTIMEOUT调整为1000。
   
7. **开发板使用MQTT对接华为云成功，但切换到MQTTS时对接失败**
   可能是开发板内存不足导致，建议测试下开发板剩余内存，建议内存尽量大于60K，如在OpenHarmony L0设备中可以调用接口LOS_MemPoolSizeGet(m_aucSysMem0)获取总内存，LOS_MemTotalUsedGet(m_aucSysMem0)获取已使用内存，做差即可获取到剩余内存，如果移植了shell也可以通过free指令获取到当前内存情况。
   
8. **采用MQTT对接华为云的正确日志如下所示，应如何解读？**
   图4MQTT正常建链日志提示   
   ![](https://support.huaweicloud.com/iothub_faq/figure/zh-cn_image_0000001598252157.png "点击放大")
   日志中第3、4行是MQTT协议对接华为云必现日志，若使用MQTTS则会出现第2行日志；如果使用适配sal的tcpip协议则会出现第1行日志；若相应日志没有打印，建议根据文件link_main.c找到对应功能的初始化函数所对应的宏，之后在iotlink_config.h中检查对应的宏是否打开。
   
9. **设备断电之后在IoTDA平台仍然可以看到设备在线？**
   如果设备没有主动断链通知平台下线，则设备下线时间与代码中的MQTT心跳时间lifetime相关，为1.5倍的心跳时间，在MQTT建立连接时，连接参数中对lifetime进行设置即可。
   
10. **目前已经移植了IoT Device SDK Tiny（附代码）的设备清单**
    详见[移植设备清单列表](https://github.com/LiteOS/LiteOS_Lab/blob/iot-device-sdk-tiny/docs/SDK_Demos_List.md)。
    
 
#### IoT Device SDK Java 上报数据报错"Too many publishes in progress"?
该问题一般是并发消息过高导致，可以通过调大MqttConnection.java中的 "MAX_FLIGHT_COUNT" 参数解决。
