FreeRTOS基础入门——RTOS背景知识简介(一)

news2024/9/23 11:22:27

 个人名片:

🎓作者简介:嵌入式领域优质创作者
🌐个人主页:妄北y

📞个人QQ:2061314755

💌个人邮箱:[mailto:2061314755@qq.com]
📱个人微信:Vir2025WBY

🖥️个人公众号:科技妄北
🖋️本文为妄北y原创佳作,独家首发于CSDN🎊🎊🎊
💡座右铭:改造世界固然伟大,但改造自我更为可贵。

专栏导航:

妄北y系列专栏导航:

物联网嵌入式开发项目:大学期间的毕业设计,课程设计,大创项目,各种竞赛项目,全面覆盖了需求分析、方案设计、实施与调试、成果展示以及总结反思等关键环节。📚💼💡

QT基础入门学习:对QT的基础图形化页面设计进行了一个简单的学习与认识,利用QT的基础知识进行了翻金币小游戏的制作。🛠️🔧💭

Linux基础编程:初步认识什么是Linux,为什么学Linux,安装环境,进行基础命令的学习,入门级的shell编程。🍻🎉🖥️

深耕Linux应用开发:分享Linux的基本概念、命令行操作、文件系统、用户和权限管理等,网络编程相关知识,TCP/IP 协议、套接字(Socket)编程等,可以实现网络通信功能。常见开源库的二次开发,如libcurl、OpenSSL、json-c、freetype等💐📝💡

Linux驱动开发:Linux驱动开发是Linux系统不可或缺的组成部分,它专注于编写特殊的程序——驱动程序。这些程序承载着硬件设备的详细信息,并扮演着操作系统与硬件间沟通的桥梁角色。驱动开发的核心使命在于确保硬件设备在Linux系统上顺畅运作,同时实现与操作系统的无缝集成,为用户带来流畅稳定的体验。🚀🔧💻

Linux项目开发:Linux基础知识的实践,做项目是最锻炼能力的一个学习方法,这里我们会学习到一些简单基础的项目开发与应用,而且都是毕业设计级别的哦。🤸🌱🚀

非常期待与您一同在这个广阔的互联网天地里,携手探索知识的海洋,互相学习,共同进步。🌐💫🌱 熠熠星光,照亮我们的成长之路

✨✨ 欢迎订阅本专栏,对专栏内容任何问题都可以随时联系博主,共同书写属于我们的精彩篇章!✨✨

文章介绍:

📚本篇文章将深入剖析RTOS学习的精髓与奥秘,与您一同分享相关知识!🎉🎉🎉

若您觉得文章尚可入目,期待您能慷慨地送上点赞、收藏与分享的三连支持!您的每一份鼓励,都是我创作路上源源不断的动力。让我们携手并进,共同奔跑,期待在顶峰相见的那一天,共庆辉煌!🚀🚀🚀

🙏衷心感谢大家的点赞👍、收藏⭐和评论✍️,您的支持是我前进的动力!

目录:

目录:

一、我们为什么要学RTOS

1.1 前后台系统:

1.2 RTOS系统

1.2.1硬实时系统

1.2.2 软实时系统

1.2.3 RTOS的任务管理

1.2.4 常见的RTOS

1.4.5 RTOS的核心内容:实时内核

1.3 可剥夺型内核

1.3.1 RTOS内核与多任务管理

1.3.2 多任务管理的优势包括:

1.3.3 FreeRTOS与可剥夺内核

1.3.4 可剥夺型内核的调度机制

1.3.5 调度场景示例

1.4 为什么讲解FreeRTOS

1.5 相关资料查找

二、FreeRTOS系统简介

2.1 官网所获源码与文档:


一、我们为什么要学RTOS

1.1 前后台系统:

在早期嵌入式系统开发中,没有嵌入式操作系统的概念,开发者直接在裸机硬件上编写程序。例如,对于51单片机,基本没有操作系统的概念。程序通常被分为两个部分:前台系统和后台系统。

