1. FreeRTOS文件夹内容简介
Source文件夹:最最最重要的文件夹,没有之一
-
portblle文件夹:与编译器相关的文件,keil编译环境,使用RVDS文件夹
-
MemMang文件夹:存放的是跟内存管理相关的文件
Demo文件夹:各种开发平台的完整Demo,开发者可以方便的以此搭建出自己的项目,甚至直接使用。
License文件夹:这里面只有一个许可文件“license.txt”,用FreeRTOS做产品的话就需要看看这个文件。
FreeRTOS-Plus文件夹:包含的是第三方的产品。
2. 移植FreeRTOS
2.1 基本步骤
1.提取FreeRTOS最简源码
2.拷贝FreeRTOSConfig.h文件到user文件夹
3.添加FreeRTOS源码到工程分组,创建FreeRTOS/src和FreeRTOS/port
4.指定FreeRTOS头文件的路径
5.修改FreeRTOSConfig.h
2.2 FreeRTOSConfig.h文件讲解
FreeRTOSConfig.h是直接从demo文件夹下面拷贝过来的,该头文件对裁剪整个FreeRTOS所需的功能的宏均做了定义,有些宏定义被使能,有些宏定义被失能,一开始我们只需要配置最简单的功能即可。
要想随心所欲的配置FreeRTOS的功能,我们必须对这些宏定义的功能有所掌握,下面我们先简单的介绍下这些宏定义的含义,然后再对这些宏定义进行修改。
2.3 修改FreeRTOSConfig.h
修改与对应开发板的头文件 ,如果是使用STM32F1的开发板,则包含F1的头文件#include “stm32f10x.h”。
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
2.4 修改stm32f10x_it.c
在stm32f10x_it.c文件中实现SysTick_Handler()函数。
在stm32f10x_it.c中注释掉PendSV_Handler()与SVC_Handler()这两个函数
2.5 编译
将原来裸机工程里面main.c的文件内容全部删除。
#include "FreeRTOS.h"
#include "task.h"
int main(void)
{
/* 暂时没有在main任务里面创建任务应用任务 */
}
3. 移植FreeRTOS详细步骤
在裸机工程下移植(以STM32工程为例)
3.1 提取FreeRTOS最简源码
-
在工程目录中新建FreeRTOS文件夹,新建文件夹FreeRTOS/src(用于存放源码),新建文件夹FreeRTOS/prot(用于存放硬件接口相关)
-
将FreeRTOSv9.0.0/FreeRTOS/Source中的.c文件复制到/FreeRTOS/src
-
将FreeRTOSv9.0.0/FreeRTOS/Source/portable/RVDS复制到/FreeRTOS/prot
-
将FreeRTOSv9.0.0/FreeRTOS/Source/portable/MemMang(内存管理相关)复制到/FreeRTOS/prot
-
将FreeRTOSv9.0.0/FreeRTOS/Source/include复制到/FreeRTOS
3.2 拷贝FreeRTOSConfig.h文件到user文件夹
例如j将FreeRTOSv9.0.0/FreeRTOS/Demo/CORTEX_STM32F103_Keil/FreeRTOSConfig.h复制到/User
3.3 添加FreeRTOS源码到工程分组,创建FreeRTOS/src和FreeRTOS/port
-
打开移植源码工程
-
创建分组FreeRTOS/src和FreeRTOS/port,然后添加刚刚复制的需要用到的文件进去,需要添加的文件如下图所示
3.4 指定FreeRTOS头文件的路径
在魔术棒C/C++中添加头文件路径/FreeRTOS/include、/FreeRTOS/port/RVDS/ARM_CM3
3.5 修改FreeRTOSConfig.h
注意:stm32f10x_it.c和main.c中要包含FreeRTOS.h和task.h