【FreeRTOS学习】第9章 移植FreeRTOS到STM32

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最简源码

  1. 在工程目录中新建FreeRTOS文件夹,新建文件夹FreeRTOS/src(用于存放源码),新建文件夹FreeRTOS/prot(用于存放硬件接口相关)

  2. 将FreeRTOSv9.0.0/FreeRTOS/Source中的.c文件复制到/FreeRTOS/src

  3. 将FreeRTOSv9.0.0/FreeRTOS/Source/portable/RVDS复制到/FreeRTOS/prot

  4. 将FreeRTOSv9.0.0/FreeRTOS/Source/portable/MemMang(内存管理相关)复制到/FreeRTOS/prot

  5. 将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

  1. 打开移植源码工程

  2. 创建分组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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值