FreeRTOS系统解析-1、FreeRTOS系统简介

2023-05-16

1、系统简介

不同的的多任务系统有不同的侧重点。以工作站和桌面电脑为例:

早期的处理器非常昂贵,多以那时的多任务用于实现在单处理器上支持多用户。这类系统中的调度算法侧重于让每个用户“公平共享”处理器时间。

随着处理器的功能越来越强大,价格越来越便宜,所以每个用户都可以独自拥有一个甚至多个处理器。这时候系统的调度算法则设计为让用户可以同时运行多个应用程序,而且计算机也不会显得迟钝。例如:某个用户可能同时运行了一个Word程序,一个Excel,一个邮件客户端,一个WEB浏览器,并且要求每个应用程序对输入有足够快的响应时间。

通用个人PC的输入处理可归类为“软实时”。为了保证用户的最佳使用体验,计算机对每个输入的响应应该限定在一个恰当的时间范围——但是如果响应时间如果超出了这个限定的范围,并不会让人感觉这台电脑没办法使用。例如,键盘操作必须在按下后的某个时间内做出明显的提示。但是如果按键提示超出了这个时间,会使人觉得这个系统响应太慢,而不至于说这台电脑不能使用。

仅仅从单处理器运行多线程这一点来说,实时嵌入式系统中的多任务与通用个人PC的多任务从概念上来讲是相似的。但是实时嵌入式系统的侧重点却不同于通用个人PC——特别是当嵌入式系统期望提供“硬实时”行为的时候。

硬实时功能必须在给定的时间限制内完成,如果没有做到就意味着整个系统的的绝对失败。汽车安全气囊的触发机制就是硬实时系统功能的例子。安全气囊在撞击发生后给定的时间限制内必须弹出。如果响应时间超出了这个时间的限制,会使得车内人员受到伤害,而这正是安全气囊所要防止的。

绝大多数嵌入式系统不仅要求能满足硬实时的要求,也要求能满足软实时的要求。

2、使用系统弊端

  • 大多数RTOS代码都具有一定规模,任何代码都可能带来BUG,何况是代码具有一定规模的RTOS,因此引入RTOS的同时也可能会引入该RTOS的BUG,这些RTOS本身的BUG一旦被触发,影响可能是是灾难性的。
  • 熟练的使用RTOS是一项技能,需要专业的知识储备和长期的经验积累。不将RTOS分析透彻,很容易为项目埋下错误。典型的,像中断优先级、任务堆栈分配、可重入等,都是更容易出错的地方。
  • RTOS的优先级嵌套使得任务执行顺序、执行时序更难分析,甚至变成不可能。任务嵌套对所需的最大堆栈RAM大小估计也变得困难。这对于很多对安全有严格要求的场合是不可想象的。
  • RTOS应该用于任务复杂的场合,以至于对任务调度的需求可以抵消RTOS所带来的稳定性影响,但大部分的应用并非复杂到需要RTOS。

3、使用系统优势

对于现代的微处理器,特别是资源相对丰富ARM7、Cortex-M3硬件来说,RTOS占用的硬件资源已经越来越可以忽略。所以在当今环境下,我们无需担心RTOS会拖累性能。相反,RTOS提供的事件驱动型设计方式,使得RTOS只是在处理实际任务时才会运行,这能够更合理的利用CPU。在实际项目中,如果程序等待一个超时事件,传统的无RTOS情况下,要么在原地一直等待而不能执行其它任务,要么使用复杂(相对RTOS提供的任务机制而言)的状态机机制。如果使用RTOS,则可以很方便的将当前任务阻塞在该事件下,然后自动去执行别的任务,这显然更方便,并且可以高效的利用CPU。处理这类事件,是使用RTOS的最大动力。

4、常见的嵌入式操作系统

近两年嵌入式市场调查报告显示常用的RTOS有:FreeRTOS、uC/Os-II、Injouse/custom、Linux、Ubuntu、Android、uC/Os-III、RTX等。

STM32能运行什么操作系统?

首先操作系统有两种:一种用MMU(Memory Managenent Unit,即存储管理单元)的,另一种是不用MMU的。

用MMU的是Windows、MacOS、Linux、Android。

不用MMU的是FreeRTOS、VxWorks、ucLinux、uc/OS。

其次CPU也有两种:带MMU和不带MMU的

带MMU的有 Cortex-A、ARM9 、ARM11系列。不带MMU的有 Cortex-M系列

