FreeRTOS的介绍

news2024/11/18 13:53:03

FreeRTOS介绍

本文主要涉及RTOS的相关内容
1.RTOS与裸机的区别
2.RTOS的架构与特点
3.任务调度
4.任务状态

文章目录

  • FreeRTOS介绍
    • 一、RTOS与裸机的区别
    • 二、FreeRTOS 简介
      • 2.1 特点
      • 2.2 架构
      • 2.3 应用领域
      • 总结
    • 三、 任务调度
      • 3.1 基本原理
      • 3.2 调度策略
      • 3.3 实现方式
    • 四、 任务状态

一、RTOS与裸机的区别

裸机(Bare Metal)和RTOS(Real-Time Operating System)是嵌入式系统中常见的两种软件开发方式,它们在特点上有明显的区别。

  1. 裸机

    • 直接访问硬件:裸机编程直接对硬件进行编程,开发人员需要直接操作寄存器和外设来实现功能。
    • 无操作系统支持:裸机编程通常不依赖于操作系统,程序运行在处理器上的裸机环境中,没有操作系统提供的抽象层。
    • 资源利用率高:由于没有操作系统的开销,裸机程序通常具有更高的资源利用率,可以更好地控制系统的性能和功耗。
    • 定制化程度高:裸机编程适合对系统性能要求较高,对资源利用率和响应时间有严格要求的应用场景。

    举例:在裸机编程中,如果要控制一个LED的亮度,可能需要直接操作微控制器的GPIO寄存器来设置LED的亮度等级,而不依赖于操作系统的抽象接口。

  2. RTOS

    • 多任务支持:RTOS提供多任务支持,可以同时运行多个任务,通过任务调度器来管理多个任务的执行顺序和优先级。
    • 抽象层:RTOS提供了抽象层,简化了对硬件的访问,开发人员可以使用RTOS提供的接口来访问硬件资源,而无需直接操作寄存器。
    • 实时性:RTOS通常具有实时性,能够满足对任务响应时间有严格要求的应用场景。
    • 灵活性:RTOS提供了丰富的功能模块,如任务管理、内存管理、定时器、消息队列等,使得开发人员能够更灵活地组织和管理代码。

    举例:在使用RTOS开发一个嵌入式系统时,可以将系统划分为多个任务,比如一个任务负责处理用户输入,另一个任务负责控制外设,RTOS会负责管理这些任务的执行,根据任务的优先级和时间要求进行调度。

总体而言,裸机编程适用于对性能和资源利用率有严格要求的场景,而RTOS适用于需要多任务支持和实时性能的应用场景。选择裸机还是RTOS开发取决于具体的应用需求和开发人员的偏好。

二、FreeRTOS 简介

FreeRTOS是一个免费开源的实时操作系统(RTOS),由英国工程师Richard Barry创建,并由Real Time Engineers Ltd.维护。它是一个轻量级的实时操作系统,广泛用于嵌入式系统的开发。以下是对FreeRTOS的详细介绍:

2.1 特点

  1. 免费开源:FreeRTOS遵循MIT许可证,可以免费用于商业和非商业项目,并且开放源代码,使得开发人员可以自由地查看、修改和定制源代码。

  2. 轻量级:FreeRTOS设计精简,内核代码量小,占用系统资源少,适合于资源受限的嵌入式系统。

  3. 多任务支持:FreeRTOS支持多任务并发执行,通过任务调度器来管理任务的执行顺序和优先级,实现多任务之间的协作和调度。

  4. 优先级调度:FreeRTOS支持任务的优先级调度,可以根据任务的优先级动态调整任务的执行顺序,确保高优先级任务能够及时得到执行。FreeRTOS有32个优先级,0-31.优先级越高,所分配的优先级数值越大。注意与stm32的中断区分:中断是优先级越高,数值越小。

  5. 实时性:FreeRTOS具有实时性能,能够满足对任务响应时间有严格要求的应用场景。

  6. 可移植性:FreeRTOS提供了可移植的代码,支持多种不同的处理器架构和开发环境,包括ARM Cortex-M系列、AVR、PIC、MSP430等。

  7. 丰富的功能模块:除了任务调度外,FreeRTOS还提供了丰富的功能模块,如定时器、信号量、消息队列、事件组等,使得开发人员能够更灵活地组织和管理代码。

  8. 低功耗支持:FreeRTOS能够有效地管理系统资源,支持低功耗模式,适用于对功耗有严格要求的应用场景。

