糊涂君的freeRTOS闯关之路(2)——FreeRTOS移植到裸机
一、准备工作
1,一个裸机工程(可靠的)
这里我直接用了STM32里最简单的点灯的工程。
2,Freertos的官方文件
(1)怎么选择合适的Demo
第一看架构,是Cotex-M0、M3还是M4,自行鉴别了。官方还为了某些系列做了DEMO,所以自己去找就好。 官方的DMEO在官方提供的资源包的地址FreeRTOSv202112.00FreeRTOSv202112.00FreeRTOSDemo下。
(2)需要选取拷贝的文件
a,文件清单
我已经为各位准备了一份表格清单,里面有我们这次移植所需要拷贝的文件名。
二、具体操作
步骤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里添加文件以及路径、修改参数和宏,四大部分。 下一节将开始学习任务以及验证我们的操作系统,是否移植成功。
