参考:
关于MCU M4内核移植FreeRTOS的笔记 主要参考这位大佬的,照做就行了,用的也是IAR
HC32F460 freeRTOS移植 这位是用Keil的
MCU:华大HC32F460
库版本:hc32f460_ddl_Rev2.2.0
IDE: IAR
FreeRTOS版本:9.0.0
FreeRTOS官网,可以下载各版本源码及查看帮助文档,有简中翻译
移植文件
按照如下结构在想要移植的原IAR工程文件夹创建好文件夹层级
└───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
,修改宏定义为0即可
完成以上步骤后编译工程通过
暂时结束