FreeRTOS 特性简介

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 没有提供优先级继承机制或其他的避免优先级翻转的方法。

本文转载自:http://blog.csdn.net/liyuanbhu/article/details/7911163

时间: 2024-08-14 14:40:08

FreeRTOS 特性简介的相关文章

bash特性简介

  1.命令补全.路径补全 Tab:按两次Tab可以给出系统中所有的命令 命令补全:根据给出的字符串在PATH环境变量中定义的路径进行查找:多余一个需要按两次Tab可以给出列表,否则直接补全 路径补全:根据给出的真实路径下的文件名进行补全     2.命令别名 在日常管理和维护linux系统过程中,会使用到大量的命令,有一些很长的命令或用法会经常用到,重复输入会很繁琐,这时可以使用命令别名功能将这个过程简化,提高工作效率 在系统中默认已经定义了一些别名,可以直接使用alias不加任何选项就可以查

CSS3新特性简介

1.CSS3 边框:通过 CSS3,能够创建圆角边框,向矩形添加阴影,使用图片来绘制边框,如border-radius:box-shadow:border-image 2.CSS3 背景:CSS3 包含多个新的背景属性,它们提供了对背景更强大的控制.background-size:background-origin 3.CSS3 文本效果:CSS3 包含多个新的文本特性.text-shadow:word-wrap 4.CSS3 @font-face规则:可将设计师希望使用的字体文件存放到web服

Golang 特性简介

by sheepbao 主要大概介绍go语言的历史和特性,简单的入门. 来历 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的分布式集群,大牛觉得很闹心,后来c++委员会来他们公司演讲,说c++将要添加大概35种新特性.这几个大牛的其中一个人,名为:Rob Pike,听后心中一万个xxx飘过,“c++特性还不够多吗?简化c++应该更有成就感吧”.于是乎,Rob Pi

sql server版本特性简介、版本介绍简介

1.SQL Server 版本简介 1.1.sql server的版本信息 年    代 版    本 大版本号 1993年 SQL Server for Windows NT 4.21 1994年 SQL Server for Windows NT 4.21a 1995年 SQL Server 6.0 1996年 SQL Server 6.5 1998年 SQL Server 7.0 7.00 2000年 SQL Server 2000 8.00 2003年 SQL Server 2000 E

haproxy的丰富特性简介

HaProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.简介 官方站点:http://www.haproxy.org haproxy是一款负载均衡软件,它工作在7层模型上,可以分析数据包中的应用层协议,并按规则进行负载.通常这类7层负载工具也称为反向代理软件,nginx是另一款著名的反向代理软件. haproxy支持使用splice()系统调用,它可以将数据在两个套接字之间在内核空间直接使用管道进行传递,无需再在kernel

SpartanBrowser产品和安全特性简介

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colb

温故知新——JS_ ES5新特性简介

ES5浏览器支持情况: 一般来说,除了针对个别特性的特殊说明,各大主流浏览器都支持es5,包括 Chrome 13+ Firefox 4+ Safari 5.1* IE 9* 其中IE9不支持es的严格模式,从IE10开始支持.Safari 5.1不支持Function.prototype.bind. 1.Strict Mode, 即所谓的严格模式. 在一个文件.项目或函数的开头加上"use strict";即开启严格模式. 详细内容参考:参考链接1: 参考连接2: 参考链接3--阮一

PHP7 新特性 简介

整理了一些常用的新特性,欢迎点赞!!! 新增操作符 1.?? $username = $_GET['user'] ?? ''; $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; 2.<=> $number1 <=> $number2; 当 $number1 小于.等于.大于 $number2 时 分别返回 -1,0,1 新增函数 intdiv(被除数, 除数) — 对除法结果取整 intdiv(3, 2) //

RAID磁盘阵列特性简介

一.RAID概述 RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文即为"独立磁盘冗余阵列",或简称为磁盘阵列.简单的说,RAID是一种把多块独立的物理硬盘或者分区按照不同的方式组合起来,使其在逻辑层面形成统一的一个硬盘组,从而提供比单个硬盘更高的存储性能和提供数冗余的技术.组成磁盘阵列的不同方式称为RAID级别(RAID Levels),注意级别的不同只是表示其组成结构不同,而无性能优劣之分. 二.RAID分类 RAID的实现方式