FreeRTOS 入门 知识

什么是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.mzph.cn/news/871703.shtml

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

相关文章

麒麟系统开发笔记(十四):在国产麒麟系统上编译libmodbus库、搭建基础开发环境和移植测试Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140387947 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

Java--接口的定义与实现

1.Java的接口是一种约束 2.定义一些方法,让不同的人实现 3.方法都是 public abstract 4.常量都是public static final 5.接口不能被实例化: 接口中没有构造方法 6.接口可以多继承: 使用implements即可实现 7.必须要重写接口中的方法…

在家上网IP地址是固定的吗?

在数字化时代,互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都离不开网络的支持。然而,当我们在家中接入互联网时,可能会产生这样一个疑问:在家上网IP地址是固定的吗?下面一…

秋招Java后端开发冲刺——MyBatisPlus总结

一、 基本知识 1. 介绍 yBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上增加了大量功能和简化操作,以提高开发效率。 2. 特点 无侵入:只做增强不做改变,引入它不会对现有项目产生影响。依赖少:仅仅依赖 …

CV05_深度学习模块之间的缝合教学(1)

1.1 在哪里缝 测试文件?() 训练文件?() 模型文件?(√) 1.2 骨干网络与模块缝合 以Vision Transformer为例,模型文件里有很多类,我们只在最后…

嘉立创EDA隐藏地线或者

https://prodocs.lceda.cn/cn/pcb/side-panel-left-net/#%E9%A3%9E%E7%BA%BF

50+dfm模型素人网红路人实时直播替换DFLive模型dfm格式

作为一名直播达人,我投入了大量时间和精力在网上收集和购买各种直播所需的模型资源。这些资源不仅包括男模、女模,还有明星脸、大众脸、网红脸以及各类稀有的素人模型。为了回馈广大直播爱好者,我将这些宝贵资源整理成一个合集,供…

elasticsearch性能调优方法原理与实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

ROS1导航状态机与ROS2导航行为树

ROS1和ROS2导航框架中用到的各种底层算法基本相同&#xff0c;比如代价地图&#xff0c;全局路径规划和局部路径规划等&#xff0c;它们最大的不同在于整个系统框架设计。 一&#xff0c;ROS1 导航状态机 ROS1导航功能包move_base是一个状态机&#xff0c;从软件设计上来看&am…

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层&#xff1a;当SIP消息从网络中传输到达TCP/IP协议栈时&#xff0c;首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装&#xff0c;得到网络层的IP数据报。 网络层&#xff1a;网络层会对IP数据报进行解析&#xf…

【GDCPC2024】【min_25筛】J.另一个计数问题

题目 传送门 思路 考场上的思路和正解差远了&#xff0c;属实是反演学魔怔了。 首先&#xff0c;对于所有的 x x x&#xff0c;它可以通过 2 x 2x 2x 和 2 2 2 连通&#xff0c;而 2 2 2 又可以和所有 m i n p ≤ ⌊ n 2 ⌋ minp\leq \left\lfloor\frac{n}{2}\right\…

浏览器插件利器--allWebPluginV2.0.0.16-alpha版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持chrome、FireFo…

江协科技51单片机学习- p27 I2C AT24C02存储器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

Wikijs 部署教程

以下是一个 Wikijs 部署的简单教程&#xff0c;涵盖了使用 Docker 和直接安装两种方式&#xff1a; 方法一&#xff1a; 使用 Docker (推荐) Docker 是一个方便快捷的方式来部署 Wikijs&#xff0c;它可以避免许多手动配置步骤。 安装 Docker: 按照 https://docs.docker.com/…

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包&#xff0c;它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器&#xff08;javac&#xff09;、Java 运行时环境&…

【已解决】如何在一篇笔记中呈现另一篇笔记的内容,hover editor插件?obsidian

问题 问题&#xff1a;【已解决】如何让一篇笔记内容在另一篇的笔记里呈现&#xff1f; - 疑问解答 - Obsidian 中文论坛 如何在一篇笔记里&#xff0c;在插入内链接时&#xff0c;同时展示内链接的笔记中的内容&#xff1f; 比如&#xff1a; 哲学是一门[[学问]]这篇笔记…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(3)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案&#xff08;第1批次&#xff09;&#xff08;3&#xff09; 第41题&#xff1a;在应用集成中&#xff0c;有多个组件帮助协调连接各种应用。其中&#xff08;&#xff09;利用特定的数据结构&#xff0c;帮助开发人…

电脑硬盘里的文件能保存多久?电脑硬盘文件突然没了怎么办

在数字化时代&#xff0c;电脑硬盘作为我们存储和访问数据的重要设备&#xff0c;承载着无数珍贵的回忆、工作成果和创意灵感。然而&#xff0c;硬盘里的文件能保存多久&#xff1f;当这些文件突然消失时&#xff0c;我们又该如何应对&#xff1f;本文将深入探讨这两个问题&…

13-《鸭跖草》

鸭跖草 鸭跖草&#xff0c;拉丁学名&#xff1a;&#xff08;Commelina communis&#xff09;&#xff0c;别名碧竹子、翠蝴蝶、淡竹叶等。属粉状胚乳目、鸭跖草科、鸭跖草属一年生披散草本。鸭跖草叶形为披针形至卵状披针形&#xff0c;叶序为互生&#xff0c;茎为匍匐茎&…

实验发现AI提高了个人创造力,但降低了整体创造力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…