freertos特性简介

enginexpert enginexpert     2022-08-08     278

关键词:

FreeRTOS 由 Richard Barry 开发,是一个开源的、可移植的、小型的嵌入式实时操作系统内核。FreeRTOS 既支持抢占式多任务,也支持协作式多任务。FreeRTOS的主要特性如下:

  1. 实时性:FreeRTOS “可以”配置成为一个硬(Hard)实时操作系统内核。要注意这里用的是“可以”,FreeRTOS 也可以配置为非实时型内核,甚至于部分任务是实时性的,部分不是。这一点比uC/OS-II 要灵活。
  2. 任务数量:FreeRTOS对任务数没有限制,同一优先级也可以有多个任务。这点上比uC/OS-II 好。
  3. 抢占式或协作式调度算法:任务调度既可以为抢占式也可以为协作式。采用协作式调度算法后,一个处于运行态任务除非主动要求任务切换(Yielding),否则是不会被调度出运行态的。
  4. 任务调度的时间点:调度器会在每次定时中断到来时决定任务调度,同时外部异步事件也会引起调度器任务调度。
  5. 调度算法:任务调度算法首先满足高优先级任务最先执行,当多于1个任务具有相同的高优先级时,采用round robin 算法调度。
  6. 任务间通信:FreeRTOS 支持队列和几种基本的任务同步机制。
    1. 队列:任务间传递信息可以采用队列方式,FreeRTOS 实现的队列机制传递信息是采用传值方式,因此对于传递大量数据效率有些低。但可以通过传递指针的方式提高效率。中断处理函数中读写队列都是非阻塞型的。任务中读写队列可以为阻塞型也可以配置非阻塞型。当配置为阻塞型时可以指定一个阻塞的最大时间限(Timeout)。
    2. 任务间同步:FreeRTOS 支持基本的信号量功能。FreeRTOS 采用队列来实现信号量的功能,可以认为一个值为n的信号量就是一个长度为n的队列,队列中每个元素的大小为0。这样的队列并不会浪费宝贵的内存空间。
    3. 对于死锁(Deadlock)的处理:FreeRTOS 并没有实现一种可以完全避免死锁的机制。只是通过指定一个阻塞的最大时间限(Timeout)来减少死锁现象的发生。或者说是给出了当死锁现象发生时解锁的可能。当然能不能真的解锁要依赖于使用者的处理代码是否合适。
    4. 临界区:FreeRTOS 采用开关中断的方式实现临界区保护。任务代码中临界区可以嵌套,FreeRTOS 会自动记录每个任务中临界区嵌套的层数。
    5. 暂停调度:与进入临界区类似,FreeRTOS 可以通过暂时关闭任务调度来保证任务代码不被更高优先级的其他任务打断,与临界区不同,关闭任务调度并不会关闭中断,这样中断处理函数仍会照常的执行。
    6. 内存分配:FreeRTOS 提供了多种内存动态分配的方法,具体程序中需要选择其中一种。最简单的内存分配方式提供了一种非常简单的固定内存分配算法,这种方式下只支持内存的分配,不支持分配内存的回收。因此,任务建立后就不能被删除。其他几种内存分配算法支持分配内存的回收,有的方法支持邻接内存块的合并,有些不支持。对我个人来说,我还是比较欣赏uC/OS-II中内存分配的方法,既保证了实时性,也具有一定的灵活性。FreeRTOS 中提供的几种方式,实时性好的功能上有缺陷,功能上完善的实时性却不好。我通常采用的方式是采用最简单的内存固定分配算法,当需要动态释放时将uC/OS-II中内存分配的代码拿来用。
    7. 优先级翻转:FreeRTOS 没有提供优先级继承机制或其他的避免优先级翻转的方法。

1.freertos的简介&移植freertos到stm32平台(代码片段)

I.说明作者:WXP(翱翔云端的鸟)联系方式:328452854@qq.com||13100610853(联系请注明CSDN)申明:个人原创,转载请先经过本人同意!要说的话:个人水平有限,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!=... 查看详情

1.freertos的简介&移植freertos到stm32平台(代码片段)

I.说明作者:WXP(翱翔云端的鸟)联系方式:328452854@qq.com||13100610853(联系请注明CSDN)申明:个人原创,转载请先经过本人同意!要说的话:个人水平有限,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!=... 查看详情

正点原子freertos(下)(代码片段)

