本文介绍IoT_SDK V2.0在高通MDM9206平台上移植用户遇到过的问题原因说明。

编译问题

  • ArmCC不支持C语言中变量定义和逻辑语句混杂,声明段落必须在逻辑段落之前完整结束。
  • ArmCC不支持用花括号{}的方式定义匿名结构体实例作为右值。
  • ArmCC处理枚举类型时,gcc及其变种按照int处理,而armcc有严格的编译时检查,多按unsigned int处理。
  • ArmCC不支持在if、while、for逻辑的判断语句中有变量赋值。
  • 函数内多分支情况,ArmCC对不可达分支处的return语句严格报错导致编译失败。
  • ArmCC不支持返回值被声明为枚举类型的函数,实际上返回值是int等gcc所认为的等价数据类型。
  • 标准库的头文件内容有差异。gcc编译时可以找到的定义如size_t、 typeof等,在armcc上没有。
  • ArmCC不支持GNU风格扩展函数, 如vasnprintf、asprintf。
  • ArmCC不支持GNU风格扩展数据结构,如匿名结构体、结构体匿名成员赋值等。

运行问题

  • 使用标准库函数tolower(),需要对应引用头文件ctype.h,否则运行会出现卡死情况。
  • 使用高通的串口打印函数,不能用%s格式打印0长度的字符串。
  • HTTP Client的代码中,如src/utils/misc/utils_httpc.c,使用了C标准库函数sscanf(), 由于高通的C库问题,这些代码运行到时会卡死。