FreeRTOS学习 -- 再识

工作中一直使用FreeRTOS进行着开发,但是没有进行过系统的总结过。现在将快速使用几天时间将FreeRTOS相关知识点加以总结。
官网:
https://www.freertos.org/zh-cn-cmn-s/
参看资料:
正点原子 STM32F1 FreeRTOS开发手册_V1.2.pdf
The FreeRTOS™Reference Manual.pdf
USING THE FREERTOSREAL TIME KERNEL

一、什么是FreeRTOS

Free即免费的意思,RTOS全称是Real Time Operating System,中文名就是实时操作系统。FreeRTOS就是一个免费的RTOS类系统。RTOS不是指某一个确定的系统,而是指一类系统。比如,uC/OS,FreeRTOS,RXT,RX-Thread等这些都是RTOS类操作系统。

操作系统允许多个任务同时运行,这个叫做多任务,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务 调度在各个任务之间切换非常快。这就给人们造成了同一时刻有多个任务同时运行的错觉。

操作系统的分类方式可以有任务调度器的工作方式决定,比如有的操作系统给每个任务分配同样的运行时间,时间到了就轮到下一个任务,Unix操作系统就是这样的。RTOS的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实际环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须可预测。像FreeRTOS这种传统的RTOS类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。

FreeRTOS是RTOS系统中的一种,FreeRTOS十分的小巧,可以在资源有限的微控器中使用,当然FreeRTOS不仅仅局限于在微控器中使用,但从文件数中来说FreeRTOS要比uc/OS小的多。

二、为什么选择FreeRTOS

RTOS类系统有很多,为什么要选择FreeRTOS呢?
1、FreeRTOS免费!做产品的话要考虑成本。
2、许多其他半导体厂商产品的SDK包就使用FreeRTOS作为其从操作系统,尤其是WIFI、蓝牙这些带协议栈的芯片或模块。
3、许多软件厂商也使用FreeRTOS做本公司软件的操作系统。比如,ST公司的所有要使用到RTOS系统的例程均采用了FreeRTOS。
4、FreeRTOS的文件数量很少,相对简单。
5、文档相对齐全,在 FreeRTOS 的官网(www.freertos.org)上可以找到所需的文档和源码。
6、FreeRTOS 被移植到了很多不同的微处理器上,比如STM32,F1、F3、F4 和最新的 F7 都有移植,这个极大的方便了我们学习和使用。
7、社会占有量很高,据统计的 2015 年 RTOS 系统占有量中 FreeRTOS 已经跃升至第一位。

三、FreeRTOS的特点

FreeRTOS是一个可裁剪的小型RTOS系统,其特点包括:

  • FreeRTOS的内核支持抢占式,合作式和时间片调度。
  • 提供了一个用于低功耗的Tickless模式。
  • 系统的组件在创建时可以选择动态或者静态的RAM,比如任务、消息队列、信号量、软件定时器等。
  • FreeRTOS-MPU支持Corex-M系列中的MPU单元,比如STM32F429。
  • FreeRTOS系统简单、小巧、易用,通常情况下内核占用4k-9k字节的空间。
  • 高可移植性,代码主要以C语言编写。
  • 支持实时任务和协程(co-routines 也有称为合作式、协同程序,本教程均成为协程)。
  • 任务与任务、任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信号量、递归互斥信号量和互斥信号量 进行通信和同步。
  • 创新的事件组(或者事件标志)。
  • 具有优先级继承特性的互斥信号量。
  • 高效的软件定时器。
  • 强大的跟踪执行功能。
  • 堆栈溢出检测功能。
  • 任务数量不限。
  • 任务优先级不限。

四、FreeRTOS官网

官网:
https://www.freertos.org/zh-cn-cmn-s/

源码下载:
在这里插入图片描述
在这里插入图片描述
重点在于上面那两个文件夹:FreeRTOS 和 FreeRTOS-Plus,这两个文件夹里面的东西就是 FreeRTOS 的源码。

FreeRTOS 文件夹

可以看到里面有四个文件夹:
在这里插入图片描述

Demo文件夹

Demo文件夹里面就是FreeRTOS针对不同的MCU提供的相关例程,进行程序移植的时候可以参考这些例程。
在这里插入图片描述

License文件夹

License文件夹里面的就是相关许可信息。

Source文件夹

