一、准备工作
1).FreeRTOS官网下载最新的FreeRTOS版本
官网地址:https://www.freertos.org/
2).找一个标准库的实例
这里我们使用了正点原子 @ALIENTEK的STM32F407开发板库函数例程模板。
3).在工程中建立“FreeRTOS_Portable"和“FreeRTOS_Core”两个工程组。
4).添加FreeRTOS源码
i).添加reeRTOSv10.4.1\FreeRTOSv10.4.1\FreeRTOS\Source目录的.c文件
ii).添加FreeRTOSv10.4.1\FreeRTOS\Source\portable目录下的keil, MemMang,RVDS三个文件夹
iii).按下图添加如下 “.C”工程文件:
5).添加头文件:
测试移植是否成功
编译提示…\FreeRTOS\include\FreeRTOS.h(57): error: #5: cannot open source input file “FreeRTOSConfig.h”: No such file or directory
解决方法:FreeRTOSv10.4.1\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK下的FreeRTOSConfig.h拷贝到工程中。在编译又将看到如下错误:
打开FreeRTOSConfig.h可以看到这样一段代码
#ifdef __ICCARM__
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
现在需要将其改成如下部分就可以去除这个错误
#if defined (__ICCARM__)||defined(__CC_ARM)||defined(__GNUC__)
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
新的错误出现:
提示三个函数有重复定义,其中SysTick_Handler再FreeRTOS中被重新定义成系统心跳处理中断函数,PendSV_Handler,SVC_Handler也被在FreeRTOS中重新定义用于任务切换,所以需要注释掉stm32F4xxx_it.c中的这三个中断函数
又出现如下错误:
其中是先关HOOK钩子函数未定义错,在FreeRTOSConfig.h中改为如下:
测试移植是否成功
至此移植完成。具体配置后面再进行学习。