FreeRTOS 入门 知识

news2024/11/15 10:46:46

什么是FreeRTOS 

        FreeRTOS 是一个轻量级的实时操作系统(RTOS),由 Richard Barry 在 2003 年开发,并且由亚马逊的 FreeRTOS 项目(一个由 Amazon Web Services (AWS) 支持的开源项目)进一步推动和发展。FreeRTOS 专为嵌入式系统而设计,旨在提供任务管理、时间管理、同步(信号量、互斥锁等)、内存管理等功能,同时保持非常小的资源占用(包括RAM和ROM)。

FreeRTOS 的特点:

  • 轻量级:FreeRTOS 的内核代码非常精简,可以在非常有限的资源(如几KB的RAM和ROM)上运行。
  • 可配置:用户可以根据需要配置FreeRTOS,只包含所需的功能,从而进一步减少资源占用。
  • 跨平台:FreeRTOS 支持多种微控制器和处理器架构,包括 ARM Cortex-M、PIC、AVR、ESP32 等。
  • 实时性:FreeRTOS 提供了基于优先级的任务调度,确保高优先级任务能够尽快得到执行,满足实时性要求。
  • 丰富的功能:除了基本的任务调度和同步机制外,FreeRTOS 还提供了队列、定时器、事件标志组等高级功能。
  • 易于使用:FreeRTOS 的API设计直观,易于学习和使用,同时提供了丰富的文档和示例代码。

应用场景:

        FreeRTOS 广泛应用于各种嵌入式系统中,包括但不限于工业自动化、医疗设备、消费电子、汽车电子、无人机等领域。在这些应用中,FreeRTOS 的实时性和资源效率是关键因素,使得开发者能够构建出高效、可靠的嵌入式系统。

与其他RTOS的比较:

       与其他实时操作系统相比,FreeRTOS 的主要优势在于其轻量级和可配置性。然而,它也可能在功能丰富性和社区支持方面不如一些商业RTOS。因此,在选择RTOS时,需要根据具体的应用需求和资源限制进行权衡。

        总之,FreeRTOS 是一个功能强大、易于使用且资源占用极低的实时操作系统,非常适合用于资源受限的嵌入式系统开发。

FreeRTOS和STM32的区别

STM32不是裸机 

       FreeRTOS和STM32在嵌入式系统开发中扮演着不同的角色,它们之间存在明显的区别,主要体现在以下几个方面:

定义与性质

FreeRTOS

  • 定义:FreeRTOS是一个免费和开源的实时操作系统内核,专为嵌入式系统设计。
  • 性质:FreeRTOS是一个软件层面的解决方案,提供了一套用于任务管理、调度、同步和通信等功能的API。

STM32

  • 定义:STM32是意法半导体公司推出的一款基于ARM Cortex-M内核的32位微控制器系列。
  • 性质:STM32 是 一个硬件层面的产品,是一个集成了处理器核心、内存、接口和其他外设等功能的微处理器单元(MPU)。

功能与用途

  1. FreeRTOS
    • 功能:提供任务管理、时间管理、内存管理和通信机制等内核功能。
    • 用途:在嵌入式系统中实现多任务环境,管理多个独立功能的任务,提高系统的稳定性和效率。
  2. STM32
    • 功能:提供高性能、低功耗的计算能力,以及丰富的外设支持(如ADC、DAC、UART、SPI、I2C等)。
    • 用途:作为嵌入式系统的核心处理器,负责执行程序代码,控制外设,实现各种应用需求。

关系与配合

关系

       FreeRTOS可以运行在STM32等微控制器上,利用STM32提供的硬件资源来执行任务调度、同步和通信等功能。

配合

        在嵌入式系统开发中,STM32作为硬件平台,FreeRTOS作为软件框架,两者相互配合,共同实现系统的功能需求。

总的来说

        FreeRTOS和STM32在嵌入式系统开发中各有其独特的角色和用途。FreeRTOS作为软件层面的实时操作系统内核,提供了丰富的任务管理和同步通信功能;而STM32作为硬件层面的微控制器系列,提供了高性能、低功耗的计算能力和丰富的外设支持。在实际开发中,两者相互配合,共同构建出稳定、高效的嵌入式系统。

任务调度 

 抢占式调度(Preemptive Scheduling)

定义

       抢占式调度是一种基于任务优先级的调度方式。主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。

       当一个高优先级任务变为就绪状态时(例如,等待的事件发生或中断服务程序更改了任务优先级),调度器会暂停当前正在执行的低优先级任务,并将CPU控制权转交给高优先级任务。

       这种调度方式确保了紧急任务能够得到及时响应,提高了系统的实时性。

优点适用于实时性要求高的系统,能够确保高优先级任务及时响应。

缺点:上下文切换的开销较大,可能会影响系统的性能。

图解

  • 高优先级任务,优先执行
  • 高优先级任务不停止,低优先级任务无法执行 
  • 被抢占的任务将会进入就绪态

时间片调度(Time-Slicing Scheduling)

