FreeRTOS移植详解

一、前言

本文旨在讲解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的移植全过程,希望我的分享对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

各银行小微企业信贷相关产品和机器学习建模案例

各银行小微企业贷款业务 互联网的时代,大量新信息技术的涌现和网络的无处不在,想要抢占这片金融天地,必须重视小微金融业务,小微企业是一直具有重大潜力的客户,商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

NOSQL与REDIS配置与优化

目录 一、关系数据库与非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 4.非关系型数据库产生背景 二、Redis 1.Redis介绍 2.Redis 优点和使用场景 三、Redis 安装部署 1.环境准备 2.安装redis 3.修改配置文件 4.定义systemd服…

超声波模块的驱动(STM32、51单片机等)

一、前言 本文旨在分享单片机对超声波模块的驱动,测量距离和显示 二、超声波的驱动 1、超声波模块 2、模块性能 (1)TCT40-16T/R1 压电陶瓷超声传感器(通用型) 3、接口定义 Vcc、 Trig(控制端&#xff09…

Learning Vision-and-Language Navigation from YouTube Videos

问题: 现有的VLN方法受小规模环境或不合理的路径指令训练的影响,限制了对不可见环境的泛化 解决方案: 使用Youtube上海量的房屋参观视频 1、根据youtube的视频创建一个大规模数据集,该数据集包含来自房屋参观视频的合理路径指…

软件测试|测试平台开发-Flask 入门:编写第一个简单 Web 应用

简介 Flask 是一个轻量级的 Python Web 框架,它使得创建 Web 应用变得简单快捷。相比于Django框架,它具有以下的优点: 轻:Flask 是一个轻量级的 Web 框架,使用 Python 语言编写易:较其他同类型框架更为灵…

Spark基础内容

Spark基本介绍 Spark是什么 定义 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎. Spark与MapReduce对比 mapreduce架构图如下: MapReduce的主要缺点: 1- MapReduce是基于进程进行数据处理,进程相对线程来说&#x…

编程语言的未来,通用代码生成器和超级语言

编程语言的未来,通用代码生成器和超级语言 我们生活在一个编程语言种类繁多,百花齐放的年代。形形色色的编程语言覆盖了软件开发的方方面面。如果说这些变成语言有什么共性的话,大家都知道,大多数编程语言是高级语言。 何为高级…

PyTorch|构建自己的卷积神经网络——nn.Sequential()

之前在构建神经网络时,我们一般是采用这种方式,就像这样: class Network1(nn.Module): def __init__(self): super(Network1,self).__init__() self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size5) …

车辆运动学方程推导和代码实现

文章目录 1. 运动学方程2. 模型实现 1. 运动学方程 自行车模型(Bicycle Model)是车辆数字化模型中最常见的一种运动学模型。其除了可以反映车辆的一些基础特性外,更重要的是简单易用。通常情况下我们会把车辆模型简化为二自由度的自行车模型…

1.分组

#include<bits/stdc.h> using namespace std; int main() {unsigned long long a,b,c0,d,s0;cin>>a>>b;for(long long i1;i<a;i){cin>>d;cd;if(c>b){c0;s;}}cout<<s;return 0; }

【软件测试】概述

《软件缺陷》 定义 &#xff08;从产品内部看&#xff09;软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff08;从产品外部看&#xff09;系统所需要实现的某种功能的失效或违背 表现形式(1) 软件没有实现产品规格说明所要求的功能模块(2) 软件中出现了产品规格说…

Micro-app 微前端框架demo介绍

Micro-app 框架 1、框架安装 npm i micro-zoe/micro-app --save2、子应用对应的view页面 <template><div><!-- name(必传)&#xff1a;应用名称url(必传)&#xff1a;应用地址&#xff0c;会被自动补全为http://localhost:3000/index.htmlbaseroute(可选)&…

Java 堆的设计,如何用堆进行排序

Java 学习面试指南&#xff1a;https://javaxiaobear.cn 1、堆的定义 堆是计算机科学中一类特殊的数据结构的统称&#xff0c;堆通常可以被看做是一棵完全二叉树的数组对象。 1、堆的特性 它是完全二叉树&#xff0c;除了树的最后一层结点不需要是满的&#xff0c;其它的每一层…

mac版viso软件 流程图软件omnigraffile

OmniGraffle 是一款由 The Omni Group 开发的绘图工具&#xff0c;主要用于创建各种类型的图表、流程图、组织结构图、网站地图等。它提供了丰富的绘图工具和功能&#xff0c;包括形状、线条、文本、颜色、样式等&#xff0c;可以帮助用户轻松地创建出精美的图表和图形。 OmniG…

《PySpark大数据分析实战》-24.数据可视化图表介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

深度解析基于模糊数学的C均值聚类算法

深度解析基于模糊数学的C均值聚类算法 模糊C均值聚类 (FCM)聚类步骤&#xff1a;FCM Python代码&#xff1a; 模糊C均值聚类 (FCM) 在数据挖掘和聚类分析领域&#xff0c;C均值聚类是一种广泛应用的方法。模糊C均值聚类&#xff08;FCM&#xff09;是C均值聚类的自然升级版。相…

WebSocket的优点和缺点:一文详解。

WebSocket 的优缺点 WebSocket 协议是一种双向通信协议&#xff0c;它使用单个 TCP 连接实现全双工通信&#xff0c;这使它比传统的 HTTP 协议更有效率。 WebSocket 优点 双向通信&#xff1a; WebSocket 协议支持双向通信&#xff0c;使服务器和客户端之间的通信更加方便和快…

关于使用统一服务器,vscode和网页版jupyter notebook的交互问题

autodl 查看虚拟环境 在antodl上租借了一个服务器&#xff0c;通过在网页上运行jupyter notebook和在vscode中运行&#xff0c;发现环境都默认的是miniconda3。 conda info --envs 当然环境中所有的包都是一样的。 要查看当前虚拟环境中安装的所有包&#xff0c;可以使用以…

解决Typescript报错问题[亲测有效]

目录 1、安装 2、报错 3、分析 4、三种更新途径 如果你tsc -v报错&#xff0c;请看这篇文章&#xff0c;本人亲测有效&#xff01; 1、安装 在前端项目中使用TS&#xff0c;需要进行安装&#xff0c;命令为&#xff1a;npm install -g typescript 查看TS版本&#xff1a; …

图像解析力测试

什么是图像解析力测试 图像解析力测试是衡量成像系统性能的关键指标之一,它决定了摄像头捕捉到的图像细节和清晰度。目前主流的图像解析力测试方法主要有TV line检测、MTF检测和SFR检测。 TV line检测主要用于主观测试,通过观察图像中的线条来评估解析力。然而,这种方法缺乏…