将 CMake 与 FreeRTOS 配合使用 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 CMake 与 FreeRTOS 配合使用

重要

此页面指向已弃用的 Amazon FreeRTOS 存储库。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅 Amazon-FreeRTOS Github 存储库迁移指南

您可以使用 CMake 从 FreeRTOS 应用程序源代码生成项目构建文件,也可以使用它来构建和运行源代码。

您还可以使用 IDE,在符合 FreeRTOS 要求的设备上编辑、调试、编译、刷写和运行代码。每个主板特定的入门指南提供了针对特定平台设置 IDE 的指南。如果您希望不使用 IDE 进行处理,则可以使用其他第三方代码编辑和调试工具来开发和调试您的代码,然后使用 CMake 构建和运行应用程序。

以下主板支持 CMake:

  • Espressif ESP32-DevKitC

  • Espressif ESP-WROVER-KIT

  • Infineon XMC4800 IoT 连接工具包

  • Marvell MW320 Amazon IoT 初学者工具包

  • Marvell MW322 Amazon IoT 初学者工具包

  • Microchip Curiosity PIC32MZEF Bundle

  • Nordic nRF52840 DK 开发工具包

  • STMicroelectronicsSTM32L4 Discovery Kit IoT Node

  • Texas Instruments CC3220SF-LAUNCHXL

  • Microsoft Windows Simulator

有关将 CMake 与 FreeRTOS 结合使用的更多信息,请参阅以下主题。

先决条件

请先确保主机符合以下先决条件,然后再继续:

  • 设备的编译工具链必须支持计算机的操作系统。CMake 支持所有版本的 Windows、macOS 和 Linux

    不支持 Windows Subsystem for Linux (WSL)。在 Windows 计算机上使用本机 CMake。

  • 必须安装了 CMake 3.13 版或更高版本。

    可以从 CMake.org 下载 CMake 的二进制发行版。

    注意

    如果下载 CMake 的二进制发布版本,请确保先将 CMake 可执行文件添加到 PATH 环境变量,然后再从命令行使用 CMake。

    也可以使用程序包管理器下载并安装 CMake,例如,macOS 上的 homebrew,Windows 上的 scoopchocolatey

    注意

    许多 Linux 发布版本的程序包管理器中提供的 CMake 程序包版本已过时。如果发布版本的程序包管理器不提供最新版本的 CMake,那么可以尝试替代程序包管理器,例如 linuxbrewnix

  • 必须具有兼容的本机构建系统。

    CMake 可以针对许多本机构建系统,包括 GNU MakeNinja。Make 和 Ninja 都可以使用程序包管理器安装在 Linux、macOS 和 Windows 上。如果在 Windows 上使用 Make,则可从 Equation 安装独立版本,或安装捆绑了 Make 的 MinGW

    注意

    MinGW 中的 Make 可执行文件名为 mingw32-make.exe,而不是 make.exe

    我们建议使用 Ninja,因为它不仅速度快于 Make,还可提供对所有桌面操作系统的本机支持。

使用第三方代码编辑器和调试工具开发 FreeRTOS 应用程序

您可以使用代码编辑器和调试扩展或者第三方调试工具来为 FreeRTOS 开发应用程序。

例如,如果您使用 Visual Studio Code 作为代码编辑器,则可以安装 Cortex-Debug VS Code 扩展作为调试程序。在您完成应用程序开发时,可以调用 CMake 命令行工具,在 VS Code 中构建您的项目。有关使用 CMake 来构建 FreeRTOS 应用程序的更多信息,请参阅使用 CMake 构建 FreeRTOS

对于调试,您可以向 VS Code 提供类似于下文的调试配置:

"configurations": [ { "name": "Cortex Debug", "cwd": "${workspaceRoot}", "executable": "./build/st/stm32l475_discovery/aws_demos.elf", "request": "launch", "type": "cortex-debug", "servertype": "stutil" } ]

使用 CMake 构建 FreeRTOS

默认情况下,CMake 将主机操作系统作为目标系统。要将其用于交叉编译,CMake 需要一个工具链文件来指定要使用的编译器。在 FreeRTOS 中,我们在 freertos/tools/cmake/toolchains 中提供了默认工具链文件。向 CMake 提供此文件的方式取决于您使用的是 CMake 命令行界面还是 GUI。有关更多详细信息,请按照以下生成构建文件(CMake 命令行工具)说明进行操作。有关在 CMake 中进行交叉编译的更多信息,请参阅正式 CMake Wiki 中的交叉编译

构建基于 CMake 的项目
  1. 运行 CMake 为本机构建系统生成构建文件,如 Make 或 Ninja。

    可以使用 CMake 命令行工具CMake GUI 为本机构建系统生成构建文件。

    有关生成 FreeRTOS 构建文件的信息,请参阅生成构建文件(CMake 命令行工具)生成构建文件 (CMake GUI)

  2. 调用本机构建系统,将项目制作为可执行文件。

    有关如何创建 FreeRTOS 构建文件的信息,请参阅从生成的构建文件构建 FreeRTOS

生成构建文件(CMake 命令行工具)

您可以使用 CMake 命令行工具 (cmake) 来为 FreeRTOS 生成构建文件。要生成构建文件,您需要指定目标主板、编译器以及源代码和构建目录的位置。

您可以对 cmake 使用以下选项:

  • -DVENDOR – 指定目标主板。

  • -DCOMPILER – 指定编译器。

  • -S – 指定源代码的位置。

  • -B –指定生成的构建文件的位置。