而我们知道STM32是 Cortex-M3系列的…所以目前还不可能运行Linux操作系统,但是STM32可以运行uc/OS、ucLinux、FreeRTOS 、VxWorks等操作系统。其中uc/OS操作系统是开源代码,且小巧而严谨,具有很高的实时性,可以作为学习linux等高级操作系统的基础,实际项目中也经常使用uc/OS开发。

5、为什么选用FreeRTOS

  •  SafeRTOS便是基于FreeRTOS而来,前者是经过安全认证的RTOS,因此对于FreeRTOS的安全性也有了信心。
  • 大量开发者使用,并保持高速增长趋势。2011、2012、2013、2014、2015连续5年的EEtimes杂志嵌入式系统市场报告显示,FreeRTOS在RTOS内核使用榜和RTOS内核计划使用榜上都名列前茅。更多的人使用可以促进发现BUG,增强稳定性。
  • 简单。内核只有3个.c文件,全部围绕着任务调度,没有任何其它干扰,便于理解学习。而且,根本不需要其它繁多的功能,只要任务调度就够了。
  • 文档齐全。在FreeRTOS官方网站上,可以找到所有你需要的资料。
  • 免费、开放源码。完全可以免费用于商业产品,开放源码更便于学习操作系统原理、从全局掌握FreeRTOS运行机理、以及对操作系统进行深度裁剪以适应自己的硬件。学习的资料来源主要是FreeRTOS的官方网站(www.freertos.org)和源代码。

 2010和2011年RTOS使用榜

 2012和2013年RTOS使用榜

 2013年和2014年RTOS使用榜

 2014年和2015年RTOS使用榜

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS系统解析-1、FreeRTOS系统简介 的相关文章

  • 四旋翼姿态解算

    代码思路如下 xff1a 姿态解算 void IMU update float dT imu state st state float gyr VEC XYZ s32 acc VEC XYZ s16 mag val VEC XYZ imu
  • 树莓派4B-基于MCP2515的CAN通信过程记录篇

    本文主要记录使用树莓派4B xff0c 通过外接MCP2515模块来实现CAN通信 xff0c 使用基于Can utils实现CAN消息的收发 准备工作 xff1a 树莓派MCP2515模块杜邦线若干 知乎上一篇较为详细的参考 xff0c
  • nuxt踩坑集

    目录结构 assets 资源文件 用于组织未编译的静态资源如 LESS SASS或 JavaScript components 组件 layouts page 模板页面 xff0c 默认为 default vue可以在这个目录下创建全局页面
  • 记录个人在安装D435i驱动时出现的问题及解决方案

    目录 1 驱动安装 xff1a 2 启动Intel RealSense Viewer后报错No Frames Recevied 3 Record时报错Error opening file 1 驱动安装 xff1a 参考这篇博客 xff1a
  • 深度学习常见的优化算法

    文章目录 1 梯度下降算法 xff08 batch gradient descent BGD 2 随机梯度下降法 xff08 Stochastic gradient descent SGD 3 小批量梯度下降 Mini batch grad
  • vscode如何链接github

    1 首先安装配置好vscode xff1a https code visualstudio com download 然后下载git xff1a https git scm com download 根据自己的电脑选择相应的版本的下载就好了
  • 串口(uart)开发流程

    UART概述 UART全称 xff0c Universal Asynchronous Receiver and Transmitter UART xff0c 一般是每个单片机或开发板必备的一个功能模块 xff0c 可以用来调试 xff0c
  • *33.硬中断和软中断是什么?区别?

    1 硬中断 硬件中断 像磁盘 xff0c 网卡 xff0c 键盘 xff0c 时钟等 2 软中断 软件中断 进程产生 区别 xff1a xff08 产生机制 处理顺序 可否屏蔽 中断信号由来 xff09 1 软中断的发生的时间是由程序控制的
  • gazebo学习时遇到的问题(PX4篇)

    最近在研究如何使用UAV xff0c 由于是初学者 xff0c 不好直接上手实体无人机 xff0c 因此考虑通过在gazebo中模拟的方式进行一下无人机的简单使用模拟 xff0c 于是了解到了PX4这个东西 xff0c 他不仅支持固件写入
  • 阿里云服务器的搭建和部署(小白教程)

    阿里云服务器的搭建和部署 xff08 小白教程 xff09 一 购买服务器二 管理云服务器三 环境配置1 JDK的配置与下载2 tomcat的配置与下载3 MySQL的安装与配置 四 外网访问服务器 个人推荐阿里云 因为里面有一个大学生的云
  • 一篇带你搞懂Python3 中的 def __init__

    在学习python 100 days时 xff0c 在面向对象编程基础的那一块 xff0c 封装一个class时 xff0c 突然出现def init 的方法 xff0c 刚开始时 xff0c 对他的理解很模糊 xff0c 为什么定义一个类
  • 时间序列异常检测综述

    1 Introduction 时序异常检测几个可以运用的点 xff1a 1 欺诈检测 2 工业数据检测 简介一下 xff1a 异常检测很久之前就有了 最早可以追溯到 J Fox 1972 Outliers in Time Series Jo
  • Linux基础----Makefile(1)

    前言 刚开始学习Linux xff0c 这些那真的是新知识 xff0c 由于感觉将来FPGA的学习会越来越靠近软件的方向发展 xff0c 所以觉得有必要好好地学习一下嵌入式的东西 xff0c 因此有必要把学习的过程记录下来 xff0c 方便
  • 【OpenCV】ChArUco标定板角点的检测Detection of ChArUco Corners

    opencv3 4 15源文档链接 link ChArUco标定板角点的检测 GoalSource codeCharuco板创建ChArUco板检测ChArUco姿势估计 ArUco标记和板的快速检测和多功能性是非常有用的 然而 xff0c
  • 错误 MSB3721

    错误 MSB3721 命令 C Program Files NVIDIA GPU Computing Toolkit CUDA v10 2 bin nvcc exe gencode 61 arch 61 compute 30 code 61
  • 倒立摆状态反馈控制——分析、建模与仿真(matlab)

    倒立摆状态反馈控制 引言 倒立摆是机器人学中一个非常重要的模型 xff0c 火箭 导弹 独轮车 双足机器人 四足机器人 xff0c 基本都是倒立摆的变形 问题描述 关于倒立摆的问题描述如下 xff1a 如图所示的倒立摆系统 摆的关节连接在一
  • docker pull rabbitmq:management 怎样指定版本

    docker pull rabbitmq 3 8 1 management
  • git 命令学习

    git 命令学习 git clone https github com zhaji01 notes git 克隆远程仓库 git status 本地仓库状态 git add lt file gt 把修改 xff08 包括创建 修改 删除 解
  • 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信

    文章目录 工具步骤 工具 工具 xff1a 自己电脑双系统的ubuntu18 04 单片机esp8266 一个usb转ttl模块 xff0c ubuntu上已经下载了python的3 6和pip xff0c 还需要pip install s
  • 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件

    实验图片和前期准备 xff1a ubuntu作为服务端 xff0c windows客户端传输数据和文件 xff1a windows作为服务端 xff0c ubuntu作为客户端 xff1a 实验图片和前期准备 xff1a 服务端发送和接受i