2.2 架构

FreeRTOS的架构主要包括以下几个组件:

  1. 内核(Kernel):包含任务调度器和其他核心功能模块,负责管理任务的创建、删除、调度等操作。

  2. 任务(Task):RTOS中的最基本的执行单元,相当于一个独立的线程,可以并发执行。

  3. 定时器(Timer):用于定时触发事件或任务,可以在指定的时间间隔内执行特定的操作。

  4. 信号量(Semaphore):用于实现任务之间的同步和互斥访问共享资源。

  5. 消息队列(Queue):用于任务之间的消息传递和通信。

  6. 事件组(Event Group):用于管理和同步多个事件的状态。

2.3 应用领域

FreeRTOS广泛应用于各种嵌入式系统中,包括但不限于:

  • 汽车电子系统
  • 工业自动化控制
  • 医疗设备
  • 智能家居
  • 通信设备
  • 消费电子产品等。

总结

FreeRTOS作为一款免费开源、轻量级、可移植、实时性好的RTOS,为嵌入式系统的开发提供了可靠的基础。它的灵活性和丰富的功能模块使得开发人员能够更轻松地构建复杂的嵌入式应用。

三、 任务调度

任务调度是实时操作系统(RTOS)中的一个核心概念,它负责管理系统中多个任务的执行顺序和优先级,以确保系统资源的合理利用和任务的及时响应。以下是对任务调度的介绍:

3.1 基本原理

  1. 任务:RTOS中的任务是系统中最基本的执行单元,类似于线程,在RTOS中通常称为任务(Task)。每个任务都有自己的代码段和堆栈空间。

  2. 任务状态:任务可以处于运行态、就绪态或阻塞态。运行态表示任务正在执行,就绪态表示任务已经准备好可以执行但还未获得执行的机会,阻塞态表示任务由于某种原因暂时无法执行。

  3. 任务调度器:任务调度器是RTOS的核心组件之一,负责决定哪个任务可以执行。任务调度器根据任务的优先级和调度策略来决定当前执行哪个任务。

  4. 上下文切换:任务调度器通过上下文切换(Context Switching)来实现任务之间的切换。当一个任务被挂起或者需要切换到另一个任务时,任务调度器会保存当前任务的上下文(包括程序计数器、堆栈指针等状态),然后加载下一个任务的上下文,使得下一个任务可以继续执行。

3.2 调度策略

  1. 抢占式调度:根据任务的优先级来确定任务的执行顺序,优先级高的任务会先被执行。优先级调度可以保证高优先级任务的及时响应,但可能导致低优先级任务饥饿(即长时间得不到执行)的问题。被抢占的任务会进入就绪态。

  2. 时间片调度:每个任务被分配一个时间片(Time Slice),在时间片用完之后,任务会被挂起,然后调度器会选择下一个任务执行。轮转调度可以保证任务之间的公平性,但可能导致任务切换的开销较大。–同等优先级任务轮流地享有相同的CPU时间(可设置)叫时间片。一个时间片就等于Sys Tick中断周期。注意一个任务没有使用完的时间片不会再使用,下次执行该任务还是一个时间片的时间。

  3. 抢占式调度:任务可以被更高优先级的任务抢占,即使当前任务没有执行完毕。抢占式调度可以保证高优先级任务的及时执行,但需要考虑任务切换的开销和上下文切换带来的系统负担。

3.3 实现方式

  1. 基于时间片的调度器:按照时间片分配任务的执行时间,常见于轮转调度策略。

  2. 基于优先级的调度器:根据任务的优先级确定执行顺序,通常采用抢占式调度策略。

  3. 协程式调度:当前执行任务 将会一直执行,同时高优先级的任务不会前瞻低优先级任务。Freertos现在虽然还支持,但是官方表示不在更新协程式调度。

