如何快速移植FreeRtos到stm32上(小白可入)
最近准备毕设想要用freertos,就在B站上找到了一位up主的视频,也移植成功了,我将视频内容整理了一下,希望能帮到大家
1.准备工作
1.1 准备好stm32工程(格式不一样也没关系)
1.2 准备好FreeRtos源文件
freertos官网网址
点击下载,选择一个版本下载,我选的第二个,(如果官网进不去就从github下载)
1.3 准备好的内容
2.修改stm工程目录
2.1 在stm工程目录中新建freertos目录
2.2 在freertos目录中添加src,inc,port三个目录
src(存放freertos中的源码)inc(存放freertos中的头文件)port(存放与硬件平台相关的文件)
2.3 将freertos中的source源文件移动到stm32工程中
2.4 仿照上述方法,将include文件夹中的.h文件移动到对应的文件夹
2.5 在freertos源代码中portable中有很多目录,我们只需要MemMang和RVDS这两个目录,(我已经将freertos源代码裁剪过了)
2.6 将这两个文件夹中的文件或者子文件拷贝到port文件夹中
注意:RVDS文件夹有各种子文件夹,根据名字可知,这些子文件夹都是对应的芯片内核型号,比如我用的是stm32F103Zet6,内核用的是M3,所以我需要将这个ARM_CM3中的文件拷贝到port中,所以,根据自己的内核芯片型号拷贝对应的文件
2.7 最后一步,将freertosconfig.h添加到freertos根目录下
3 配置工程
3.1 进入stm32工程,创建分组,将文件添加进去
3.2 添加文件目录
3.3 在freertosconfig.h文件中添加以下三个宏定义
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
注意:如果工程后期编译出现.\Objects\Template.axf: Error: L6218E: Undefined symbol xTaskGetCurrentTaskHandle (referred from stream_buffer.o).就添加第四个宏定义
这类报错一般是因为某个函数要运行之前需要打开某个宏定义开关
3.4 在stm32f1xx_it.c中需要注释掉框框里面的中断服务函数(rtos中已经为我们准备了这些函数)
3.5 开始编译运行,没有报错就说明移植完成
4. 开始测试,编写一个led亮灭的功能来测试
我的测试成功,快去试试吧
作者:m0_65558061