微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > +Freertos实时系统移植

+Freertos实时系统移植

时间:10-02 整理:3721RD 点击:

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闪烁了。说明我们成功移植。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top