四、 任务状态

FreeRTOS中的任务有四个状态,它们分别是:

  1. 就绪态(Ready)

    • 任务已经创建并初始化完成,具备执行的条件,但还未获得CPU执行的机会。当任务处于就绪态时,RTOS的调度器会根据任务的优先级和调度策略来确定下一个需要执行的任务。
  2. 运行态(Running)

    • 任务正在执行,处于CPU执行的状态。只有一个任务可以处于运行态,即当前正在被CPU执行的任务。注意在STM32中仅有一共任务处于运行态。
  3. 阻塞态(Blocked)

    • 任务由于某种原因暂时无法执行,例如等待事件等待信号量等待消息队列等。当任务处于阻塞态时,它不会被调度执行,直到满足特定的条件才能从阻塞态转移到就绪态
  4. 挂起态(Suspended)

    • 任务被挂起,暂时停止执行不参与调度。任务可以被手动挂起或者由其他任务或中断引发的操作导致任务被挂起。被挂起的任务不会被调度执行,直到被明确地恢复到就绪态。

这四个任务状态在FreeRTOS中用于描述任务的不同执行状态,任务会在这些状态之间转换,RTOS的调度器负责根据任务状态的变化来决定任务的执行顺序和时机,以实现多任务的协作和调度。

在这里插入图片描述

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

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

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

相关文章

spring cloud 限流熔断配置

