STM32F4+智能家居编程环境搭建-1.FreeRTOS系统移植

  1. 准备基础工程。要移植FreeRTOS,肯定需要一个基础工程,这里不做过多解释。
  2. FreeRTOS源码获取。链接:https://pan.baidu.com/s/1CGaCbTwltM1JmBSASSv5ng 
    提取码:erds 
  3. 在工程中添加FreeRTOS的文件夹,创建好后将FreeRTOS源码添加到文件夹中,添加完后如图所示:
  4. portable文件夹中只需留下keil、MemMang和RVDS这三个文件,其余都删除,完成后如图所示
  5. 向工程中添加文件,新建分组FreeRTOS_CORE和FreeRTOS_PORTABLE,向分组中添加文件,FreeRTOS_CORE文件在哪里找就不说了。说一下FreeRTOS_PORTABLE中的port.c和heap_4.c,其中port.c是RVDS文件夹下的ARM_CM4F中的文件,因为STM32F407是Cortex-M4内核并且带有MPU,因此要选择ARM_CM4F中的port.c文件。heap_4.c是MemMang文件夹中的,这个文件夹里边有5个文件,heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c,这5个文件是5种不同的内存管理方法,都可以用来作为FreeRTOS的内存管理文件,,这里选择heap_4.c,它的主要特点是不会出现内存碎片,有内存合并算法。最后添加编译路径。如图所示:                                                                                                       
  6. 编译之后会提示你找不到“FreeRTOSConfig.h”这个文件,这个文件可以自己创建,但是不太现实,所以我们可以从官方例程中移植过来,打开文件夹CORTEX_M4F_STM32F407ZG-SK你就会看到“FreeRTOSConfig.h”这个文件,复制到自己的工程中,复制到哪自己决定。                                                                                                                                       
  7. 再次编译,这次错误是SystemCoreClock未定义,这是因为在FreerRTOSConfig.h中使用到了SystemCoreClock来标记MCU的频率。打开FreerRTOSConfig.h文件,将46行预处理命令改成如下所示:
  8. 这里可能出现找不到cmsis_armcc.h、core_cmFunc.h和core_cmInstr.h文件的错误,这时打开keil软件文件位置,找到这三个文件复制到自己的工程core(这是我的)文件下,keil软件文件位置路径如下图:                                     
  9. 再次编译,出现重复定义的错误, 这里屏蔽掉stm32f4xx_it.c中的SVC_Handler()、PendSV_Handler()、SysTick_Handler()三个函数。
  10. 再次编译出现未定义函数的错误,这函数名是钩子函数,这是因为在FreerRTOSConfig.h文件中开启了这些钩子函数,但是没有定义,在FreerRTOSConfig.h文件中将相对应的configUSE_IDLE_HOOK、configUSE_TICK_HOOK、configUSE_MALLOC_FAILED_HOOK、configCHECK_FOR_STACK_OVERFLOW宏定义改为0即可。
  11. 编程成功,移植完成。在主函数随便写一个任务测试,测试程序如下:                                                 

 注:移植步骤仅供参考!

参考手册:STM32F407 FreeRTOS开发手册V1.1.pdf

猜你喜欢

转载自blog.csdn.net/qq_41422043/article/details/83957159