FreeRTOS移植详解

news2024/11/15 8:37:58

一、前言

本文旨在讲解FreeRTOS在STM32单片机上的移植步骤,对于FreeRTOS在其他单片机上的移植已具有一定的参考意义。相信读者在看完这篇文章后,一定会有所收获!

文末附有相关资料连接,有需要的读者可以自行下载。

二、FreeRTOS源码初探

(一)、FreeRTOS源码的下载获取

FreeRTOS的真身在哪里呢?

可以到FreeRTOS官网下载,这是官网的下载链接:

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

打开以上链接后,按照图示步骤下载FreeRTOS源码

 

 由于以上链接打开的时候较慢,我已经将下载好的源码上传至百度网盘,读者可以直接下载。

链接:https://pan.baidu.com/s/1_eubBSplXnkEzSvNfqbrRg?pwd=zxf1 
提取码:zxf1 
--来自百度网盘超级会员V3的分享

下载后相关文件夹里会出现以下内容:

 

至此我们就得到了FreeRTOS源码!

 (二)、FreeRTOS文件初探

现在我们已经得到了FreeRTOS的源码,下面我们来看一下这个文件夹里的源码文件,初步了解一下这些文件的大致内容。

可以看出 FreeRTOS源码中有两个文件夹,4个HTML格式的网页和一个txt文档,HTML网页和 txt文档知道是什么东西了,重点在于上面那两个文件夹:FreeRTOS和FreeRTOS-Plus,这两个文件火里面的东西就是 FreeRTOS的源码。

注意观察就会知道, FreeRTOS和FreeRTOS-Plus,存在两个版本,怎么还会冒出一个“-Plus”版本?

我们知道苹果从Iphone6 以后分为了两个版本,区别就是 Plus比普通的功能多一点,配置强大一点。现在FreeRTOS也这么分,是不是Plus版本比FreeRTOS功能强一点啊,强大到哪里?是不是源码都不同了呀? 

 下面我们就一起来揭晓这个答案!

1、FreeRTOS文件夹

FreeRTOS文件夹中有三个文件夹,Demo、License和 Source,从名字上就可以很容易的得出他们都是些什么。

(1)、Demo文件夹

相信学习嵌入式的你,会敏锐地发现这个文件夹里包含了多种MCU适用的Demo。 其中就有ST的F1、F4和F7的相关例程,这对于我们学习来说是非常友好的,我们在移植的时候就会参考这些例程,这里我用的STM32F767的芯片,但是是可以用F407的工程的,因为他们都是Cortem-M4F的内核。

 (2)、License文件夹

查阅相关资料,我了解到这个文件夹里面就是相关的许可信息,要用FreeRTOS做产品的得仔细看看,尤其是要出口的产品。

(3) 、Source文件夹

悄悄告诉你,这就是FreeRTOS本尊了!!!!

 

以上就是FreeRTOS 的源码文件,也是我们以后打交道的,可以看出,相比于UCOS来说FreeRTOS的文件非常少!

include文件夹是一些头文件,移植的时候是需要的,下面的这些.C文件就是FreeRTOS的源码文件了,移植的时候肯定也是需要的。

重点来看一下portable这个文件夹,我们知道FreeRTOS是个系统,归根结底就是个纯软件的东西,它是怎么和硬件联系在一起的呢?

软件到硬件中间必须有一个桥梁,portable 文件夹里面的东西就是FreeRTOS系统和具体的硬件之间的连接桥梁!不同的编译环境,不同的MCU,其桥梁应该是不同的,打开portable文件夹,如图所示: 

 从上图中可以看出FreeRTOS针对不同的编译环境和 MCU都有不同的“桥梁”,这里就以MDK编译环境下的STM32F767为例。

MemMang 这个文件夹是跟内存管理相关的,我们移植的时候是必须的!

Keil文件夹里面的东西肯定也是必须的,但是我们打开Keil文件夹以后里面只有一个文件: See-also-the-RVDS-directory.txto这个txt文件是什么鬼?别急嘛!

看文件名字"See-also-the-RVDS-directory",意思就是参考RVDS文件夹里面的东西!哎,好吧,在打开RVDS文件夹,如图所示:

RVDS文件夹针对不同的架构的MCU做了详细的分类,我这里的STM32F767就参考ARM_CM7,打开ARM_CM7中的r0p1文件夹,如图所示:

ARM_CM4F有两个文件,这两个文件就是我们移植的时候所需要的

2、FreeRTOS-Plus文件夹

与FreeRTOS一样,FreeRTOS-Plus也有Demo和Source,Demo都大同小异,这里就不做详解,里面一定是一些例程!

所以这里我们就着重看一下Source文件夹

 

可以看出,FreeRTOS-Puls中的源码并不是FreeRTOS系统的源码。是在这个FreeRTOS系统上另外增加的一些功能代码,比如CLI、FAT、Trace等等。就系统本身而言,和FreeRTOS里面的一模一样的,所以我们如果只是学习FreeRTOS这个系统的话,FreeRTOS-Plus就没必要看了。 

 三、FreeRTOS移植

