参考:
关于MCU M4内核移植FreeRTOS的笔记 主要参考这位大佬的,照做就行了,用的也是IAR
HC32F460 freeRTOS移植 这位是用Keil的
MCU:华大HC32F460
库版本:hc32f460_ddl_Rev2.2.0
IDE: IAR
FreeRTOS版本:9.0.0
FreeRTOS官网,可以下载各版本源码及查看帮助文档,有简中翻译
按照如下结构建立好文件夹层级
└───FreeRTOS
├───include
└───port
├───MemMang
└───IAR
└───ARM_CM4F
将下载好的FreeRTOS源码解压,进入源码下的Source目录开始移植

将Source文件夹中的.c文件移入前面建好的FreeRTOS文件夹中

将源码include文件夹中所有头文件复制到创建的include文件夹中

将源码MemMang目录下的heap4.c文件复制到创建的port/MemMang文件夹中

将源码Source\portable\IAR目录下的ARM_CM4F文件夹复制到创建的ARM_CM4F文件夹

最终需要将FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK文件夹中的FreeRTOSConfig.h文件复制到创建的include文件夹里
【注:Demo和源码Source是同级目录】

复制完如下

文件结构(readme文件可忽略)
├─FreeRTOS
│ croutine.c
│ event_groups.c
│ list.c
│ queue.c
│ readme.txt
│ tasks.c
│ timers.c
│
├─include
│ croutine.h
│ deprecated_definitions.h
│ event_groups.h
│ FreeRTOS.h
│ FreeRTOSConfig.h
│ list.h
│ mpu_prototypes.h
│ mpu_wrappers.h
│ portable.h
│ projdefs.h
│ queue.h
│ semphr.h
│ StackMacros.h
│ stdint.readme
│ task.h
│ timers.h
│
└─port
├─IAR
│ └─ARM_CM4F
│ port.c
│ portasm.s
│ portmacro.h
│
└─MemMang
heap_4.c
文件移植就到这里,接下来需要打开IAR工程添加文件夹和文件,如下图所示

.h文件需要配置include path进行引入,右键工程打开Options–》C/C++ Compiler–》Preprocessor进行配置

添加创建的FreeRTOS\include目录和FreeRTOS\portable\IAR\ARM_CM4F目录
【注:点击向下箭头可以切换成相对路径】

另外需要在汇编器Assembler的Preprocessor添加头文件FreeRTOSConfig.h的路径FreeRTOS\include

修改配置浮点预算单元

想要编译不报错还需要对代码进行一些更改
注释掉hc32f460_interrupts.c中的SVC_Handler、SysTick_Handler、PendSV_Handler函数【因为原有库里的函数与FreeRTOS内函数重复定义了】


关闭FreeRTOSConfig.h中配置的四个钩子函数configUSE_IDLE_HOOK、configUSE_TICK_HOOK、configCHECK_FOR_STACK_OVERFLOW、configUSE_MALLOC_FAILED_HOOK

完成以上步骤后编译工程通过

暂时结束



















