STM32F407VET6 FreeRTOS移植

首先去FreeRTOS官网下载最新版的FreeRTOS实时操作系统的源码,下载地址:https://www.freertos.org/a00104.html,下载完之后解压,我这里的是FreeRTOS V10.2.1版本的内核,其它版本内核的移植是一样的。

1、FreeRTOS实时操作系统移植步骤如下:

  a、新建一个文件夹,命名:FreeRTOS,然后再FreeRTOS文件夹中创建几个文件夹:Core、Heap、include、Port

  b、解压下载的FreeRTOS内核源码,然后找出我们需要的源码文件,并拷贝到指定的目录下。

    aa、将FreeRTOSv10.2.1_191129\FreeRTOS\Source目录下的 croutine.c、event_groups.c、list.c、queue.c、tasks.c、timers.c 文件拷贝到我们新建的Core文件夹中

    bb、将FreeRTOSv10.2.1_191129\FreeRTOS\Source\include目录下的 croutine.h、event_groups.h、list.h、queue.h、task.h、timers.h 文件拷贝到我们新建的Core文件夹中

    cc、将FreeRTOSv10.2.1_191129\FreeRTOS\Source\portable\MemMang目录下的 heap_1.c、heap_2.c、heap_3.c、heap_4.c、heap_5.c 文件拷贝到我们新建的Heap文件夹中

    dd、将FreeRTOSv10.2.1_191129\FreeRTOS\Source\include目录下的 deprecated_definitions.h、FreeRTOS.h、message_buffer.h、mpu_prototypes.h、mpu_wrappers.h、portable.h、projdefs.h、semphr.h、stack_macros.h、StackMacros.h、stream_buffer.h 文件拷贝到我们新建的include文件夹中

    ee、将FreeRTOSv10.2.1_191129\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK目录下的 FreeRTOSConfig.h 拷贝到我们新建的include文件夹中

    ff、将FreeRTOSv10.2.1_191129\FreeRTOS\Source\portable\RVDS\ARM_CM4F目录下的 port.c、portmacro.h 拷贝到我们新建的port文件夹中

    gg、到这里为止FreeRTOS的内核源码我们拷贝完成了,接下来就是创建工程移植内核了

  c、新建STM32F407VET6工程结构如下:

          

    

  d、添加FreeRTOS内核源码到工程中去然后编译

    

     编译结果报了两个错误,分别是:

      aa、.\Objects\stm32f4.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by stm32f4xx_it.o and port.o).

      bb、.\Objects\stm32f4.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by stm32f4xx_it.o and port.o).

    这两个错误的原因是 SVC_Handler 和 PendSV_Handler 两个中断服务函数被重复定义了。这两个中断是被系统内核占用的,因此我们只需到stm32f4xx_it.c文件中去把对应的函数给注释掉就可以了。最后再编译就正常了。

2、创建一个LED控制任务

  

 下载程序,运行结果符合预期。至此FreeRTOS移植完毕。

    

猜你喜欢

转载自www.cnblogs.com/icode-wzc/p/12911552.html