+Freertos实时系统移植
1,源文件准备,可以到freertos官网上下载。
1)与FreeRTOS内核有关的文件数量仅为6个,分别是list.c queue.c tasks.c croutine.c timers.c,event_groups.c该文件位于FreeRTOS\Source
2)与内存分配有关的文件共有4个,分别是heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c最新版有5个文件只需选择其中的1个,STM32选择heap_2.c。该文件位于Source\portable\MemMang。
3) 与移植相关的代码包括port.c,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择Keil编译器,平台为ARM_CM4F。该文件位于Source\portable\RVDS\ARM_CM4F。
4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。该文件FreeRTOS\Source\include。
2,在工程中加入Freertos文件。
3,在工程中加入Freertos文件的头文件路径
4,编译,提示错误,没有FreeRTOSConfig.h文件
编写该文件对内核的配置,需要FreeRTOSConfig.h中的相关宏定义。把Source\include下的FreeRTOSConfig_template.h改为FreeRTOSConfig.h就可以了。
5,再编译,提示错误
没有定义这个几个函数。
在main.c文件中添加这个几个函数
然后添加freertos的头文件
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "semphr.h"
6,在编译,还是出错提示
因为在stm32f4xx_it.c中定义了SVC_Handler和PendSV_Handler,把这两个删除就可以。
7,编译,成功。
8,去掉之前工程中的systick的初始化HAL_InitTick和stm32f4xx_it.c中的SysTick_Handler中断处理。
到这里移植工作基本上完成了。可以实现任务函数了。
9,在新版Freertos版本中,不需要定义下面三个宏定义,在port.c中直接实现了vPortSVCHandler、xPortPendSVHandler、xPortSysTickHandler三个中断处理函数。但是他们不是STM32f411的中断入口函数。所以需要把这三个函数的函数名分别改为SVC_Handler、PendSV_Handler、SysTick_Handler。然后再FreeRTOSConfig.h中定义:
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
到这里全部移植工作就完成了。可以直接建立任务了。
我们使用前面工程中的初始化,直接建立任务
vTaskStartScheduler是启动Freertos系统。
编译下载后,看见led闪烁了。说明我们成功移植。