freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5

一、准备工作
1).FreeRTOS官网下载最新的FreeRTOS版本
官网地址:https://www.freertos.org/
2).找一个标准库的实例
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第1张图片
这里我们使用了正点原子 @ALIENTEK的STM32F407开发板库函数例程模板。
3).在工程中建立“FreeRTOS_Portable"和“FreeRTOS_Core”两个工程组。
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第2张图片

4).添加FreeRTOS源码
i).添加reeRTOSv10.4.1\FreeRTOSv10.4.1\FreeRTOS\Source目录的.c文件
ii).添加FreeRTOSv10.4.1\FreeRTOS\Source\portable目录下的keil, MemMang,RVDS三个文件夹
iii).按下图添加如下 “.C”工程文件:
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第3张图片
5).添加头文件:
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第4张图片
测试移植是否成功

编译提示…\FreeRTOS\include\FreeRTOS.h(57): error: #5: cannot open source input file “FreeRTOSConfig.h”: No such file or directory
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第5张图片
解决方法:FreeRTOSv10.4.1\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK下的FreeRTOSConfig.h拷贝到工程中。在编译又将看到如下错误:
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第6张图片
打开FreeRTOSConfig.h可以看到这样一段代码

#ifdef __ICCARM__
    #include 
    extern uint32_t SystemCoreClock;
#endif 

现在需要将其改成如下部分就可以去除这个错误

#if defined (__ICCARM__)||defined(__CC_ARM)||defined(__GNUC__)
    #include 
    extern uint32_t SystemCoreClock;
#endif

新的错误出现:
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第7张图片
提示三个函数有重复定义,其中SysTick_Handler再FreeRTOS中被重新定义成系统心跳处理中断函数,PendSV_Handler,SVC_Handler也被在FreeRTOS中重新定义用于任务切换,所以需要注释掉stm32F4xxx_it.c中的这三个中断函数

又出现如下错误:
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第8张图片
 其中是先关HOOK钩子函数未定义错,在FreeRTOSConfig.h中改为如下:
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第9张图片
测试移植是否成功
freeRTOS V10.4.1移植到STM32F407标准库 - 环境Keil5_第10张图片
 至此移植完成。具体配置后面再进行学习。

你可能感兴趣的:(笔记,stm32,freertos,c语言)