CMake 与 FreeRTOS 一起使用 - FreeRTOS

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

CMake 与 FreeRTOS 一起使用

重要

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

您可以使用 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,请参见CrossCompiling官方 CMake 维基。

生成 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 窗口,其中包含源代码位置和生成二进制文件位置的输入字段,以及浏览源代码、浏览构建目录、搜索、添加或删除条目以及查看分组或高级选项的选项。
  3. 选择 Configure (配置),然后在 Specify the build generator for this project (指定此项目的构建生成器) 下,查找并选择要用于构建所生成的构建文件的构建系统。如果您未看到弹出窗口,则可能正在重用现有的构建目录。在这种情况下,请从 “文件” 菜单中 CMake 选择 “删除缓存” 来删除缓存。

    CMake设置对话框,其中包含用于将项目的生成器指定为 Unix Makefiles 的选项,以及指定用于交叉编译的工具链文件。
  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 用于构建 FreeRTOS 的配置窗口,其中选择了供应商主板,启用了模块并指定了构建路径。

    选择 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 文档