定义

        时间片调度是一种特殊的抢占式调度方式。它将CPU时间划分为固定长度的时间片,每个任务在一个时间片内运行。主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。

        当一个时间片结束时,无论任务是否完成,都会发生上下文切换,将CPU控制权转交给下一个任务(通常是具有相同优先级的下一个任务)。这种调度方式确保了每个任务都有机会在公平的时间段内运行,避免了某个任务长时间占用CPU。

优点:适用于多个任务优先级相近的场景,可以实现相对公平的CPU时间分配。防止了某个任务长时间占用CPU,保证了其他任务也有机会执行。

缺点:降低了系统的实时性(与抢占式调度相比)。

同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期 

  1. 同等优先级任务,轮流执行;时间片流转
  2. 一个时间片大小,取决为滴答定时器中断周期
  3. 注意没有用完的时间片不会再使用,下次任务Task3得到执行 还是按照一个时间片的时钟节拍运行

协作式调度(Cooperative Scheduling)

定义

       协作式调度依赖于任务自行释放CPU控制权。在协作式调度中,一旦一个任务开始执行,它将持续运行直到自己主动放弃CPU(如通过调用特定的函数)或进入阻塞状态(如等待事件或资源)。

        当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务 FreeRTOS现在虽然还支持,但是官方已经表示不再更新协程式调度

 

任务状态 

 

运行态(Running)

       正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态。任务具有CPU的控制权,正在执行其任务函数中的代码。

就绪态(Ready)

       如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态。当所有更高优先级的任务都执行完毕或CPU空闲时,就绪态的任务将被调度执行。

阻塞态(Blocked)

       任务在等待某个外部事件(如信号量、消息队列、事件组、系统延时等)时,无法继续执行,此时的状态被称为阻塞态。任务因为等待某个资源或事件而无法继续执行。

       当等待的事件到达或超时时间结束时,任务将自动退出阻塞态,并进入就绪态,准备再次被调度执行。

 挂起态(Suspended)

       类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume() 才可以进入就绪态。 任务被挂起后,不会占用CPU资源,也不会被调度器调用执行。

总的来说

  1. 仅就绪态可转变成运行态 
  2. 其他状态的任务想运行,必须先转变成就绪态

       FreeRTOS的四种任务状态(运行态、就绪态、阻塞态、挂起态)共同构成了任务调度和管理的基础。这些状态之间的转换遵循一定的规则和逻辑,确保了任务能够按照预定的规则进行切换和执行,从而实现了实时操作系统的高效性和可靠性。在FreeRTOS中,任务的状态管理是通过调度器来实现的,调度器会根据任务的优先级和状态来决定哪个任务应该被执行。 

 

和正点原子一起学习FreeRTOS ,接下来一个系列跟随正点原子

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

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

相关文章

python开发遇到的坑汇总

文章目录 1.点击导入操作,所有配置全没了 1.点击导入操作,所有配置全没了 在 PyCharm 中,如果你遇到了点击导入(import)操作后,项目似乎进行了重新安装或重新部署的情况,这通常不是由简单的导入…

在Linux上设置MySQL允许远程连接的完整指南

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

Vue3+Vite+TS+Axios整合详细教程

1. Vite 简介 Vite是新一代的前端构建工具,在尤雨溪开发Vue3.0的时候诞生。类似于Webpack Webpack-dev-server。其主要利用浏览器ESM特性导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用…

达梦数据库的系统视图v$sessions

达梦数据库的系统视图v$sessions 达梦数据库(DM Database)是中国的一款国产数据库管理系统,它提供了类似于Oracle的系统视图来监控和管理数据库。V$SESSIONS 是达梦数据库中的一个系统视图,用于显示当前数据库会话的信息。 以下…

数据结构(Java):LinkedList集合Stack集合

1、集合类LinkedList 1.1 什么是LinkedList LinkedList的底层是一个双向链表的结构(故不支持随机访问): 在LinkedList中,定义了first和last,分别指向链表的首节点和尾结点。 每个节点中有一个成员用来存储数据&…

Oracle 物化视图详解与实践

一.视图是什么? 普通视图只是存放在数据字典当中的子查询,本身没有数据,数据来源于基表,可以把普通视图当作编译好的sql语句。 二.物化视图是什么? 把查询到的数据存放起来,为了以后再次查询使用&#xff0…

NiFi1.25版本HTTPS模式下RestAPI使用入门

Apache NiFi 是一个强大的数据流处理工具,通过其 REST API,用户可以远程管理和控制数据流处理器。本文将介绍如何使用 NiFi 1.25 版本HTTPS 模式下Rest API,包括获取 token、获取组件信息、启动和停止组件、以及更改组件的调度频率等操作。 …

2.2动态库

动态库的特性 位置无关代码(PIC - position independent code) 库中的符号&#xff0c;不需要提前存储在可执行文件中&#xff0c;只有当链接时&#xff0c;可执行文件才会将需要的代码函数链接到内存中。 制作动态库 编写主函数 test.c #include<stdio.h> int main…

