(一)了解Freertos

2023-05-16

关于Freertos

FreeRTOS非常适合使用微控制器或小型微处理器的深度嵌入式实时应用程序。这种类型的应用程序通常包含硬实时需求和软实时需求。

软实时需求是那些规定了一个时间截止日期的需求——但是违反这个截止日期并不会使系统崩溃。例如,按键响应太慢可能会使系统看起来没有响应,但实际上并没有使其不可用。硬实时需求是那些声明了一个时间截止日期的需求——而违反这个截止日期将导致系统的绝对故障。例如,如果驾驶员的安全气囊对碰撞传感器输入的反应太慢,那么人可能就over了。

FreeRTOS是一个实时内核(或实时调度器),在它的基础上可以构建嵌入式应用程序来满足它们的硬实时需求。它允许将应用程序组织为独立执行线程的集合。在只有一个核心的处理器上,任何时候只有一个线程可以执行。内核通过检查应用程序设计器分配给每个线程的优先级来决定应该执行哪个线程。在最简单的情况下,应用程序设计人员可以为实现硬实时需求的线程分配较高的优先级,为实现软实时需求的线程分配较低的优先级。这将确保硬实时线程总是在软实时线程之前执行,但是实际情况中优先级分配的决定并不总是那么简单。

为什么选择Freertos

RTOS类系统非常多,但是为什么选择FreeRTOS呢?并且FreeRTOS的资料少,而且大多数是英文的。具体原因如下:

  1. FreeRTOS免费,这个是非常重要的,UCOS是要收费的,学习RTOS系统的话UCOS是首选,但是做产品的话就要考虑一下成本了。显而易见,FreeRTOS就是一个很好的选择,当然也可以选择其它的免费的RTOS系统。

  2. 许多半导体厂家产品的SDK包就是用FreeRTOS作为其操作系统,尤其是WIFI、蓝牙这些带协议栈的芯片或者模块。

  3. 许多软件厂商是用FreeRTOS做本公司软件的操作系统,不如著名的TouchGFX,其所有的例程都是基于FreeRTOS操作系统的。ST公司的所有要使用RTOS系统的例程也均采用了FreeRTOS。

  4. 简单,FreeRTOS的文件数量很少,和UCOS系统相比少很多。

  5. 文档相对比较齐全,在FreeRTOS的官网上可以找到所需的文档和源码,但是所有的文档都是英语版本的。

  6. FreeRTOS被移植到了很多不同的微处理器上,这个极大方便了我们的学习和使用。

  7. 社会占用量高,EEtimes统计的近几年的RTOS系统占有量中FreeRTOS已经跃升到第一位了。

2010和2011年RTOS使用榜
在这里插入图片描述

2012和2013年RTOS使用榜
在这里插入图片描述

2013年和2014年RTOS使用榜
在这里插入图片描述

2014年和2015年RTOS使用榜
在这里插入图片描述

2017年RTOS使用榜
在这里插入图片描述

2019年RTOS使用榜
在这里插入图片描述

关于术语的说明

在FreeRTOS中,每个执行的线程都被称为“任务”。嵌入式社区中对术语没有共识,但我更喜欢“任务”而不是“线程”,因为线程在某些应用领域中有更具体的含义。

为什么要使用实时内核?

有许多成熟的技术可以在不使用内核的情况下编写良好的嵌入式软件,而且,如果正在开发的系统很简单,那么这些技术可能提供最合适的解决方案。在更复杂的情况下,使用内核可能会更好,但在什么情况下使用又是各有见地。

如前所述,任务优先级可以帮助确保应用程序满足其处理期限,但是内核也可以带来其他不太明显的好处。比如:

  • 提取时间信息

内核负责执行定时,并为应用程序提供与时间相关的API。使应用程序代码的结构更简单,整体代码大小更小。

  • 可维护性/可扩展性

抽象出时间可以减少模块之间的相互依赖,并允许软件以可控和可预测的方式发展。此外,内核负责计时,因此应用程序性能不太容易受到底层硬件变化的影响。

  • 模块化

任务是独立的模块,每个模块都应该有明确定义的目的。

  • 团队开发

任务应该有定义良好的接口,更便于团队开发。

  • 便于测试

如果任务是定义良好、接口清晰的独立模块,则可以对它们进行隔离测试。

  • 代码复用

模块化更强和相互依赖比较少导致代码可以更容易重用。

  • 提高效率

使用内核允许软件完全由事件驱动,因此轮询尚未发生的事件不会浪费处理时间。代码只在必须执行某些操作时才会执行。与节省效率相反的是需要处理RTOS滴答中断,并将执行从一个任务切换到另一个任务。然而,应用程序不使用RTOS通常包括某种形式的滴答中断。

  • 空闲时间

当调度程序启动时,会自动创建空闲任务。只要没有应用程序任务要执行,它就会执行。空闲任务可用于测量空闲处理能力,执行后台检查,或简单地将处理器置于低功耗模式。

  • 功率管理

通过使用RTOS获得的效率增益允许处理器长时间处于低功耗模式。每次空闲任务运行时,将处理器置于低功耗状态,可以显著降低功耗。FreeRTOS也有一个特殊的无tick模式。使用无tick模式允许处理器进入比其他方式更低的功耗模式,并在低功耗模式中保持更久。

  • 灵活的中断处理

中断处理程序可以通过延迟处理由应用程序编写器创建的任务或FreeRTOS守护进程任务来保持非常短的时间。

  • 混合处理需求

