1,源文件准备,可以到freertos官网上下载。 1)与 FreeRTOS内核有关的文件数量仅为6个,分别是list.c queue.c tasks.c croutine.c timers.c,event_groups.c该文件位于FreeRTOSSource2)与内存分配有关的文件共有 4个,分别是heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c最新版有 5个文件只需选择其中的 1个,STM32选择heap_2.c。该文件位于SourceportableMemMang。 3) 与移植相关的代码包括port.c,portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择Keil编译器,平台为ARM_CM4F。该文件位于SourceportableRVDSARM_CM4F。 4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。该文件FreeRTOSSourceinclude。 2,在工程中加入Freertos文件。
3,在工程中加入Freertos文件的头文件路径
4,编译,提示错误,没有FreeRTOSConfig.h文件 编写该文件对内核的配置,需要FreeRTOSConfig.h中的相关宏定义。把Sourceinclude下的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系统。 |