随机推荐

  • 过程记录 yolov3目标检测输出目标坐标和原图物体像素坐标比较

    设备 xff1a jetsonnano B01 一个usb广角摄像头 语言为python 库为opencv 框架pytorch 大家都知道yolov3的坐标变换过程比较复杂 xff0c 大概要经过图片缩放 xff0c 对数空间变换等等 xf
  • Rt-Thread学习笔记-----信号量(五)

    线程间同步 1 什么是线程间同步 xff1f 同步是指按预定的先后次序进行运行 xff0c 线程同步是指多个线程通过特定的机制来控制线程之间的执行顺序 xff0c 也可以说是在线程之间通过同步建立起执行顺序的关系 xff0c 如果没有同步
  • C++类和对象——空指针访问成员函数

    C 43 43 中空指针也是可以访问成员函数的 xff0c 但是也要注意有没有用到this指针 xff1b 如果用到this指针 xff0c 需要加以判断保证代码的健壮性 span class token macro property sp
  • nodejs实现简单的自动化部署

    如题 xff0c nodejs通过码云提供的web hooks实现简单的服务器自动部署 大致流程 xff1a 1 通过码云提供的web hooks xff0c 创建一个request通过后的回调接口 xff08 说白了就是配置一个码云审批通
  • 2022届春招实习面经(CV岗)——offer经

    已拿offer公司 xff1a 腾讯 ponyai vivo研究院 华为 字节 面了一面就没继续面了 xff1a 海康威视 虎牙 京东 本科211 xff0c 硕士985 二区在投论文 43 顶会下的top5比赛 43 小厂三个月实习经历
  • LeetCode刷题笔记 --- python

    目录 一 python交换两个变量的值1 1 使用tuple1 2 使用临时变量temp 二 python中 和 区别三 python列表的使用3 1 列表的基本操作3 2 列表实现栈操作3 3 列表实现排序3 4 列表的算法效率 四 py
  • 无人机高度控制

    这个第一次看就完全没看懂 xff0c 现在再看还是没看懂orz xff0c 而且定高还是重要的功能和考点 xff0c 详细分析一下程序吧 首先是表示高度信息的结构体 xff1a 数据结构声明 typedef struct float Z S
  • ssh_exchange_identification: Connection closed by remote host

    ssh exchange identification Connection closed by remote host 导致这个问题的原因有很多 xff0c 笔者是因为在ssh中设置了代理 xff0c 这个可以作为阅读者排查问题的一个点
  • 匿名无人机飞控代码整理5

    先跳过高度部分 xff0c 这里看location部分 可以看出来这部分也是直接与我们的循迹 追踪任务相关的 所以这部分的掌握应该很重要把 前面有很多暂时不需要看 xff0c flyctrl那个巨长 所以就先看速度环控制部分了 if swi
  • 匿名无人机飞控代码整理

    看了半天 xff0c 各部分都看得都很零散 xff0c 写的也很简略 xff0c 但目前为止还是无法对系统各部分做具体一点的整合 xff0c 今天试试看 1 先从主函数起 xff0c 进入主轮询函数 Main Task 这个主函数的调用就在
  • 一直没看的无人机定高

    除了定高的部分 xff0c 其他没看的还有一些控制函数 定高的原理的话 xff0c 也是利用了两级pid xff0c 按照原本的理解 xff0c 从外环开始看的话 xff0c 反馈高度比较容易获得 xff0c 就是激光测距得到的高度 期望高
  • 匿名无人机代码FlightCtrl简单分析

    这个flightCtrl文件 xff0c 是真的很长又很难 各种标志位啊 xff0c 判断啊 xff0c 开关啊 xff0c 逻辑判断啊什么的 xff0c 趁通宵把代码梳理一遍 这个文件里的函数虽不算最多 xff0c 但引用的头文件相当多
  • 简历—项目经验范例

    xff08 看着比较专业的一份项目经验样板 xff09 原文链接https mp weixin qq com s rxGTTVKryvYoyst jsayLw 项目一 米乐淘网上商城 项目名称 xff1a 米乐淘网上商城 开发环境 xff1
  • 家庭网络和路由器

    1 什么是家庭网络 xff1f 一个典型的家庭网络由多个设备组成 xff0c 且几乎所有的家庭网络都有一个路由器作为它们的中心设备 路由器连接到 Internet 连接 xff0c 然后与本地网络上的一台或多台计算机共享该连接 家庭网络通常
  • ROS动态调整PID

    64 动态调整PID ROS提供了一个专门用于动态调整参数的功能包dynamic reconfigure 它实现了动态配置参数的机制 我们先来创建一个功能包 添加相应的一些依赖 cd catkin ws src catkin create
  • CubeMX配置串口的程序烧入板子不跑的解决方法

    对于cubeMX配置串口 xff0c keil5编译通过的 xff0c 自己确定无问题的程序 xff0c 以ISP烧入 xff0c 烧入板子后无法运行的情况 xff0c 我暂时的解决策略是按住reset键点击 开始编程 xff0c 点击后松
  • realsense D455+ROS+OpenCV4.5完成目标距离检测

    ROS OpenCV 1 环境配置 1 1 realsense SDK2 0安装 通过官网找到最新的SDK包并下载 Intel RealSense SDK 2 0 解压安装包 xff08 librealsense 2 47 0 tar gz
  • 什么是 PID 控制器:工作原理及其应用

    什么是 PID 控制器 xff1a 工作原理及其应用 什么是PID控制器 xff1f 历史PID控制器框图PID控制器的工作P 控制器I 控制器D 控制器 PID控制器的类型开 关控制比例控制标准型PID控制器实时 PID 控制器 调优方法
  • 什么是缓冲区

    1 什么是缓冲区 缓冲区又称为缓存 xff0c 它是内存空间的一部分 也就是说 xff0c 在内存空间中预留了一定的存储空间 xff0c 这些存储空间用来缓冲输入或输出的数据 xff0c 这部分预留的空间就叫做缓冲区 缓冲区根据其对应的是输
  • FreeRTOS系统解析-1、FreeRTOS系统简介

    1 系统简介 不同的的多任务系统有不同的侧重点 以工作站和桌面电脑为例 xff1a 早期的处理器非常昂贵 xff0c 多以那时的多任务用于实现在单处理器上支持多用户 这类系统中的调度算法侧重于让每个用户 公平共享 处理器时间 随着处理器的功