(一)、准备工作

1、准备基础工程

要移植FreeRTOS,肯定需要一个基础工程,基础工程越简单越好,这里我准备使用STM32入门时学的跑马灯实验来作为基础工程。

2、FreeRTOS系统源码 

根据上面提供的下载链接或官网获取到FreeRTOS源码

 (二)、FreeRTOS移植

1、向工程中添加相应的组件

(1)、添加FreeRTOS源码

step1:在基础工程中新建一个名为FreeRTOS的文件夹,如图所示:

step2:创建FreeRTOS文件夹以后就可以将FreeRTOS的源码添加到这个文件夹中,添加后如图所示:

step3:前文已经讲过protable文件夹,所以这里我们只需要留下keil、MemMang和RVDS这三个文件夹,其他的都可以删除。完成后的结果是:

2、向工程分组中添加文件

打开基础工程,新建分组FreeRTOS_CORE和FreeRTOS_PORTABLE,然后向这两个组添加文件。

step1:打开工程,新建分组

step2:向这两个分组中添加文件

我想重点和大家分享一下FreeRTOS_PORTABLE分组中的port.c和heap_4.c是怎么来的?

port.c是RVDS文件夹下的夹下的 ARM_CM7中的文件,因为STM32F767是Cortex-M7内核并且带有FPU,因此要选择ARM_CM7中的port.c文件。heap_4.c是MemMang文件夹中的,前面说了MemMang是跟内存管理相关的,里面有5个c文件: heap_1.c、heap_2.c、heap_3.c、heap_4.c和 heap_5.c。

这5个c文件是五种不同的内存管理方法,就像从北京到上海你可以坐火车、坐飞机,如果心情好的话也可以走路,反正有很多种方法,只要能到上海就行。这里也一样的,这5个文件都可以用来作为FreeRTOS 的内存管理文件,只是它们的实现原理不同,各有利弊。

这里我们选择heap_4.c,至于原因,大家可以了解一下FreeRTOS的内存管理,自然就知道原因了。这里就先选择heap_4.c,毕竟本章的重点是FreeRTOS的移植。

3、添加相应的头文件路径

添加完FreeRTOS源码中的C文件以后还要添加FreeRTOS源码的头文件路径,头文件路径如图所示:
step1:

step2:

step3:

step4:头文件路径添加完成以后编译一下,看看有没有什么错误,结果会发现提示打不开“FreeRTOSConfig.h”这个文件,如图所示:

啊……竟然出错了!!!!

如何解决以上错误呢?首先得分析一下错误的原因。

这是因为缺少FreeRTOSConfig.h文件,这个文件在哪里找呢?你可以自己创建,显然这不是一个明智的做法。我们可以找找FreeRTOS的官方移植工程中会不会有这个文件,打开FreeRTOS针对STM32F756的移植工程文件,文件夹是CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil,打开以后如图所示:

果然!官方的移植工程中有这个文件,二话不说复制到我们的工程中去,至于复制到什么地方大家可以自行决定,这里我为了方便放到了FreeRTOS源码中的include文件夹下。

 

 FreeRTOSConfig.h是何方神圣?

看名字就知道,他是FreeRTOS的配置文件,一般的操作系统都有裁剪、配置功能,而这些裁剪及配置都是通过一个文件来完成的,基本都是通过宏定义来完成对系统的配置和裁剪的,关于FreeRTOS的配置文件FreeRTOSConfig.h大家可以查阅相关资料进行进一步了解。


至此,RTOS的移植已经大功告成!!!!

如果编译报错,可能是F4的芯片移植会出现以下错误,读者可看下一篇文章教你如何解决

四、结语

以上就是FreeRTOS的移植全过程,希望我的分享对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自动驾驶中的SLAM技术】第2讲:基础数学知识回顾

第二讲:基础数学回顾 文章目录 第二讲:基础数学回顾1 几何学1.1 坐标系1.2 坐标变换① 空间向量② 基变换③ 坐标变换④ 总结 1.3 四元数与旋转向量 2 运动学2.1 李群视角2.2 四元数视角2.3 四元数的李代数与旋转向量间的转换2.4 SO(3)t 上的运动学2.5 线…

视频剪辑技巧:添加srt字幕,提升视频品质的方法

在视频制作和剪辑过程中,字幕的添加是一项常见的技巧。通过添加srt字幕,可以提升视频的品质和观感,让观众更好地理解视频内容。下面一起来看云炫AI智剪如何批量添加srt字幕的方法,如何通过这些技巧提升视频品质。 原视频画面与添…

【Docker基础二】Docker安装Mysql8

下载镜像 安装mysql(版本:8.0.35) # 拉取镜像 docker pull mysql:8.0.35 # 查看镜像是否已经下载 docker images 创建挂载目录 # 宿主机上创建挂载目录 (可以不创建,docker run -v配置了挂载目录,docker会自动…

