本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 CMake 与 FreeRTOS 配合使用
重要
此页面指向已弃用的 Amazon FreeRTOS 存储库。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅 亚马逊免费版 RTOS Github 存储库迁移指南。
您可以使用 CMake 从 FreeRTOS 应用程序源代码生成项目构建文件,也可以使用它来构建和运行源代码。
您还可以使用 IDE,在符合 FreeRTOS 要求的设备上编辑、调试、编译、刷写和运行代码。每个主板特定的入门指南提供了针对特定平台设置 IDE 的指南。如果您希望不使用 IDE 进行处理,则可以使用其他第三方代码编辑和调试工具来开发和调试您的代码,然后使用 CMake 构建和运行应用程序。
以下主板支持 CMake:
-
Espressif ESP32-C DevKit
-
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 上的 scoop 或 chocolatey 。 注意
许多 Linux 发行版的软件包管理器中提供的 CMake 软件包版本是 out-of-date。如果发布版本的程序包管理器不提供最新版本的 CMake,那么可以尝试替代程序包管理器,例如
linuxbrew
或nix
。 -
必须具有兼容的本机构建系统。
CMake 可以针对许多本机构建系统,包括 GNU Make
或 Ninja 。Make 和 Ninja 都可以使用程序包管理器安装在 Linux、macOS 和 Windows 上。如果在 Windows 上使用 Make,则可从 Equation 安装独立版本,或安装捆绑了 Make 的 MinGW 。 注意
MinGW 中的 Make 可执行文件名为
mingw32-make.exe
,而不是make.exe
。我们建议使用 Ninja,因为它不仅速度快于 Make,还可提供对所有桌面操作系统的本机支持。
使用第三方代码编辑器和调试工具开发 FreeRTOS 应用程序
您可以使用代码编辑器和调试扩展或者第三方调试工具来为 FreeRTOS 开发应用程序。
例如,如果您使用 Visual Studio Code
对于调试,您可以向 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 中,我们在
中提供了默认工具链文件。向 CMake 提供此文件的方式取决于您使用的是 CMake 命令行界面还是 GUI。有关更多详细信息,请按照以下生成构建文件(CMake 命令行工具)说明进行操作。有关在 CMake 中交叉编译的更多信息,请参阅 CrossCompilingfreertos
/tools/cmake/toolchains
构建基于 CMake 的项目
-
运行 CMake 为本机构建系统生成构建文件,如 Make 或 Ninja。
可以使用 CMake 命令行工具
或 CMake GUI 为本机构建系统生成构建文件。 有关生成 FreeRTOS 构建文件的信息,请参阅生成构建文件(CMake 命令行工具)和生成构建文件 (CMake GUI)。
-
调用本机构建系统,将项目制作为可执行文件。
有关如何创建 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}.*
用于搜索匹配的主板,因此对于 VENDOR
和 BOARD
选项,不必使用完整的供应商和主板名称。在只有单个名称匹配的情况下,部分名称也是可行的。例如,以下命令可从同一源文件生成相同的构建文件:
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 生成构建文件
-
从命令行中发出
cmake-gui
以启动 GUI。 -
选择 Browse Source (浏览源) 并指定源输入,然后选择 Browse Build (浏览构建) 并指定构建输出。
-
选择 Configure (配置),然后在 Specify the build generator for this project (指定此项目的构建生成器) 下,查找并选择要用于构建所生成的构建文件的构建系统。如果您未看到弹出窗口,则可能正在重用现有的构建目录。在这种情况下,请通过在文件菜单中选择删除缓存来删除 CMake 缓存。
-
选择 Specify toolchain file for cross-compiling (指定用于交叉编译的工具链文件),然后选择 Next (下一步)。
-
选择工具链文件(例如,
),然后选择 Finish (完成)。freertos
/tools/cmake/toolchains/arm-ti.cmakeFreeRTOS 的默认配置为模板主板,该主板不提供任何可移植层目标。结果,将显示一个包含消息 的窗口。
注意
如果您看到以下错误:
CMake Error at
tools/cmake/toolchains/find_compiler.cmake:23
(message): Compiler not found, you can specify search path withAFR_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
。 -
GUI 现在应如下所示:
选择 AFR_BOARD,选择主板,然后选择 Configure (配置)。
-
选择 生成。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 文档