简单的设计模式可以在应用程序中实现周期性、连续和事件驱动的处理的混合操作。此外,通过选择适当的任务和中断优先级,可以满足硬实时性和软实时性需求。

FreeRTOS特性

FreeRTOS有以下特性:

  • 抢占式或者非抢占式
  • 非常灵活的任务优先级分配
  • 灵活、快速、轻量级的任务通知机制
  • 队列
  • 二进制信号量
  • 计数信号量
  • 互斥量
  • 递归互斥量
  • 软件定时器
  • 事件组
  • 时间片钩子
  • 空闲钩子
  • 栈溢出检查
  • 跟踪记录
  • 任务运行时统计信息收集
  • 可选的商业许可和支持
  • 全中断嵌套模型(适用于某些架构)
  • 极低功耗应用的无滴答性能
  • 软件管理的中断堆栈在适当的时候(这可以帮助节省RAM)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(一)了解Freertos 的相关文章

  • 基于HAL库的FREERTOS----------二.任务API函数

    任务API函数览概 CUBEMX对 做了API的封装 很多 的函数没有封装到位 可以用原函数调用 任务API函数分别介绍 1 uxTaskPriorityGet 此函数用来获取指定任务的优先级 要使用此函数的话宏 INCLUDE uxTas
  • 【FreeRTOS 信号量】互斥信号量

    互斥信号量与二值信号量类似 但是互斥信号量可以解决二值信号量出现的优先级翻转问题 解决办法就是优先级继承 普通互斥信号量创建及运行 参阅安富莱电子demo 互斥信号量句柄 static SemaphoreHandle t xMutex NU
  • FreeRTOS简述和移植文档

    FreeRTOS简述和移植文档 文章目录 FreeRTOS简述和移植文档 1 前言 2 FreeRTOS简述 1 概述 2 实现 3 主要特色 4 支持平台 3 移植FreeRTOS 4 最后 1 前言 目前由于IOT的飞速发展 针对单片机
  • 一文教你学会keil软件仿真

    仿真在我们调试代码中是非常重要的 通过仿真 我们可以快速定位到错误代码 或者错误逻辑的地方 这里我就以上一篇博客为例 教大家如何软件仿真 软件仿真不需要单片机 直接通过keil软件进行代码调试 一 打开工具 二 选择软件仿真 三 开始仿真
  • 【FreeRTOS开发问题】FreeRTOS内存溢出

    FreeRTOS内存溢出 如下图所示 FreeRTOS编译完成后可以看到 系统提示无法分配内存到堆 Objects Template axf Error L6406E No space in execution regions with A
  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • FreeRTOS ------- 任务(task)

    在学习RTOS的时候 个人觉得带着问题去学习 会了解到更多 1 什么是任务 在FreeRTOS中 每个执行线程都被称为 任务 每个任务都是在自己权限范围内的一个小程序 其具有程序入口每个任务都是在自己权限范围内的一个小程序 其具有程序入口通
  • FreeRTOS打印任务对CPU的占有率

    1 配置RTOS 1 打开RTOS Config Parameter 找到Run Time And Task States gathering related definitions 使能GENERATE RUN TIME STATS US
  • freeRTOS手册 第六章 . 中断管理

    如果我对本翻译内容享有所有权 允许任何人复制使用本文章 不会收取任何费用 如有平台向你收取费用与本人无任何关系 第六章 中断管理 章节介绍和范围 事件 嵌入式实时系统必需对环境中的事件做出响应 比如 外部网络设备收到一个发送给TCP IP栈
  • FreeRTOS临界区

    FreeRTOS临界区是指那些必须完整运行 不能被打断的代码段 比如有的外设的初始化需要严格的时序 初始化过程中不能被打断 FreeRTOS 在进入临界区代码的时候需要关闭中断 当处理完临界区代码以后再打开中断 FreeRTOS 系统本身就
  • 【FreeRTOS】任务通知的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • freertos————互斥锁

    线程安全 多线程程序处于一个多变的环境 可访问的全局变量和堆数据随时可能被其他的线程改变 多个线程同时访问一个共享数据 可能造成严重的后果 出现问题的是之前移植了一个freemodbus的从站 多个任务访问全局变量保持寄存器区 导致最后读出
  • STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • FreeRTOS学习(三)开关中断

    声明及感谢 跟随正点原子资料学习 在此作为学习的记录和总结 环境 keil stm32f103 背景知识 Cotex M3的NVIC最多支持240个IRQ 中断请求 1个不可屏蔽 NMI 1个Systick 滴答定时器 Cortex M处理
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • FreeRTOS之系统配置

    1 FreeRTOS的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS的裁剪和配置 在官方的demo中 每个工程都有一个该文件 2 先说一下 INCLUDE 开始的宏 使用 INCLUDE 开头的宏用来
  • FreeRTOS多任务调度器基础

    Cortex M4中SysTick调度器核心 Cortex M4中的中断管理 Cortex M4中影子栈指针 Cortex M4中SVC和PendSV异常 1 Cortex M4中SysTick调度器核心 systick每一次中断都会触发内
  • 有可用的 FreeRTOS 解释语言库吗?

    我在一家公司工作 该公司使用 FreeRTOS 为多个设备创建固件 最近 我们对新功能的要求已经超出了我们固件工程师的工作能力 但我们现在也无力雇用任何新人 即使进行微小的更改 也需要固件人员在非常低的级别上进行修改 我一直在为 FreeR
  • C++ freeRTOS任务,非静态成员函数的无效使用

    哪里有问题 void MyClass task void pvParameter while 1 this gt update void MyClass startTask xTaskCreate this gt task Task 204
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free

随机推荐