糊涂君的freeRTOS闯关之路(2)——FreeRTOS移植到裸机

一、准备工作

1,一个裸机工程(可靠的)

这里我直接用了STM32里最简单的点灯的工程。

2,Freertos的官方文件

(1)怎么选择合适的Demo

第一看架构,是Cotex-M0、M3还是M4,自行鉴别了。官方还为了某些系列做了DEMO,所以自己去找就好。 官方的DMEO在官方提供的资源包的地址FreeRTOSv202112.00FreeRTOSv202112.00FreeRTOSDemo下。

(2)需要选取拷贝的文件

a,文件清单

我已经为各位准备了一份表格清单,里面有我们这次移植所需要拷贝的文件名。

文件类型 文件名 解析 核心文件 tasks.c 核心文件 list.c 核心文件 queue.c 核心文件 timer.c 核心文件 event_groups.c 核心文件 croutine.c 核心文件 stream_buffer.c 头文件 FreeRTOSConfig.h 头文件 FreeRTOS.h 框架文件 port.c 框架文件 portmacro.h 内存管理(5选1) heap_1.c 内存管理(5选1) heap_2.c 内存管理(5选1) heap_3.c 内存管理(5选1) heap_4.c 内存管理(5选1) heap_5.c FreeRTOS包含文件 详细见下图

二、具体操作

步骤1

新建一个文件夹——freeRTOS用来存放freeRTOS所用的文件

步骤2

在freeRTOS里面新建3个子文件夹——include、source、portable。

步骤3

在提供的官方源码里的FreeRTOSv202112.00FreeRTOSv202112.00FreeRTOSSource地址下,找到如图标记的文件,复制到source文件夹里。

步骤4

在提供的官方源码里的 FreeRTOSv202112.00FreeRTOSv202112.00FreeRTOSSourceinclude地址下,把如图的文件(即全部),复制到include里。

这还没有结束,打开地址FreeRTOSv202112.00FreeRTOSv202112.00FreeRTOSDemo下的DEMO选择合适的工程文件。

我用的是STM32F103ZE芯片,且编译环境为KEIL(MDK5),故而选择此工程打开。 找到FreeRTOSconfig.h,复制到include文件夹。

步骤5

在提供的官方源码里的 FreeRTOSv202112.00FreeRTOSv202112.00FreeRTOSSourceportable地址下,找到如图的三个文件夹——MemMang、RVDS、Keil,复制到portable里。

这里可以不用复制keil文件夹,打开就知道啥也没有,RVDS,可以根据需要只复制一个就可以了,比如我用STM32F103ZE,我就只复制CM3即可,有的伙伴F407的就得复制CM4了。

步骤6

将freeRTOS文件夹拷贝到提前准备好的工程文件里。

步骤7

新建三个分组,分别将文件添加到工程里

步骤8

添加工程编译路径。如果有学习STM32的伙伴,应该难度不大。

步骤9

主函数文件(main.c)添加三个头文件

#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"

步骤10

一些宏需要处理(或者说确保没有问题) 有些小伙伴可能会这样(我是直接用的,还好),可以参考如下

步骤11

分别将一下三个钩子函数的宏设置为0;

#define configUSE_IDLE_HOOK			0
#define configUSE_TICK_HOOK			0
#define configCHECK_FOR_STACK_OVERFLOW    0

位于freeRTOSconfig.h

位于freeRTOS.h

参考宏定义选项

步骤12

在freeRTOSconfig.h中加入如下重定义

#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler PendSV_Handler

并且前往stm32f1xx_it.c,stm32f1xx_it.h中把对SVC_Handler、PendSV_Handler、PendSV_Handler的函数、声明,都注释掉。

三、总结

到此为止,我们的工程已经全部新建完成了。 步骤虽然很多,但是整体分为准备裸机程序、拷贝文件组成FreeRTOS文件夹、keil里添加文件以及路径、修改参数和宏,四大部分。 下一节将开始学习任务以及验证我们的操作系统,是否移植成功。

经验分享 程序员 微信小程序 职场和发展