搭建环境:STM32 在 QEMU 虚拟机上运行 Cortex-M 版 FreeRTOS (基于 Eclipse IDE)

别问我为什么用 Eclipse 这么古老的 IDE。我找不到别的方式能满足在 STM32 在 QEMU 虚拟机上运行 Cortex-M 版 FreeRTOS 这苛刻的要求了。

简介

在 Windows 10/11 系统的PC上搭建环境。

步骤 1 ~ 9:搭建 Eclipse 环境,并在 QEMU 上分别运行 FreeRTOS Demo 和 LED 闪烁 Demo

步骤 10:将 FreeRTOS 移植到 Eclipse 中的项目中


搭建环境

1. 安装 QEMU

下载 QEMU 安装包

推荐版本:v8.1.0-12034-g129566d84e

在终端运行下面的命令来检查安装是否成功:

1
qemu-system-x86_64 --version

添加 QEMU 安装文件夹到环境变量,默认路径为C:\Program Files\qemu


2. 安装 Eclipse

下载 Eclipse 安装包

推荐版本:Eclipse 2020-12 (不推荐使用最新版本)

选择如下图的正确版本:


3. 安装 Eclipse CDT (C/C++ Development Tooling)

下载 Eclipse CDT

推荐版本:CDT 10.1.0 for Eclipse 2020-12


4. 安装 MinGW

下载 MinGW

参考这篇知乎专栏安装 MinGW

添加 MinGW 到环境变量,需要添加的路径为:

  • C:\MinGW\bin
  • C:\MinGW\msys\1.0\bin
  • C:\MinGW\mingw32\bin

在终端运行下面的命令来检查安装是否成功:

1
gcc -v

5. 安装 GNU Arm Embedded Toolchain

下载 GNU Arm Embedded Toolchain

推荐版本:10.3.1-2.2 (不推荐使用最新版本)

添加 bin 文件夹到环境变量,需要添加的路径为:...\arm-none-eabi-gcc-10.3.1-2.2-win32-x64\xpack-arm-none-eabi-gcc-10.3.1-2.2\bin


6. 安装 Cygwin

下载 Cygwin

推荐使用最新版本

参考这篇CSDN 安装 Cygwin

添加 bin 文件夹到环境变量,需要添加的路径为:C:\cygwin64\bin

在终端运行下面的命令来检查安装是否成功:

1
2
3
4
5
cygcheck -c cygwin
gcc --version
g++ --version
gdb --version
make --version

7. 下载 FreeRTOS

下载 FreeRTOS

加载 FreeRTOS demo 到 Eclipse

接下来便可以运行 FreeRTOS demo 了:


8. 下载 QEMU for ARM

下载 QEMU for ARM

推荐版本:2.8.0-12 (不推荐使用最新版本)

添加 bin 文件夹到环境变量,需要添加的路径为:...\xpack-qemu-arm-2.8.0-12-win32-x64\xpack-qemu-arm-2.8.0-12\bin

9. 创建一个 STM32-F407 项目

接下来便可以运行项目:


10. 将 FreeRTOS 移植到 Eclipse 中的项目中

10-1

打开在第7步中下载的 FreeRTOS 文件,可以删除除了FreeRTOS文件夹外的其它文件。

继续打开FreeRTOS文件夹,可以删除除了DemoSource文件夹外的其它文件。

继续打开Demo文件夹,打开CORTEX_STM32F103_GCC_Rowley文件夹,复制出来一份FreeRTOSConfig.h文件,然后删除整个Demo文件夹。

10-2

打开Source\portable文件夹,可以删除除了GCCMemMang文件夹外的其它文件。

继续打开GCC文件夹,由于我们模拟的STM32F103,所以删除除了ARM_CM3文件夹外的其它文件。

打开MemMang文件夹,选择一种内存管理方式,例如我选择的heap_4.c。保存整个FreeRTOS文件夹。

10-3

启动 Eclipse,点击 File > New > Project,选择 C project 然后点 Next:

选择 STM32F1xx C/C++ Project:

使用默认配置,一直点击 Next。使用 GNU ARM 的 bin 目录:

10-4

将 FreeRTOS 文件夹粘贴到项目文件中:

将 FreeRTOSConfig.h 文件粘贴到项目文件中:

10-5

右键项目根目录,选择 Properties,然后按照下图操作:

添加下图中的3个目录:

对项目中的每个文件夹右键,选择 Properties,关闭Exclude resource from build,以解决文件缺失错误:

10-6

main.c中添加如下代码:

1
2
3
4
#include "FreeRTOS.h"
#include "FreeRTOSConfig.h"
#include "task.h"
#include "queue.h"

10-7

打开 Run configurations:

添加如下信息:

1
2
Board name : STM32-P103
Device name : STM32F103RB

在 global 中添加 QEMU 的 bin 目录,然后点击 Apply 和 Apply and close:

成功!