简单的小型系统:通常采用前后台系统架构,这种程序结构包括一个死循环和一些中断服务程序:

后台系统(也称任务级):

        主程序是一个无限循环。在这个循环中,程序调用各种API函数来完成需要的操作。这个无限循环被称为后台系统。

        后台系统主要处理定时的、顺序的任务。

前台系统(也称中断级):

        中断服务程序用于处理系统的异步事件。中断服务程序在特定的硬件或软件条件下被触发,处理某些紧急任务或事件。

        前台系统主要处理突发的、紧急的任务。

换一种说法:

在这种架构中,嵌入式系统的操作可以分为两层:

1. 任务层:

        主程序在一个无限循环中运行,执行各种需要的操作和任务。这是系统的主要操作层,处理大部分常规任务。

        任务层负责定期检查和执行系统所需的常规操作。

2. 中断层:

        中断服务程序在特定事件发生时被触发,处理这些突发事件。

        中断层负责处理所有的异步事件,确保系统能够及时响应外部或内部的紧急情况。

这两层结构确保了嵌入式系统能够有效地运行和响应各种任务和事件。在任务层,系统按照预定的流程执行操作;在中断层,系统能够及时响应紧急事件,提高系统的实时性和可靠性。

1.2 RTOS系统

实时操作系统(RTOS,全称为 Real-Time Operating System)的核心特点是强调实时性。根据应用的严格程度,实时操作系统可以分为硬实时和软实时两类。

1.2.1硬实时系统

定义:要求在规定的时间内必须完成某个操作,不允许超时。

应用领域:硬实时系统通常用于安全至关重要的应用,比如航空航天、医疗设备、工业自动化等。

特点:严格的时间约束,任何延迟或超时都可能导致系统失效或造成严重后果。

1.2.2 软实时系统

定义:要求在大多数情况下在规定的时间内完成操作,但允许偶尔超时。

应用领域:软实时系统通常用于对时间要求不那么严格的应用,比如多媒体、网络通信等。

特点:处理过程超时的后果相对宽松,没有硬实时系统那么严格。

1.2.3 RTOS的任务管理

在实时操作系统中,功能通常被划分为多个任务,每个任务负责实现特定的功能。每个任务通常是一个简单的程序,通常是一个死循环,等待被调度执行。

1.2.4 常见的RTOS

FreeRTOS: 一款轻量级的开源RTOS,广泛应用于嵌入式系统中。

UCOS (MicroC/OS): 另一款常见的RTOS,具有良好的实时性能和小内存占用。

RTX: ARM公司提供的RTOS,集成在Keil开发环境中,广泛应用于Cortex-M系列微控制器。

RT-Thread: 一款开源的RTOS,具有良好的可扩展性和丰富的组件支持。

DJYOS: 一款针对特定应用领域定制的RTOS。

1.4.5 RTOS的核心内容:实时内核

RTOS的核心内容在于实时内核,主要包括以下几部分:

1. 任务管理:

        任务的创建、删除、调度和切换。

        支持多任务运行,并根据优先级或时间片调度任务。

2. 时间管理:

        提供系统时钟、延迟和定时器功能。

        确保任务在预期的时间内得到执行。

3. 中断管理:

        管理中断的注册、处理和优先级。

        实现中断的快速响应和处理,保证系统的实时性。

4. 同步与通信:

        提供任务之间的同步机制,如信号量、互斥量、事件标志等。

        提供任务之间的通信机制,如消息队列、管道等。

5. 内存管理:

        管理任务的内存分配和回收,确保系统稳定运行。

        支持动态内存分配和静态内存分配。

实时操作系统(RTOS)通过其实时内核,提供了任务管理、时间管理、中断管理、同步与通信、内存管理等功能,确保系统能够在特定时间内响应和处理事件。RTOS广泛应用于对时间要求严格的嵌入式系统中。通过合理划分任务和利用RTOS的核心功能,开发者能够实现高效、可靠的嵌入式应用程序。

