3.3 移植port文件夹
打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0\FreeRTOS\Source\portable”目录下找到“ MemMang”文件夹与“ RVDS”文件夹,将它们拷贝到我们新建的port 文件夹中,如图所示
3.4 添加include文件夹
打开 FreeRTOS V9.0.0 源码,在“FreeRTOSv9.0.0\ FreeRTOS\Source”目录下找到“include”文件夹,它是我们需要用到 FreeRTOS 的一些头文件,将它直接拷贝到我们新建的 FreeRTOS 文件夹中 如图所示:
3.5 提取FreeRTOSConfig.h文件
3.5.1 拷贝FreeRTOSConfig.h文件
打开 FreeRTOSv9.0.0 源码,在“ FreeRTOSv9.0.0\FreeRTOS\Demo”文件夹下面找到
“ CORTEX_STM32F103_Keil ” 这 个 文 件 夹 , 双 击 打 开 , 在 其 根 目 录 下 找 到 这 个
“FreeRTOSConfig.h”文件,然后拷贝到我们工程的 user 文件夹下即可,等下我们需要对这个文件进行修改。(这里博主也提供了一个修改好的FreeRTOSConfig.h文件,在博主的资源中可以免费下载哦)
可以参考博主的这篇博客 FreeRTOSConfig.h文件讲解
四.将FreeRTOS的内容添加到工程中
4.1 操作指南
首先点击这个分组。
来到这个界面以后就可以添加组,如图所示。
4.2 添加源文件
这里我们添加了FreeRTOS/src 和FreeRTOS/port 对应着我们工程目录下的二个文件夹,再把对应的.c文件加入进去,注意:FreeRTOS/port这里我们选择的是MemMang文件下的heap_4.c 和RVDS文件下的ARM_CM3下的port.c(因为我这个使用的是STM32F103系列的芯片)。
FreeRTOS/src下的.c文件全部添加进去就行。
4.3 添加FreeRTOSConfig.h头文件
添加FreeRTOSConfig.h文件到user目录下(当然你可以适用自己的工程文件,可能每个人项目结构不同)
4.4 指定头文件路径
FreeRTOS 的源码已经添加到开发环境的组文件夹下面,编译的时候需要为这些源文件指定头文件的路径,不然编译会报错。FreeRTOS的源码里面只有FreeRTOS\include 和FreeRTOS\port\RVDS\ARM_CM3这两个文件夹下面有头文件,只需要将这两个头文件的路径在开发环境里面指定即可。同时我们还将 FreeRTOSConfig.h 这个头文件拷贝到了工程根目录下的 user 文件夹下,所以 user 的路径也要加到开发环境里面。流程如下
五. 修改stm32f10x_it.c文件
在stm32f10x_it.h删除这二个中断函数PendSV_Handler 和SVC_Handler。因为在port.c中已经写好了这二个中断函数 。同时在stm32f10x_it.c中添加如下代码 ,并且修改SysTick_Handler中断服务函数。如下图:
extern void xPortSysTickHandler(void); • 1
void SysTick_Handler(void) { #if (INCLUDE_xTaskGetSchedulerState == 1 ) if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) { #endif /* INCLUDE_xTaskGetSchedulerState */ xPortSysTickHandler(); #if (INCLUDE_xTaskGetSchedulerState == 1 ) } #endif /* INCLUDE_xTaskGetSchedulerState */ }