FreeRTOS 搭建开发环境

FreeRTOS 搭建开发环境

本文使用Keil MDK和STM32为例

首先需要下载FreeRTOS的源码:http://www.freertos.org/。当前最新版本为9.0.0,其源码目录如下图 :

Image

FreeRTOS/Demo目录下已经有许多工程可以直接使用,例如FreeRTOS\Demo\CORTEX_STM32F103_Keil就是STM32F103在Keil下的工程。不过这个工程是针对小容量STM32F103的,对于其他型号的STM32芯片,需要自己组织工程。

首先创建一个文件夹用于存放工程文件,命名为“Project”。
FreeRTOS/Source目录下是FreeRTOS的源码,将其中除了portable文件夹以外所有的文件复制到Project文件夹中,这些是平台无关的代码。

Image

FreeRTOS/Source/portable目录下是平台有关的可移植代码。

Image

其中FreeRTOS/Source/protable/MemMang目录下是内存管理的相关代码。

  • heep_1.c只能分配内存而不能释放内存。
  • heep_2.c可以分配和释放内存但不能合并空闲内存块。
  • heep_3.c简单的封装了线程安全版的标准C语言malloc和free函数。
  • heep_4.c可以合并相邻的空闲内存块。
  • heep_5.c可以合并相邻的空闲内存块,且可以管理地址不连续的物理内存。

这里选用heep_2.c,将它复制到Project文件夹中。

Image

接下来,由于我们的目标平台是Keil,因此代开FreeRTOS/Source/protable/Keil文件夹看到如下文件。

Image

因此我们打开FreeRTOS/Source/protable/RVDS文件夹,根据芯片型号选择。我的目标芯片STM32F429IGT6Cortex-M4F内核,因此将ARM_CM4F中的port.c复制到Project中,portmacro.h复制到Project/include中。

Image

然后,我们还需要一个FreeRTOSConfig.h,在FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK中复制它到Project/include中。

最后得到Project以及include下的文件:
Image
Image

接下来将这些文件复制到一个Keil的STM32标准外设库工程中,将.c文件加入工程,将include文件夹加入头文件搜索路径。

接下来需要修改部分代码:

FreeRTOS使用了一些中断功能,因此port.c中定义了部分中断函数,STM32标准外设库中的stm32f4xx_it.c中也定义了这些中断函数,因此需要删除stm32f4xx_it.c中的这些函数。它们是SVC_HandlerPendSV_HandlerSysTick_Handler

port.c中使用了变量SystemCoreClock,这个变量定义在标准外设库的system_stm32f4xx.c中,需要在port.c中声明。

FreeRTOS中使用了一些hook函数,这些函数需要我们自己编写(可以写成空的函数),也可以将FreeRTOSConfig.h中的configUSE_IDLE_HOOKconfigUSE_TICK_HOOKconfigUSE_MALLOC_FAILED_HOOKconfigCHECK_FOR_STACK_OVERFLOW设为0从而不使用这些hook函数。

如此一来工程就配置完成了。

作者: PlanC
2024-12-18 20:03:48+08:00