1.3 可剥夺型内核

1.3.1 RTOS内核与多任务管理

RTOS(实时操作系统)的内核负责管理所有任务的运行和调度。内核的多任务管理能力决定了哪个任务在何时运行,以及何时停止当前任务并切换到其他任务。这样的多任务管理机制给人的感觉就像芯片有多个CPU一样,从而实现了CPU资源的最大化利用。

1.3.2 多任务管理的优势包括:

最大化CPU利用率:通过在多个任务之间切换,确保CPU资源得到充分利用。

模块化开发:将复杂应用程序分解为多个独立的任务,每个任务负责特定功能,提高了代码的可维护性和可重用性。

复杂实时应用:通过优先级和调度机制,可以满足复杂应用的实时要求。

1.3.3 FreeRTOS与可剥夺内核

本教程重点讲解RTOS的经典代表作:FreeRTOS。FreeRTOS的内核是可剥夺型的,这一点非常重要,因此需要简单介绍一下什么是可剥夺型内核。

什么是可剥夺型内核?

可剥夺型内核(Preemptive Kernel)是指内核可以随时剥夺当前正在运行任务的CPU使用权,以运行其他具有更高优先级的任务。

优先级调度:内核总是优先运行就绪任务中优先级最高的那个任务。

实时响应:通过优先级调度机制,可以保证高优先级任务快速响应,提高系统的实时性能。

1.3.4 可剥夺型内核的调度机制

1. 任务创建与初始化:在系统初始化时,任务被创建并赋予各自的优先级。

2. 任务调度:内核维护一个就绪任务列表,按优先级排序。每次调度时,内核选择优先级最高的就绪任务运行。

3. 任务切换:当一个高优先级任务变为就绪状态时,内核会立即中断当前低优先级任务的运行,将CPU使用权切换给高优先级任务。

1.3.5 调度场景示例

高优先级任务A:中断低优先级任务B,立即运行。

任务B在等待资源:如果任务B在等待某资源释放而进入阻塞状态,则调度器会选择下一个优先级最高的就绪任务运行。

时间片轮转:在相同优先级的任务之间,内核可以采用时间片轮转机制,确保这些任务公平地分享CPU时间。

可剥夺型内核通过优先级调度机制,确保系统中高优先级的任务能够快速响应并获得运行机会。FreeRTOS作为可剥夺型内核的典型代表,通过其高效的调度机制和丰富的内核功能,为开发复杂的实时应用提供了强大的支持。

1.4 为什么讲解FreeRTOS

1、因为FreeROTS开源。

2、FreeRTOS免费

3、FreeRTOS是很多第三方组件钦定的系统!

1.5 相关资料查找

1FreeRTOS官网:FreeRTOS™ - FreeRTOS™

2、开源电子网:www.openedv.com

3、其他论坛。

、FreeRTOS系统简介

FreeRTOS是一款高度灵活且支持多任务调度的实时操作系统内核,它允许开发者根据需求裁剪功能,并且不限制任务的数量。FreeRTOS集成了实时系统所需的核心功能,如资源管理、任务间同步和通信机制等。

该系统主要使用C语言编写,确保了代码的结构清晰和可读性强,只有在与硬件紧密相关的极少数情况下才使用汇编语言。这种设计使得FreeRTOS不仅功能强大,而且易于理解和上手,特别适合那些初次探索嵌入式实时操作系统的学生、开发者和爱好者。

2.1 官网所获源码与文档:

下载最终的FreeRTOS源码:

 

 

2.2 源码文件夹 

 

FreeRTOS提供了大量针对不同微控制器(MCU)的示例程序,包括ST的F1、F4和F7系列。这些示例对学习和移植FreeRTOS来说非常有帮助,因为我们可以参考这些示例程序来加速开发过程。

