全部产品
阿里云办公

C-SDK使用(µC/OS)

更新时间:2017-09-04 19:13:09

准备工具

  • KEIL工具 版本是Keil V4.10
  • SecureCRT,用来抓取开发板的uart log,用户可以从SecureCRT官网下载。
  • NL6621 WIFI开发板,可以通过在淘宝购买。
  • USB转RS232串口线,可以通过淘宝购买。

移植说明

  • MQTT数据传输支持通过TCP(明文传输)或TLS(密文传输),如果开发板上面可用的RAM资源不足,可以不添加Mbedtls编译到开发板SDK中。如果开发板自带TLS库,这样也可以不用IoT SDK自带的Mbedtls库,用开发板自带的SSL库实现aliyun_iot_network_ssl.c里面的函数即可。
  • 本文档介绍的是MQTT+TCP的方式和阿里云交互。
  • 本文档只是以NL6621开发板为例,客户可以选择其它支持µC/OS的开发板。
  • 验证通过的OS版本是µC/OS-II

添加SDK MQTT协议源文件到Keil工程

  • 需要添加MQTT协议的源文件路径有
    1. sdk/common/src
    2. sdk/examples/ucos/mqtt
    3. sdk/platform/ucos/src
    4. sdk/src/mqtt/MQTTClient-C/src
    5. sdk/src/mqtt/MQTTClient-C/nettype/tcp
    6. sdk/src/mqtt/MQTTPacket/src
  • 设定Keil工程头文件路径include—file

编译和download

  • 右键工程,选择 build target。
  • 生成的bin文件,用开发板自带的下载工具NuDevTool ver1.11通过uart download。
  • 烧录步骤流程,具体参考开发板文档说明。

注意事项

  • MQTT+TCP这种方式需要的RAM大小为 16K= 4K stack + 12K heap。
  • 因为μC/OS-II每个task的优先级都不能相同,所以需要根据平台来修改下面的两个宏,赋予一个唯一的优先级。
  1. #define IOT_MQTT_TASK_PRIO (OS_TASK_TMR_PRIO + 22)
  2. #define IOT_MQTT_MUTEX_PRIO (OS_TASK_TMR_PRIO + 15)

常见问题

下面出现的问题都是和开发板相关,如果不是用NL6621开发板可以忽略以下错误。

运行出现 SIGRTMEM: Out of heap memory错误。

  • 解决方法:修改文件CortexM3_startup.s,调整下面的两个参数的值。
  1. Stack_Size EQU 0x2000 // stack大小
  2. Heap_Size EQU 0x4000 // heap大小

链接出现错误:

  • ld_error_info
  • 解决方法是: 编译该文件syscall到工程里面

运行遇到下面错误

  • aliyun_iot_platform_network.c:163 aliyun_iot_network_settimeout()| setsockopt error, errno = 109 ret = -1 fd = 1
  • 解决方法是:修改lwipopts.h, 添加下面的两个宏。
  1. #define LWIP_SO_SNDTIMEO 1
  2. #define LWIP_SO_RCVTIMEO 1