注意

编译器必须包含在系统的 PATH 变量中,或者必须指定编译器的位置。

例如,如果供应商是 Texas Instruments,主板是 CC3220 Launchpad,编译器是 GCC for ARM,那么可以发出以下命令,将源文件从当前目录构建到名为 build-directory 的目录:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build-directory
注意

如果使用的是 Windows,则必须指定本机构建系统,因为 CMake 默认使用 Visual Studio。例如:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build-directory -G Ninja

或者:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build-directory -G "MinGW Makefiles"

正则表达式 ${VENDOR}.*${BOARD}.* 用于搜索匹配的主板,因此对于 VENDORBOARD 选项,不必使用完整的供应商和主板名称。在只有单个名称匹配的情况下,部分名称也是可行的。例如,以下命令可从同一源文件生成相同的构建文件:

cmake -DVENDOR=ti -DCOMPILER=arm-ti -S . -B build-directory
cmake -DBOARD=cc3220 -DCOMPILER=arm-ti -S . -B build-directory
cmake -DVENDOR=t -DBOARD=cc -DCOMPILER=arm-ti -S . -B build-directory

如果要使用不在默认目录 cmake/toolchains 中的工具链文件,则可使用 CMAKE_TOOLCHAIN_FILE 选项。例如:

cmake -DBOARD=cc3220 -DCMAKE_TOOLCHAIN_FILE='/path/to/toolchain_file.cmake' -S . -B build-directory

如果工具链文件未使用编译器的绝对路径,并且编译器未添加到 PATH 环境变量中,那么 CMake 可能无法找到编译器。要确保 CMake 找到工具链文件,可以使用 AFR_TOOLCHAIN_PATH 选项。此选项将搜索指定的工具链目录路径以及 bin 下的工具链子文件夹。例如:

cmake -DBOARD=cc3220 -DCMAKE_TOOLCHAIN_FILE='/path/to/toolchain_file.cmake' -DAFR_TOOLCHAIN_PATH='/path/to/toolchain/' -S . -B build-directory

要启用调试,可将 CMAKE_BUILD_TYPE 设置为 debug。启用此选项后,CMake 将调试标志添加到编译选项,并构建带调试符号的 FreeRTOS。

# Build with debug symbols cmake -DBOARD=cc3220 -DCOMPILER=arm-ti -DCMAKE_BUILD_TYPE=debug -S . -B build-directory

也可以将 CMAKE_BUILD_TYPE 设置为 release,将优化标志添加到编译选项。

生成构建文件 (CMake GUI)

您可以使用 CMake GUI 生成 FreeRTOS 构建文件。

使用 CMake GUI 生成构建文件
  1. 从命令行中发出 cmake-gui 以启动 GUI。

  2. 选择 Browse Source (浏览源) 并指定源输入,然后选择 Browse Build (浏览构建) 并指定构建输出。

  3. 选择 Configure (配置),然后在 Specify the build generator for this project (指定此项目的构建生成器) 下,查找并选择要用于构建所生成的构建文件的构建系统。如果您未看到弹出窗口,则可能正在重用现有的构建目录。在这种情况下,请通过在文件菜单中选择删除缓存来删除 CMake 缓存。

  4. 选择 Specify toolchain file for cross-compiling (指定用于交叉编译的工具链文件),然后选择 Next (下一步)

  5. 选择工具链文件(例如,freertos/tools/cmake/toolchains/arm-ti.cmake),然后选择 Finish (完成)

    FreeRTOS 的默认配置为模板主板,该主板不提供任何可移植层目标。结果,将显示一个包含消息 的窗口。

    注意

    如果您看到以下错误:

    CMake Error at tools/cmake/toolchains/find_compiler.cmake:23 (message): Compiler not found, you can specify search path with AFR_TOOLCHAIN_PATH.

    这意味着编译器不在您的 PATH 环境变量中。您可以在 GUI 中设置 AFR_TOOLCHAIN_PATH 变量,向 CMake 提供编译器的安装位置。如果您未看到 AFR_TOOLCHAIN_PATH 变量,请选择 Add Entry (添加条目)。在弹出窗口中,在 Name (名称) 下,键入 AFR_TOOLCHAIN_PATH。在 Compiler Path (编译器路径) 下,键入编译器的路径,例如 C:/toolchains/arm-none-eabi-gcc

  6. GUI 现在应如下所示:

    选择 AFR_BOARD,选择主板,然后选择 Configure (配置)

  7. 选择 Generate (生成)。CMake 生成构建系统文件(例如,makefile 或 ninja 文件),这些文件位于第一步指定的构建目录中。按照下一节中的说明生成二进制映像。

从生成的构建文件构建 FreeRTOS

使用本机构建系统构建

可以使用本机构建系统构建 FreeRTOS,方法是从输出二进制目录调用构建系统命令。

例如,如果构建文件输出目录为 <build_dir>,并且您使用 Make 作为本机构建系统,则可运行以下命令:

cd <build_dir> make -j4

使用 CMake 构建

也可以使用 CMake 命令行工具构建 FreeRTOS。CMake 提供了抽象层用于调用本机构建系统。例如:

cmake --build build_dir

以下是 CMake 命令行工具构建模式的其他一些常见用例:

# Take advantage of CPU cores. cmake --build build_dir --parallel 8
# Build specific targets. cmake --build build_dir --target afr_kernel
# Clean first, then build. cmake --build build_dir --clean-first

有关 CMake 构建模式的更多信息,请参阅 CMake 文档