Java 设计模式系列:解释器模式

简介 解释器模式是一种行为型设计模式&#xff0c;它提供了一种构建抽象语法树的机制&#xff0c;并定义了如何解释这棵树。解释器模式属于编译原理中的语法制导翻译的范畴。 如上图&#xff0c;设计一个软件用来进行加减计算。我们第一想法就是使用工具类&#xff0c;提供对应…

优雅单片机之STM32C8T6----------程序下载(1)

0&#xff0c;C8T6系列 若想查看视频以及讲解&#xff0c;请查看B站或者抖音视频。 1&#xff0c;入门程序的下载&#xff08;本文&#xff09; 2&#xff0c;蓝牙控制&#xff08;待定&#xff09; 3&#xff0c;蓝牙小车&#xff08;待定&#xff09; 一&#xff0c;USB转…

springboot3 web

springboot web配置 springboot web的配置有&#xff1a; SpringMvc配置的前缀为&#xff1a;spring.mvcweb场景的通用配置为&#xff1a;spring.web文件上传的配置为&#xff1a;spring.servlet.multipart服务器相关配置为&#xff1a;server 接管SpringMVC 的三种方式 方…

深圳晶彩智能JC3636W518C开发环境Arduino IDE配置

深圳晶彩智能发布了JC3636W518C 这是一款中国制造的&#xff0c;铝合金外壳&#xff0c;价格非常震撼的开发板。原创是billbill的up播主萨纳兰的黄昏设计的ESP32太极小派&#xff0c;由深圳晶彩智能批量生产。 该款 LCD 模块采用 ESP32-S3R8 芯片作为主控,该主控是双核 MCU&…

Java File类(一) -- springboot项目根目录下进行文件的读取、写入与清空内容的操作

目录 1.存储的位置 2.FileOperationUtil工具类源代码 1.存储的位置 2.FileOperationUtil工具类源代码 import org.springframework.util.FileCopyUtils; import java.io.*; import java.nio.charset.StandardCharsets;/*** @ClassName FileOperationUtil* @Description 文件…

卡码网KamaCoder 101. 孤岛的总面积

题目来源&#xff1a;101. 孤岛的总面积 C题解&#xff1a;在卡码网KamaCoder 100. 岛屿的最大面积-CSDN基础上加了个孤岛flg进行修改 #include <iostream> #include <vector> #include <queue>#include <stdio.h> using namespace std;int res 0, t…

【2024_CUMCM】时间序列3-一元时间序列分析的模型

目录 时间序列的平稳性 弱平稳 白噪声序列 序列图 差分方程 滞后算子 AR(p)模型 概念 平稳 例子 MA(q)模型 ARMA(p,q) 自回归移动平均模型 平稳性 ACF自相关系数 PACF偏自相关函数 AR(1)模型图 MA(1)与AR(2)图 ARMA(1,1)图 ARMA模型的识别 ARMA模型的估计…

【计算机视觉】3D重建:使用MeshLab进行表面重建(以泊松重建为例)

一、MeshLab 1、简介 MeshLab是一款功能强大的开源三维网格处理软件&#xff0c;主要用于编辑、修复、简化和可视化三维三角形网格和点云数据。它支持PLY、STL、OBJ、3DS、COLLADA等多种常用的3D文件格式&#xff0c;提供了网格清理、修复、简化、纹理映射、参数化、布尔运算等…

多平台内网穿透工具-frp配置(下载安装、开机自启)

✨本教程使用Windows做客户端&#xff0c;Ubuntu做服务端。服务端需要能公网访问&#xff0c;可以去腾讯或者阿里购买vps。 本教程所采用的工具可在蓝奏云中下载。下载地址&#xff1a;https://wwt.lanzoue.com/b0fomaeta密码:1k1u frp官方文档地址&#xff1a;https://gofrp.o…

基于SSM的校园一卡通管理系统的设计与实现

摘 要 本报告全方位、深层次地阐述了校园一卡通管理系统从构思到落地的整个设计与实现历程。此系统凭借前沿的 SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架精心打造而成&#xff0c;旨在为学校构建一个兼具高效性、便利性与智能化的一卡通管理服务平台。 该系…

【问题项目】freeswitch的web界面YouPBX —— 筑梦之路

开源地址&#xff1a;GitHub - JoneXiong/YouPBX: A great GUI manager for FreeSwitch 说明&#xff1a;该项目是基于python 2.7django开发 这里主要记录下搭建使用过程 # 拉取代码git clone https://github.com/JoneXiong/YouPBX.gitgit clone https://github.com/JoneX…

Spring Web MVC入门(2)(请求1)

目录 请求 1.传递单个参数 2.传递多个参数 3.传递对象 4.后端参数重命名(后端参数映射) 非必传参数设置 5.传递数组 请求 访问不同的路径就是发送不同的请求.在发送请求时,可能会带一些参数,所以学习Spring的请求,主要是学习如何传递参数到后端及后端如何接收. 1.传递单…