springcloud 微服务网关 zuul.strip-prefixtrue zuul.routes.postgres-client.path /ps01/** zuul.routes.postgres-client.service-idpostgres-client zuul.routes.postgres-client02.path/ps02/** zuul.routes.postgres-client02.service-idpostgres-client02 zuul.semaphor…

主流公链 - BSC

探索Binance Smart Chain (BSC) 区块链:实现高性能的智能合约平台 1. BSC 简介 Binance Smart Chain (BSC)是由全球领先的加密货币交易平台币安(Binance)推出的智能合约平台。它旨在为开发者提供高性能、低成本的区块链基础设施,…

助力福建新型职业农民培育 北方天途推进无人机植保应用培训

为加强新型职业农民的职业培育,扩展新型农民的知识范围和专业技术水平,推进农业供给侧结构性改革。日前,在农业部门的大力支持下,北方天途航空和宁德天禾科技服务携手为福建省农民朋友开展了植保无人机驾驶员的应用培训。福建省农…

数据分析面试题(41~50)

41、lstm的原理、lstm和rnn的区别 ①LSTM是一种常用于处理序列数据的循环神经网络(RNN)架构,特别适用于长序列的建模。其主要特点是通过门控机制来控制信息的流动,从而有效地解决了传统RNN在处理长序列时的梯度消失或爆炸的问题。…

【Java程序设计】【C00374】基于(JavaWeb)Springboot的社区疫情管理系统(有论文)

TOC 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,博客中有上百套程序可供参考,欢迎共同交流学习。 项目简介 项目获取 🍅文末点击卡片…

【数据分享】1929-2023年全球站点的逐日平均压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

【gitee】设置忽略文件.gitignore的方法

已经提交在 gitee 上的文件&#xff0c;再设置忽略文件.gitignore&#xff0c;怎么成立 忽略已经提交的文件&#xff0c;可以使用以下命令将这些文件从Git中移除&#xff08;但是保留在本地文件系统中&#xff09;&#xff1a; git rm --cached <file_name>//例&#x…

揭秘YouTube视频世界:利用Python和Beautiful Soup的独特技术

介绍 YouTube作为全球最大的视频分享平台&#xff0c;每天有数以亿计的视频被上传和观看。对于数据分析师、市场营销人员和内容创作者来说&#xff0c;能够获取YouTube视频的相关数据&#xff08;如标题、观看次数、喜欢和不喜欢的数量等&#xff09;是非常有价值的。本文将介…

iOS - Runtime - Class的结构

文章目录 iOS - Runtime - Class的结构前言1. Class的结构1.1 Class的结构1.1.1 objc_class1.1.2 class_rw_t1.1.3 class_ro_t 1.2 class_rw_t和class_ro_t的区别1.3 class_rw_t和class_ro_t的关系1.3.1 分析关系1.3.2 原因 1.4 method_t1.4.1 Type Encoding1.4.2 types iOS - …

双亲委派机制总结

回顾了一下双亲委派机制&#xff0c;在这记录记录&#xff0c;下一篇会基于打破双亲委派机制来更新 1. 类加载&#xff1a; 多个java文件经过编译打包后生成可运行jar包&#xff0c;最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…

Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能

文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;…

华为云服务器租用价格_云服务器优惠活动_2024年新版报价

2024年华为云服务器租用价格表&#xff0c;云服务器优惠价格35元一年&#xff0c;配置为1核2G1M带宽HECS云服务器、L实例-2核2G3M配置46元1年、4核16G10M华为云服务器24元一个月、2核4G5M服务器158元一年&#xff0c;3年1010元、华为云香港服务器99元一年、增强型C7云服务器4核…

ReActor丨一文教你学会用Stable Diffusion插件换脸

本教程将带您了解如何下载和使用 stable diffusion 的 ReActor扩展&#xff0c;实现完美的换脸效果。 ReActor 是一个强大的工具&#xff0c;允许您无缝地交换面孔并获得逼真的效果。 无论您是艺术家、内容创作者&#xff0c;还是仅仅想要体验图像操作的乐趣&#xff0c;这份…

纯前端网页播放20路海康威视、大华RTSP视频流,调用双显卡GPU加速

关于网页播放摄像头RTSP视频流&#xff0c;网上有很多免费开源方案&#xff0c;大多数是通过把在服务器端RTSP转码成HLS或者RTMP等前端可以播放的视频流&#xff0c;然后推到前端播放&#xff0c;但是大多数延迟非常高&#xff08;比如&#xff1a;HLS延迟达到十几秒&#xff0…

Python - 生成可执行文件.exe(附操作完整流程)

文章目录 一、打包工具 - pyinstaller1.1 pyinstaller 原理 二、pyinstaller 安装2.1 管理员身份运行“CMD”-命令提示符2.2 安装2.3 查询是否安装成功 三、pyinstaller 打包可执行文件3.1 进入需要打包的脚本目录3.2 打包脚本3.3 打包结果 四、总结 一、打包工具 - pyinstalle…

Chrome 插件各模块之间的消息传递

Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输插件和插件之间的信息传输网页向插件进行信息传输与原生应用进行消息传递 2. 消息传递 API runtime API runtime.sendMessage(…

文件操作函数

目录 前言 一、顺序读写函数 1、fgetc 和 fputc 2、fgets 和 fputs 3、fprintf 和 fscanf 4、sscanf 和 sprintf 5、fwrite 和 fread 二、随机读写函数 1、fseek 2、ftell 3、rewind 前言 本章我们学习一下文件操作相关的各种函数 一、顺序读写函数 1、fgetc 和 fpu…

【小黑送书—第十四期】>>重磅升级——《Excel函数与公式应用大全》(文末送书)

今天给大家带来AI时代系列书籍&#xff1a;《Excel 2019函数与公式应用大全》全新升级版&#xff0c;Excel Home多位微软全球MVP专家打造&#xff0c;精选Excel Home海量案例&#xff0c;披露Excel专家多年研究成果&#xff0c;让你分分钟搞定海量数据运算&#xff01; 由北京…

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; 建立一个新的函数&#xff0c;用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题&#xff0c;建立新的函数来传参 多采用使用反对值的方法&#xff0c;因为如果是相等return true的话&am…

单臂路由和三层交换机

目录 一.单臂路由 1.单臂路由的工作原理 2.单臂路由的配置 2.1画出拓扑图 2.2配置PC 2.3配置交换机 2.4配置路由器 2.5测试 二.三层交换机 1.三层交换机的概述 2.三层交换机的配置 2.1画出拓扑图 2.2配置PC 2.3配置二层交换机 2.4配置三层交换机 2.5测试 3.拓展 三.总结 一.…