License文件夹:这个文件夹包含了与使用FreeRTOS相关的许可信息。如果打算将FreeRTOS用于商业产品,尤其是出口产品,务必仔细阅读和理解这些许可条款。

Source文件夹:顾名思义,这个文件夹包含了FreeRTOS的核心源码。打开该文件夹后,会看到FreeRTOS的主要实现文件。

Demo文件夹:Demo文件夹里面就是FreeRTOS的相关例程。

 FreeRTOS的源码文件,这些文件将是我们未来工作中频繁接触的部分。与UCOS相比,FreeRTOS的文件结构相对简洁。`include`文件夹中包含了一些头文件,是移植过程中必需的;而下面的.C文件则是FreeRTOS的核心源码,同样在移植时也必不可少。

特别值得关注的是`portable`文件夹。我们知道,FreeRTOS作为一个操作系统,本质上是纯软件,它如何与硬件进行交互呢?答案就在`portable`文件夹中。这个文件夹中的内容充当了FreeRTOS系统与具体硬件之间的桥梁。

不同的编译环境和不同的MCU会有不同的桥梁实现。因此,`portable`文件夹对移植工作至关重要。打开`portable`文件夹后,我们可以看到其中包含了与不同平台和编译器相关的代码。

 

RVDS文件夹针对不同的架构的MCU做了详细的分类,STM32F103就参考ARM CM3,打开ARM CM3文件夹。

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

📝大佬觉得本文有所裨益,不妨轻点一下👍给予鼓励吧!

❤️❤️❤️本人虽努力,但能力尚浅,若有不足之处,恳请各位大佬不吝赐教,您的批评指正将是我进步的动力!😊😊😊

💖💖💖若您认为此篇文章对您有所帮助,烦请点赞👍并收藏🌟,您的支持是我前行的最大动力!

🚀🚀🚀任务在默默中完成,价值在悄然间提升。让我们携手共进,一起加油,迎接更美好的未来!🌈🌈🌈

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

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

相关文章

必备:2024年四大文件翻译神器盘点!

在现代社会,语言不再是交流的障碍,文件翻译工具的出现,让不同语言之间的信息传递变得轻松自如。以下是几款备受推崇的文件翻译工具,它们将助大家轻松应对各种语言挑战,提升工作效率。 在当今的职场环境中,…

有没有性价比高的蓝牙耳机推荐?盘点4款开放式耳机排行榜10强

那当然是开放式蓝牙耳机性价比高呀,说到开放式蓝牙耳机的性价比呢,那我们可以先了解它的价位,它的价位大致可以分为三个价位。 低价位区间(499元以下): 这个价格区间的开放式耳机通常受成本限制&#xff…

使用Step Functions运行AWS Backup时必备的权限要点

引言 在尝试从Step Functions执行AWS Backup的按需备份时,我在权限方面遇到了一些困难。为了备忘,我将这些经验写成这篇文章。 概述 从Step Functions执行AWS Backup时,需要分配以下权限: AWS Backup相关权限 执行备份的权限…

培训第二十一天(mysql用户创建与授权、角色创建)

上午 1、环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf[rootmysql ~]# yum -y remove mariadb //移除mariadb[rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留文件 2、安装mysql绿包 [rootmysql ~]…

c->c++(四):gtest

本文主要探讨gtest相关内容。 gtest安装 wget -O gtest.zip https://github.com/google/googletest/archive/refs/heads/main.zipunzip gtest.zipcd googletest-mainmkdir bulid && cd buildcmake .. && make && make install gtest API TEST/TEST…

MySQL update set语句中 逗号与and的区别

语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table_name SET column1 value1, column2 value2, ... WHERE condition; 参数说明: table_name 是你要更新数据的表的名称。column1, column2, ... 是你要更新的列的名称。v…

减速电机的减速比计算原理

