CMake 与 FreeRTOS 一起使用 - FreeRTOS

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

CMake 与 FreeRTOS 一起使用

重要

这是《FreeRTOS 用户指南》的存档版本,可用于 FreeRTOS 版本 202012.00。有关本文档的最新版本,请参阅《FreeRTOS 用户指南》

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

您还可以使用 IDE,在符合 FreeRTOS 要求的设备上编辑、调试、编译、刷写和运行代码。每个主板特定的入门指南提供了针对特定平台设置 IDE 的指南。如果您更喜欢在没有 IDE 的情况下工作,则可以使用其他第三方代码编辑和调试工具来开发和调试代码,然后使用 CMake 来生成和运行应用程序。

以下主板支持 CMake:

  • Espressif-C ESP32 DevKit

  • Espressif ESP-WROVER-KIT

  • 英飞凌 00 XMC48 物联网连接套件

  • Marvell MW32 0 AWS IoT 入门套件

  • Marvell MW322 AWS IoT 入门套件

  • 微芯片好奇号 PIC32 MZEF 捆绑包

  • Nordic n RF5284 0 DK 开发套件

  • STMicroelectronicsSTM32L4 探索套件物联网节点

  • 德州仪器 CC322 0SF-LAUNCHXL

  • Microsoft Windows Simulator

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

先决条件

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

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

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

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

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

    注意

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

    你也可以 CMake 使用软件包管理器下载和安装,比如 macOS 上的 h omebrew,在 Windows 上使用 scoop chocolatey。

    注意

    许多 Linux 发行版的软件包管理器中提供的软件包版本是 out-of-date。 CMake 如果你的发行版的包管理器没有提供最新版本的 CMake,你可以尝试其他包管理器,比如linuxbrewnix

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

    CMake 可以针对许多原生构建系统,包括 GNU Make 或 N inja。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 应用程序的更多信息,请参阅。使用 FreeRTOS 构建 CMake

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

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

使用 FreeRTOS 构建 CMake

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

生成 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 变量中,或者必须指定编译器的位置。

例如,如果供应商是德州仪器,主板是 CC322 0 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 (浏览构建) 并指定构建输出。

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

    CMakeSetup window with options for specifying project generator and compilation settings.
  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 现在应如下所示:

    CMake GUI for Amazon FreeRTOS build configuration with source code and build paths.

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

  7. 选择 “生成”。 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 文档