Source文件夹里面就是FreeRTOS的源代码文件,include文件夹是一些头文件,移植的时候也是需要的,下面这些c文件就是FreeRTOS的源代码文件,移植的时候也是需要的。
在这里插入图片描述
在这里插入图片描述
重点来看一下portable这个文件夹,FreeRTOS是个系统,归根结底是软件的东西,它是怎么和硬件联系在一起的呢?那么中间就必须有一个桥梁,portable文件夹里面的东西就是FreeRTOS系统和具体的硬件之间的连接桥梁。不同的编译环境,不同的MCU,其桥梁是不同的,打开portable文件夹,如下图所示:
在这里插入图片描述
MemMang这个文件夹就是跟内存管理相关的,我们移植的时候是必须的。Keil文件夹里面的东西也是必须的,但是我们打开keil文件夹以后里面只有一个文件:See-also-the-AVDS-directory.txt,意思是参考RVDS文件夹里面的东西!
在这里插入图片描述
RVDS 文件夹针对不同的架构的MCU 做了详细的分类,STM32F429 就参考 ARM_CM4F,打开 ARM_CM4F 文件夹。
在这里插入图片描述
ARM_CM4F 有两个文件,这两个文件就是我们移植的时候所需要的!

FreeRTOS-Plus 文件夹

在这里插入图片描述
FreeRTOS-Plus 也有 Demo 和 Source,Demo 就不看了,肯定是一些例程。我们看一下 Source。
在这里插入图片描述
可以看出,FreeRTOS-Plus 中的源码其实并不是 FreeRTOS 系统的源码,是在这个 FreeRTOS系统上另外增加的一些功能代码,比如 CLI、FAT、Trace 等等。就系统本身而言,和 FreeRTOS里面的一模一样的,所以我们如果只是学习 FreeRTOS 这个系统的话,FreeRTOS-Plus 就没必要看了。

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

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

相关文章

Linux CPU利用率

Linux CPU利用率 在线上服务器观察线上服务运行状态的时候,绝大多数人都是喜欢先用 top 命令看看当前系统的整体 cpu 利用率。例如,随手拿来的一台机器,top 命令显示的利用率信息如下 这个输出结果说简单也简单,说复杂也不是那么…

使用Mac自带终端进行远程ssh连接Linux服务器

废话不多说,直接上图 好吧,我承认我是多此一举,脱裤子放pi了,其实只需要在终端输入一行命令就可以了(呜呜~) ssh rootip -p 22 需要注意的是,命令里的ip地址同样要替换成你自己的服…

前端工程化理解 (2024 面试题)

最好介绍远古世界最好随性一点,不要太刻板 ,不然像背书 什么是前端工程化? - 知乎 前端工程化的历史 互联网初期,09 年以前,页面只需要展示一些列表、表格、文章内容以及简单图片即可,其目的是为了传送信…

SpringCloudAlibaba

文章目录 一、SpringCloudAlibaba是什么?二、核心组件1 Nacos1.1 Nacos介绍1.2 什么是Nacos?1.3 为何使用Nacos? 2.Sentinel2.1 什么是Sentinel2.2 Sentinel好处 3 GateWay3.1 网关介绍3.2 GateWay3.3 基本概念: 4 Seata4.1 分布式…

4.进程相关

1.关于进程和程序的相关定义 1.1 程序的相关定义 程序通俗来讲就是我们的源代码文件,然后里面还包含了其他的文件信息 程序入口地址:也就是 main 函数的位置 1.2 进程的相关定义 进程需要资源:CPU ,内存 进程是一个抽象定义&a…

免费游戏云服务器推荐,一键搭建我的世界(MC)及幻兽帕鲁服务器!

随着云计算的普及和发展,越来越多的人开始尝试在云服务器上搭建游戏服务器。本文将为大家推荐一款免费游戏云服务器,可以一键搭建我的世界(MC)或者幻兽帕鲁服务器。 雨云是一家国内的云计算服务提供商,为了吸引用户,推出了积分免费…

从误差分解看Few-shot的核心问题

FSL训练过程一般都是最小化经验误差ERM。 同时,由于现实任务的实际数据分布 是未知的,因此无法找到一个最优的参数组合 ,能最小化期望损失(最小值多少也是未知的),我们能做的实际上是尽可能的去找一个参数…