今天因为看到减速电机的内部中有通过齿轮来增加扭矩的结构,想找点原理性的文章来看一下,奈何遍寻不得。故提笔于此记录,以备往后回看。 图1 减速电机的竖截面剖视图 减速比为64,我的理解是在初始的齿轮转一圈的时候,最…

单片机配网,继电器开关,广播

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

qt安装图文

1.下载 通过百度网盘分享的文件:qt安装图文 链接:https://pan.baidu.com/s/1lQtYYvuybibDkdrMlpKJOg 提取码:11u7 --来自百度网盘超级会员V3的分享 2.安装

C++ 几何算法 - 向量点乘,叉乘及其应用

一:点乘介绍 1. 向量点乘: 2. 向量点乘的性质: 3. 向量点乘公式: 4. 向量的点乘的属性: (1):向量与自身做点乘,会得到向量长度的平方: (2&#xf…

JVM系列 | 对象的消亡3——垃圾收集器的对比与实现细节

垃圾收集器 文章目录 各收集器简单对比收集器启动参数各收集器详细说明JDK 1.3 之前JDK 1.3 | SerialJDK 1.4 | ParNewJDK 1.4 | Parallel ScavengeJDK 5 | CMS 收集器JDK 7 | G1 各收集器简单对比 收集器名称出现时间淘汰时间目标采用技术线程数STW分代备注无名JDK 1.3之前JD…

Android 自定义View(一):View是什么?如何创建自定义view,自定义属性等

目录 1)View是什么? 2)View分类 3)View的知识点 4)View的工作流程是怎么样的? 5)案例:如何自定义View?比如我们要实现一个输入框带有清除按钮的view 6)疑问&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 免单统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题…

0805作业+梳理

一、作业&#xff1a; 代码&#xff1a; create.c #include<myhead.h> int main(int argc, const char *argv[]) {//创建一个有名管道文件if(mkfifo("./linux",0664)-1){perror("mkfifo linux error");return -1;}getchar();system("rm linux…

8.15 C++作业

输入一组字符&#xff0c;实现各字符的归类统计 #include <iostream> #include <string.h>using namespace std;namespace xiaoli {string str;int len; } using namespace xiaoli;int main() {getline(cin,str);//识别空格len str.size();int a0,b0,c0,d0,e0;fo…

x-cmd mod | x yq - 轻量级的 YAML、JSON、XML 处理器

目录 简介使用语法参数子命令x yq repl 简介 yq (YAML Query) 是一个轻量级的 YAML、JSON、XML 处理器&#xff0c;主要用于查询和提取 YAML 数据。 x yq 是基于 yq 命令、为提升 yq 使用体验而设计的增强模块&#xff0c;具体的增强性改动如下&#xff1a; 简化 yq 命令的安…

【GoodERP更新日志】增加模块 质检管理 处理来料检、发货检功能

开源项目GoodERP更新-2024年8月5日 本次提交合并增加的功能或解决的问题&#xff1a;增加 质量管理模块->增加来料质检、发货质检功能 提交前: 无 提交后: 1、按供应商来料&#xff0c;安排来料质检工作&#xff1b; 2、按销售订单&#xff0c;安排对计划发货商品进行…

比较推荐哪种可视耳勺?5大热门产品专业测评分享!

由于现在人们对健康生活越来越重视&#xff0c;可视耳勺成为了个护健康产品&#xff0c;受到了越来越多消费者的关注和喜爱。这种挖耳勺采用了先进的无线技术和高清摄像头&#xff0c;能够让人们更加清晰地观察自己耳内的状况&#xff0c;从而更加安全、有效地清洁耳朵。但同时…

封装组件之使用vue3封装简易Button按钮

1.新建Button.vue <template><button :class"buttonClass"><!-- 用于输入内容 --><slot></slot></button> </template> <script lang"ts" setup> import { computed } from vue; //定义类型 const props…

OpenGL投影矩阵

OpenGL Projection Matrix OpenGL投影矩阵