目录第十六章FreeRTOS事件标志组16.1事件标志组简介16.2创建事件标志组16.3设置事件位16.4获取事件标志组值16.5等待指定的事件位16.6事件标志组实验16.6.1实验程序设计16.6.2程序运行结果分析第十七章FreeRTOS任务通知17.1任务通知简介1... 查看详情

正点原子freertos(下)(代码片段)

目录第十六章FreeRTOS事件标志组16.1事件标志组简介16.2创建事件标志组16.3设置事件位16.4获取事件标志组值16.5等待指定的事件位16.6事件标志组实验16.6.1实验程序设计16.6.2程序运行结果分析第十七章FreeRTOS任务通知17.1任务通知简介1... 查看详情

stm32移植freertos(图文实操)

目录一、Freertos1、前后台系统2、可剥夺型内核3、Freertos系统简介二、FreeRTOS移植1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。2.在poertable文件夹中保留keil、MemMang、和RVDS,其他删除3.在基础工程中新建分... 查看详情

stm32移植freertos(图文实操)(代码片段)

目录一、Freertos1、前后台系统2、可剥夺型内核3、Freertos系统简介二、FreeRTOS移植1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。2.在poertable文件夹中保留keil、MemMang、和RVDS,其他删除3.在基础工程中新建分... 查看详情

stm32移植freertos(图文实操)(代码片段)

目录一、Freertos1、前后台系统2、可剥夺型内核3、Freertos系统简介二、FreeRTOS移植1.在基础工程种新建Freertos文件夹,并且将源码添加到这个文件夹中。2.在poertable文件夹中保留keil、MemMang、和RVDS,其他删除3.在基础工程中新建分... 查看详情

freertos高级篇4---freertos任务切换分析

  FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪... 查看详情

freertos高级篇4---freertos任务切换分析

  FreeRTOS任务相关的代码大约占总代码的一半左右,这些代码都在为一件事情而努力,即找到优先级最高的就绪任务,并使之获得CPU运行权。任务切换是这一过程的直接实施者,为了更快的找到优先级最高的就绪... 查看详情

freertos_信号量

FreeRTOS信号量信号量是操作系统总重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。不同的信号量其应用场景不同,但是有些场景是可... 查看详情

freertos官方翻译文档——第二章队列管理

2.1概览基于FreeRTOS的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有用的系统功能。FreeRTOS中所有的通信与同步机制都是基于队列实现的。2.2队列的... 查看详情

freertosonesp32

01-freertos简介-张喆坤-博客园(cnblogs.com)02-freertos多任务电灯-张喆坤-博客园(cnblogs.com) 查看详情

freertos消息队列&esp32使用(代码片段)

FreeRTOS消息队列&ESP32实战FreeRTOS消息队列FreeRTOS的消息队列和操作系统课中讲的消息队列大差不差,都是为了有序的、安全的在多任务间在发送信息。下面是其一些特性。多任务访问  队列不是属于某个特别指定的任务的... 查看详情

jdk16特性简介

JDK16新特性说明JDK16于2021年3月16日正式发布GA版OpenJDK官网对JDK16新特性说明的访问地址:http://openjdk.java.net/projects/jdk/16/JDK16新特性概览JEPFeature说明338VectorAPI(Incubator)向量API的支持(处于孵化阶段)347EnableC++14LanguageFeatures开启C++14语言特 查看详情

特性简介(代码片段)

特性特性就是将一段特性代码和我们的代码组合,为我们的某些代码添加一些信息自带的三个特性[Obsolete]特性,主要用于标记过时代码或已被替换的旧代码该特性有两个参数:message:主要用于添加描述信息error:是一个bool值,false为... 查看详情

ecmascript2019(es10)新特性简介

...的第十个版本,所以也称为ES10.今天我们讲解一下ES10的新特性。ES10引入了2大特性和4个小的特性,我们接下来一一讲解。Array的新方法flat和flatMap在ES10中,给Array引入了两个新的方法,分别是flat和flatMap。先来看一下flat。我们看... 查看详情

freertos学习笔记——二值信号量(代码片段)

前言上一个笔记学习完了FreeRTOS的消息队列,以及如何创建与使用,在本篇文章中,继续基于上一个工程来学习FreeRTOS的信号量,其中二值信号量是尤其重要的一点,比较常用,所以本篇会着重介绍二值信... 查看详情

ecmascript2017(es8)新特性简介

...pt的第八个版本,所以也称为ES8.今天我们讲解一下ES8的新特性。ES8引入了2大特性和4个小的特性,我们接下来一一讲解。Async函数我们在ES6中提到了generator,Async函数的操作和generator很类似。我们看下Async的使用://Async函数定义:... 查看详情