二分查找(一)

算法原理 原理:当一个序列有“二段性”的时候,就可以使用二分查找算法。 适用范围:根据规律找一个点,能将这个数组分成两部分,根据规律能有选择性的舍去一部分,进而在另一个部分继续查找。 除了最普通的…

使用ChatGPT生成项目需求文档模板

前言 我们在工作中需要编写的技术文档有多种形式,包括Word、Excel、PDF及一些在线形式。我们可以借助ChatGPT生成文本,然而,它不能直接生成Word、Excel、PDF等格式的文档。因此,我们需要利用其他工具来帮助我们生成一些模板&…

分布式之任务调度学习二

4 Quartz 集成到 Spring Spring-quartz 工程 Spring 在 spring-context-support.jar 中直接提供了对 Quartz 的支持 可以在配置文件中把 JobDetail、Trigger、Scheduler 定义成 Bean。 4.1 定义 Job <bean name"myJob1" class"org.springframework.sched…

机器学习模型可解释性的结果分析

模型的可解释性是机器学习领域的一个重要分支&#xff0c;随着 AI 应用范围的不断扩大&#xff0c;人们越来越不满足于模型的黑盒特性&#xff0c;与此同时&#xff0c;金融、自动驾驶等领域的法律法规也对模型的可解释性提出了更高的要求&#xff0c;在可解释 AI 一文中我们已…

MySQL复习汇总(图书管理系统)

MySQL图书管理系统&#xff08;49-94&#xff09;源码_71.备份book数据库到e盘的mybook.sql文件(备份文件中要求包含建库命令)-CSDN博客 -- 1、 创建一个名称为book的数据库。 -- 2、 打开book数据库 -- 3、 创建数据表分别如下&#xff08;除外键之外&#xff09;…

2.1.1 预期年化收益率

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率 3、投资实证   [3.1 202…

GPT实战系列-简单聊聊LangChain

GPT实战系列-简单聊聊LangChain LLM大模型相关文章&#xff1a; GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-大话LLM大模型训练 GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模…

元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata

大家好&#xff0c;我是独孤风。元数据管理平台层出不穷&#xff0c;但目前主流的还是Atlas、Datahub、Openmetadata三家&#xff0c;那么我们该如何选择呢&#xff1f; 本文就带大家对比一下,这三个平台优势劣势。要了解元数据管理平台&#xff0c;先要从架构说起。 正文共&am…

【算法Hot100系列】合并 K 个升序链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

[AutoSar]基础部分 RTE 06 对runnable的触发和SWC的影响

目录 关键词平台说明一、runnable二、RTE的event2.1Mode类型event2.2周期触发类型2.3 数据交互触发 三、internal runnable value四、专属运行区指定五、per_instance memory 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商T…

NGINX 配置本地HTTPS(免费证书)

生成秘钥key,运行: $ openssl genrsa -des3 -out server.key 2048 会有两次要求输入密码,输入同一个即可。输入密码然后你就获得了一个server.key文件。 以后使用此文件(通过openssl提供的命令或API)可能经常回要求输入密码,如果想去除输入密码的步骤可以使用以下命令: $ op…

揭秘六大热门认证考试

六大热门认证考试是什么❓今天为大家详细解读PMP、ACP、CDGA、软考中项、软考高项、NPDP、CISP等热门认证考试&#xff0c;让你不再彷徨&#x1f447; 1️⃣PMP &#x1f451;PMP认证是全qiu公ren的项目管理专业认证&#xff0c;旨在评估项目管理人员在项目过程中所需的知识、技…

基于JAVA的中小学教师课程排课系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 角色管理模块2.2 课程档案模块2.3 排课位置模块2.4 排课申请模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 课程表3.2.3 排课位置表3.2.4 排课申请表 四、系统展示五、核心代码5.1 查询课程5.2 新增课…

C++/OpenGL应用程序

图像应用程序大部分是 C 编写&#xff0c;OpenGL 调用实现与 3D 渲染相关任务将会使用一些扩展库: GLEW、GLM、GLFW、SOLL2 等。 GLFW 库包含 GLFWwindow 类&#xff0c;我们可以在其上进行 3D 场景绘制。OpenGL 也向我们提供了用于 GLSL 程序载入可编程着色阶段并对其进行编译…

【idea】解决sprintboot项目创建遇到的问题2

本篇是继【idea】解决sprintboot项目创建遇到的问题_java.lang.illegalargumentexception: unable to inst-CSDN博客 目录 一、Dependency com.mysql:mysql-connector-j: not found 二、Could not find artifact org.springframework.boot:spring-boot-maven-plugin:pom:4.0…

Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧&#xff0c;并且能够自动缓存图片数据&#xff0c;减少网络请求。Glide 具有良好的性能和易用的 API&#xff0c;支持常见的图片加载需求&#xff0c;例如图片压缩、…

springboot 房屋租赁系统

spring boot mysql mybatis 前台后端