FreeRTOS在STM32F405RGT6的移植

1.1FreeRTOS的移植

1.1.1 Keil环境下Cortex-M4F内核基础工程建立

首先第一步需要建立一个STM32F405的工程文件,选择使用的单片机STM32F405RG,如图所示:


接下来将官方的固件库包里的源码文件复制到工程目录文件夹下面。打开官方固件库包,定位到之前准备好的固件库包的目录:

\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver下面,将目录下面的src,inc文件夹复制到刚才建立的 FWLib 文件夹下面。src 存放的是固件库的.c文件,inc 存放的是对应的.h文件。

接下来将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。打开官方固件库包\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm,将文件startup_stm32f40_41xxx.s复制到 CORE 目录下面。然后定位目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Include,将里面的四个头文件:core_cm4.h、core_cm4_simd.h、core_cmFunc.h以及core_cmInstr.h同样复制到 CORE 目录下面。

然后复制工程模板需要的一些其他头文件和源文件到我们工程。首先定位到目录:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include将里面的2个头文件stm32f4xx.h和system_stm32f4xx.h复制USER目录之下。然后进入目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates将目录下面的5个文件main.c,stm32f4xx_conf.h,stm32f4xx_it.c,stm32f4xx_it.h,system_stm32f4xx.c复制到 USER 目录下面。

最后将这些文件添加到工程中,并添加启动文件汇编语言写成的启动文件startup_stm32f40_41xxx.s,基本工程建成,用于移植FreeRTOS操作系统。

建成的工程如图所示:


扫描二维码关注公众号,回复: 2683266 查看本文章

1.1.2 向工程中添加FreeRTOS源码

首先删除源码接口文件中与本处理器不适用的部分,主要在portable文件夹中。第一步是建立FreeRTOS_CORE与Free_RTOS_PROTABLE两个文件夹,分别存放操作系统内核文件与接口文件,这其中port.c是针对Cortex-M4F内核使用的接口文件,由于Cortex-M4F内核支持浮点运算部件FPU,其接口文件并不相同,还有内存管理文件heap,FreeRTOS系统中内置五种内存管理方法,这里选择heap_4.c,获得如下文件树:


接下来添加头文件,之前已经分析过其源码,include文件夹中即是其头文件所在。故将头文件路劲添加进工程即可。此时,头文件路径如下图所示:


接下来编译发现报错,没有FreeRTOSConfig.h头文件,查阅资料发现是配置文件,用于实现FreeRTOS的内核裁剪等功能。这里从官网上找到一个FreeRTOSConfig.h拿出来修改,编译后发现SystemCoreClock未定义,这是最重要的是时钟频率。找到源码中对时钟频率定义部分:


为了编译顺利通过,将宏定义修改成#ifdefined(__ICCARM__)||defined(__CC_ARM)||defined(__GNUC__),这次再进行编译,得到以下三个error:


提示有三个变量重复定义,这是三个中断处理函数,于是在stm32f4xx.it.c里屏蔽掉这三个函数即可。这三个中断处理函数均属于系统内部中断处理。之后再编译,发现又有以下四个error:


这是FreeRTOS中钩子函数未定义导致的结果,这里先在FreeRTOSConfig.h文件中关闭hook函数使用,在FreeRTOSConfig.h搜索HOOK关键词,得到configUSE_MALLOC_FAILED_HOOK,configUSE_IDLE_HOOK,configUSE_TICK_HOOK,configUSE_MALLOC_FAILED_HOOK三个宏定义。根据函数名还有一个configCHECK_FOR_STACK_OVERFLOW需要宏定义裁剪。

再次编译得到0error0warning,操作系统至此移植完成。

 

猜你喜欢

转载自blog.csdn.net/u013721521/article/details/75395755