redis string底层为什么使用sds, sds好处?redis 的动态字符串优点?

1. redis 的键值对,都是由对象组成的, 其中键总是一个字符串对象(string object) 而键的value则可以是:“字符串对象”, “列表对象 (list object)”,“哈希对象 (hash o…

蓝桥杯每日一题(背包dp,线性dp)

//3382 整数拆分 将 1,2,4,8看成一个一个的物品&#xff0c;以完全背包的形式放入。 一维形式&#xff1a;f]0]1; #include<bits/stdc.h> using namespace std; //3382整数拆分 const int N1e610, M5e510; int mod1e9; int f[N],n; int main() {cin>>n;//转化为完…

linux 迁移home目录以及修改conda中pip的目录,修改pip安装路径

1&#xff09;sudo rsync -av /home/lrf /data/home/lrf 将/home目录下的文件进行复制&#xff08;假设机械硬盘挂载在/data目录下&#xff09;** 2&#xff09;usermod -d /data/home/lrf -m lrf 修改用户$HOME变量** 3&#xff09;vi /etc/passwd 查看对应用户的$HOME变量是…

网络安全加密算法---对称加密

三位同学一组完成数据的对称加密传输。 三位同学分别扮演图中 A、B 和 KDC 三个角色&#xff0c;说明 KA、KB&#xff0c;KAB 和发送的数据Data 的内容。 给出图中 2 和 3 中的数据&#xff0c;以及 Data 加密后的密文。可以完成多轮角色互换的通信 过程。其中一轮过程要求 K…

洗地机如何选?入手这四款优质好有,幸福感爆棚!

家庭清洁作为每天都必干的一件事&#xff0c;房屋的整洁是让人保持心情愉悦的一种方式。不过每次拿着清洁工具一顿劳作后总是会腰酸背痛&#xff0c;但是洗地机的出现为我们解放了双手。相对于传统的清洁工具&#xff0c;洗地机功能更多样更高效。那么市面上洗地机哪个牌子好&a…

LeetCode31. 下一个排列(Java)

题目&#xff1a; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…

PyQt PySide6零基础入门与项目实战视频教程

目录 课程亮点课程大纲第一章&#xff1a;基础篇 PySide6开发环境安装第二章 控件与布局篇 PySide6常用控件与界面布局使用介绍第三章 信号槽与事件机制第四章 QMainWindow应用篇第五章 样式表qss与自定义控件第六章 图表与曲线第七章 数据库编程第八章 项目实战&#xff1a;高…

Java—抽象方法与接口

声明&#xff1a;以下内容是根据B站黑马程序员的Java课程&#xff0b;博主自己的理解整理而成&#xff0c;课程很好&#xff0c;适合初学者学习。 关于此类题目&#xff0c;重要的是识别出用什么来实现&#xff0c;到底是接口还是抽象方法&#xff0c;还是共有的属性等等&…

QT:事件机制

作业&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include<QPushButton> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

Vue3---基础1(认识,创建)

变化 相对于Vue2&#xff0c;Vue3的变化&#xff1a; 性能的提升 打包大小减少 41% 初次渲染快 55%&#xff0c;更新渲染快133% 内存减少54% 源码的升级 使用 proxy 代替 defineProperty 实现响应式 重写虚拟 DOM 的实现和 Tree-shaking TypeScript Vue3就可以更好的支持TypeSc…

Redis中的集群(四)

集群 槽指派 CLUSTER ADDSLOTS命令的实现 CLUSTER ADDSLOTS命令接受一个或多个槽作为参数&#xff0c;并将所有输入的槽指派给接收该命令的节点负责: CLUSTER ADDSLOTS <slot> [slot ...]CLUSTER ADDSLOTS命令的实现可以用以下伪代码来表示: def CLUSTER_ADDSLOTS(*…

JavaScript - 请你为数组自定义一个方法myFind,使其实现find方法的功能

难度级别:中级及以上 提问概率:50% 我们知道数组的find方法是ES6之后出现的,它强调找到第一个符合条件的元素后即跳出循环,不再继续执行,那么如果不用ES6的知识,为数组添加一个自定义方法实现find方法的功能,首先要想到在数组的原型pro…

探索进程控制第一弹(进程终止、进程等待)

文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么&#xff1f;进程终止的情况代码跑完&#xff0c;结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…