QuecOpen® 快速入门指南

简介

移远通信 FCM242D 和 FGM842D 系列模块支持 QuecOpen® 方案。QuecOpen® 是基于 RTOS 系统的嵌入式开发平台,旨在简化物联网应用的设计与开发。

本手册适用于基于 SDK 构建环境的 QuecOpen® 方案,是 FCM242D 和 FGM842D 系列模块的快速入门指南。内容涵盖 SDK 目录结构、编译环境搭建、应用开发与编译、固件烧录及 Linux 下常见编译错误。

SDK 目录结构

不同版本的 QuecOpen SDK 目录结构可能略有差异,但功能保持一致。下表以 Windows 和 Linux 操作系统为例,展示了典型的 SDK 目录结构:

目录名称 说明
ql_application 存放示例文件及用户应用工程代码
ql_build 存放编译相关脚本文件
ql_components 存放组件,包括第三方组件及移远 API 组件
ql_kernel 存放芯片相关代码及库文件,包括 RTOS 支持(当前仅支持 FreeRTOS)
ql_out 存放编译输出文件,用于烧录,如 .bin.map 文件
ql_tools 存放编译所需工具链

工程编译环境搭建

gcc-arm-none-eabi 是 ARM 裸机系统的 GCC 工具链,为模块的项目编译工具链。SDK 支持在 Linux 和 Windows 操作系统下编译。gcc-arm-none-eabi 工具链、CMake 及 MinGW(仅 Windows 需用)已集成在 SDK 的 ql_tools 目录下,可自动解压使用。推荐 Linux 发行版为 Ubuntu 16.04 及以上,Windows 10 及以上版本。此外需安装 Python 3 及以上版本,并添加至系统环境变量。

项目编译时,仅支持 SDK 集成的 gcc-arm-none-eabi 工具链,不支持系统自带的 gcc-arm-none-eabi 工具链。

若 SDK 中 gcc-arm-none-eabi 工具链自动解压安装失败,可按如下方式手动解压安装:

  1. 打开 Linux 终端,进入 ql_tools/toolchain 目录,执行如下命令解压工具链(如已解压可跳过):

    tar -vxf gcc-arm-none-eabi-5_4-2016q3.tar.bz2
    

    解压工具链

  2. 执行如下命令,打开环境变量配置文件:

    sudo vim ~/.bashrc
    

    打开环境变量配置文件

  3. 在配置文件末尾添加环境变量(请根据实际路径填写,图中路径仅供参考):

    export PATH=$PATH:/home/xxx/ql_tools/toolchain/gcc_arm_none_eabi/gcc-arm-none-eabi-5_4-2016q3/bin
    

    添加环境变量

  4. 保存并关闭配置文件,在终端执行如下命令使配置立即生效,至此编译环境搭建完成:

    source ~/.bashrc
    

    立即生效

应用开发

创建应用目录

  1. 在 QuecOpen SDK 的 ql_application 目录下创建用户文件夹(用于存放源码和头文件),如 user_code 文件夹。

    创建 user_code 文件夹

  2. user_code 文件夹下分别创建 user_incuser_src 文件夹,分别用于存放头文件和源文件。

    创建 user_inc 和 user_src 文件夹

应用示例说明

QuecOpen SDK 在 ql_application/example 目录下提供了应用开发参考示例。

应用入口函数 ql_app_main() 位于 ql_application/ql_app_main.c 文件中。可根据需要在 ql_app_main() 中调用示例程序,用户可参考如下程序逻辑编写自定义代码。

调用示例程序示意

添加用户应用

创建应用线程

  1. 编写 user_code.cuser_code.h 文件,分别存放于 user_code/user_srcuser_code/user_inc 目录。user_code.c 文件编写示例如下:

    user_code.c 文件编写示例

    上图序号说明:

    1. 添加用户自定义头文件
    2. 初始化配置
    3. 任务处理代码
    4. 任务创建函数
  2. ql_app_main() 函数中调用 ql_user_demo_thread_creat(),以创建用户任务。

    创建用户任务

添加编译文件

为保证编译通过,需将源文件和头文件添加至编译脚本,否则编译时无法找到相关文件。操作步骤如下:

  1. 进入 ql_application 目录,打开 configure.cmake 文件。

    打开 configure.cmake 文件

  2. configure.cmake 文件中添加如下代码,创建 user_srcs 源文件列表。

    创建 user_srcs 源文件列表

  3. 打开 SDK 根目录下的 CMakeLists.txt 文件。

    打开 CMakeLists.txt 文件

  4. 找到 list (APPEND include_files 行,添加用户头文件路径;找到 list (APPEND source_files 行,添加用户源文件路径。具体操作可参考下图红色标记部分。

    添加头文件和源文件路径

应用编译

本章以 FCM242D 模块为例,介绍应用编译方法。

编译说明

Linux 系统

打开 Linux 终端,进入 SDK 根目录,执行如下命令编译应用:

./build.sh

Linux 系统编译应用

编译成功后界面如下:

Linux 系统编译成功界面

Windows 系统

打开 Windows 命令行,进入 SDK 根目录,执行如下命令查看编译选项:

build

随后根据实际需求执行相应编译命令。例如,执行如下命令编译程序:

build new FCM242D your_firmware_version release

Windows 系统编译应用

编译成功后界面如下:

Windows 系统编译成功界面

编译结果

编译生成的文件存放于 ql_out 目录。ql_out 文件夹内容如下:

编译结果

ql_out 文件夹内主要文件说明:

  • all_2M.1220.bin:完整生成的程序固件,通过模块串口烧录
  • bootloader.bin:引导程序文件
  • fcm242d.elf:Linux 下生成的可执行目标文件
  • fcm242d.map:程序映射文件
  • fcm242d_uart_2M.1220.bin:实际生成固件(除引导外的完整固件)

清理历史编译文件

每次新编译前,系统会自动清理上次编译生成的文件。

固件烧录

模块支持通过串口使用 BKFIL 工具进行固件烧录(BKFIL 工具及使用方法请联系移远技术支持获取),操作步骤如下:

  1. 打开 BKFIL 工具,在主界面点击 SelectPort,选择主串口进行固件烧录。
  2. 点击 Bin Path 后的 Bin Path 图标 图标,选择 all_2M.1220.bin 文件。
  3. 点击 Download,然后按下模块复位键进行烧录。烧录完成后,若 Status 状态框显示 "done",则表示烧录成功。

BKFIL 工具界面

Linux 下常见编译错误

  1. 错误信息:“arm-none-eabi-gcc: Command not found”

    出现该错误信息,说明 gcc-arm-none-eabi 工具链未添加到环境变量,或工具链缺少必要的依赖库。

    解决方法如下:

    • 确认已正确安装 gcc-arm-none-eabi 工具链,并已将其路径添加到环境变量,详细步骤请参见第3章

    • 如果工具链已安装且路径已添加,但仍然出现该错误,说明系统缺少必要的依赖库。此时请执行以下命令以安装缺失的依赖:

      apt install libc6-i386 lsb-core
      apt-get install lib32z1
      apt-get install lib32stdc++6
      apt-get install libstdc++6
      
  2. 错误信息:“arm-none-eabi-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found”

    出现该错误信息,说明系统未找到 liblto_plugin.so 文件。

    解决方法如下:

    • toolchain/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/ 目录下的 liblto_plugin.so.0.0.0 文件重命名为 liblto_plugin.so

附录术语表

缩写 说明
API 应用程序编程接口
ARM 高级精简指令集计算机
GCC GNU 编译器套件
IoT 物联网
RTOS 实时操作系统
SDK 软件开发工具包