首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FreeRTOS的移植(STM32F103)

FreeRTOS的移植(STM32F103)

原创
作者头像
HaloMay
发布2025-06-13 14:33:31
发布2025-06-13 14:33:31
45900
代码可运行
举报
运行总次数:0
代码可运行

前言

笔者最近在学习FreeRTOS实时操作系统,准备开一个专题,记录学习内核的一些心得。学习RTOS的第一步就是将操作系统移植适配到我们的硬件平台,FreeRTOS作为一款完全开源且免费的实时操作系统,非常适合新手学习。笔者使用的是STM32F103Z8T6核心板,移植的FreeRTOS的版本为V10.5.1。

准备工作

先运行起来一个STM32的裸机demo工程。

FreeRTOS源码下载 url:https://github.com/FreeRTOS/FreeRTOS-Kernel.git

源码结构

FreeRTOS根目录结构:

Demo文件夹

为了推广FreeRTOS,源码维护者会给市面上主流的芯片厂商评估板适配自己的RTOS,这些经过验证的项目会统一存在这个文件夹内。

FreeRTOS_Readme
FreeRTOS_Readme

官方的readme中也提示使用FreeRTOS的最简单的方式就是使用预先配置好的demo工程,这样就可以正确配置文件的路径和所需的配置。

License文件夹

这是FreeRTOS版权的一些声明,不做过多赘述。

Source文件夹

这是FreeRTOS的源码,是实现操作系统的核心代码,我们主要移植的也就是这些文件。

Test文件夹

这是与测试相关的代码,不做过多赘述。

这里重点说下Source文件夹下的内容:

include:这是FreeRTOS内核的核心宏定义和提供给我们的api声明。

portable:这是与硬件相关的信息。

.c源文件:这就是核心实现的代码。

移植

移植前需要对源码进行一些裁减,portable文件夹下的内容:

这些都是不同平台、编译器的相关内容,我们的开发环境是Keil编译器是RVDS,整个文件夹我们需要保留的是Keil、MemMang(内存管理)、RVDS三个文件夹,其余全部删掉即可。

开始移植

首先在裸机工程下创建两个文件夹分别是:freertos_core、freertos_port

将source文件夹下的*.c全部复制到freertos_core文件夹下。

再将RVDS文件夹下的ARM_CM3(因为STM32F1系列的内核是M3)

下的port.c

MemMang文件夹下的heap4.c复制到freertos_port文件夹下

在keil环境中,将头文件的路径引入,分别是

FreeRTOS/Source/portable/RVDS/ARM_CM3

FreeRTOS/Source/include

最后将Demo文件中的

FreeRTOS/Demo/CORTEX_STM32F103_Keil下的FreeRTOSConfig.h复制到裸机工程的user目录下。

这些工作完成之后,需要进行一些设置:

打开FreeRTOSConfig.h

添加如下定义:

代码语言:txt
复制

#define xPortPendSVHandler    PendSV_Handler
#define vPortSVCHandler       SVC_Handler
#define xPortSysTickHandler   SysTick_Handler
#define INCLUDE_xTaskGetSchedulerState  1

在stm32f10x_it.中注释掉3个函数

代码语言:javascript
代码运行次数:0
运行
复制
PendSV_Handler
代码语言:javascript
代码运行次数:0
运行
复制
SVC_Handler
代码语言:javascript
代码运行次数:0
运行
复制
SysTick_Handler

至此,FreeRTOS配置完毕。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 准备工作
  • 源码结构
    • Demo文件夹
    • License文件夹
    • Source文件夹
    • Test文件夹
  • 移植
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档