基于
野火®\]《FreeRTOS%20内核实现与应用开发实战---基于STM32》
正点原子《STM32F429+FreeRTOS开发手册_V1.2》
## 准备
基础工程,例如点灯
FreeRTOS 系统源码
## FreeRTOS 移植
上一章节已经说明了Free RTOS的源码文件在移植时所需要的,FreeRTOS 为我们提供了cortex-m0、m3、m4 和 m7 等内核的单片机的接口文件,只要是使用了这些内核的 mcu 都可以使用里面的接口文件。通常网络上出现的叫"移植某某某RTOS 到某某某 MCU"的教程,其实准确来说,不能够叫移植,应该叫使用官方的移植,因为这些跟硬件相关的接口文件,RTOS 官方都已经写好了,我们只是使用而已。我们本章讲的移植也是使用 FreeRTOS 官方的移植,关于这些底层的移植文件之后再说。
上一章节已经提过移植所需要的文件,只需要留下我们需要的就行

portable 文件夹中只需要留下keil、MemMang 和 RVDS这三个文件夹。

### 向工程中添加相应文件
#### 1.复制添加 FreeRTOS 源码
在keil文件中编译文件之前,我们需要有这些文件,所以需要从官网下载的源码中复制这些文件到我们作为例子的工程文件夹下。
在基础工程中新建一个名为 FreeRTOS 的文件夹

1.在"FreeRTOSv9.0.0\\FreeRTOS\\Source"目录下找到所有的'.c 文件',将它们拷贝到我们新建的 src 文件夹中。

2.打开 FreeRTOS V9.0.0 源码,在"FreeRTOSv9.0.0\\FreeRTOS\\Source\\portable"目录下找到"MemMang"文件夹与"RVDS"文件夹,将它们拷贝到我们新建的port 文件夹中

3.在"FreeRTOSv9.0.0\\ FreeRTOS\\Source"目录下找到"include"文件夹,这是头文件,包含了FreeRTOS提供的API函数。现在我们的FreeRTOS文件夹下有这么三个文件夹了。

#### 2.在keil工程中添加文件
在上一步我们只是将 FreeRTOS 的源码放到了本地工程目录下,源码复制到我们工程之后,还需要再keil中添加才能使用

打开基础工程,新建分组 FreeRTOS_CORE 和 FreeRTOS_PORTABLE,然后向这两个分组中添加文件。

`FreeRTOS_CORE`:文件来自FreeRTOS 的源码中的`.c文件`
`FreeRTOS_PORTABLE`:该文件夹下有 `port.c `和 `heap_4.c`两个文件。
`port.c` 是 RVDS 文件夹下的 ARM_CM4F 中的文件,因为 STM32F429 是 Cortex-M4 内核并且带有 FPU,因此要选择 ARM_CM4F 中的 port.c 文件。也就是说,需要根据不同的MCU选择不同的硬件接口文件。
`heap_4.c` 是 MemMang 文件夹中跟内存管理相关的文件,MemMang 文件夹中共有 5 个 c 文件:heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c,使用任意一个都可以。这里我们选择heap_4.c
#### 3.添加相应的头文件路径
添加完 FreeRTOS 源码中的 C 文件以后还要添加 FreeRTOS 源码的头文件路径,头文件路径。

#### 4.解决编译时的一些问题
1.编译时发现无法打开"FreeRTOSConfig.h"这个文件
可以在Free RTOS对stm32F407移植的Demo中找到,文件夹是CORTEX_M4F_STM32F407ZG-SK,复制到工程中去,路径随意,我为了方便放到了 FreeRTOS 源码中的 include 文件夹下。

`FreeRTOSConfig.h `是 FreeRTOS 的配置文件,一般的操作系统都有裁剪、配置功能,而这些裁剪及配置都是通过一个文件来完成的,基本都是通过宏定义来完成对系统的配置和裁剪的.
移植FATFS文件系统的时候也有类似的配置文件。
2.再编译一次,发现SystemCoreClock 未定义错误。这是因为在 FreeRTOSConfig.h 中使用到了SystemCoreClock 来标记 MCU 的频率。而这里的定义是有条件的。

但是这边是条件预编译,条件是
```c
#ifdef __ICCARM__
#include