一、什么是FreeRTOS
RTOS(Real Time Operation System)是指实时操作系统,主流的有14种,分别为μClinux、μC/OS-II、eCos、FreeRTOS、mbed OS、RTX、Vxworks、QNX、NuttX,而国产的嵌入式操作系统包括都江堰操作系统(djyos)、Alios Things、Huawei LiteOS、RT-Thread、SylixOS。而FreeRTOS就是其中的一种,具有源码公开、可移植、可裁减、调度策略灵活等特点,而且是完全免费的。
作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。
二、为什么选择FreeRTOS
上面我们说了 RTOS 类系统有很多, 为什么要选择 FreeRTOS 呢?在 UCOS 教程中,我们说过学习 RTOS 首选 UCOS,因为 UCOS 的资料很多,尤其是中文资料! 但是 FreeRTOS 的资料少,而且大多数是英文的, 我为何要选择它? 原因如下:
- FreeRTOS 免费! 这是最重要的一点, UCOS 是要收费的, 学习 RTOS 系统的话 UCOS是首选,但是做产品的话就要考虑一下成本了。 显而易见的, FreeRTOS 在此时就是一个很好的选择,当然了也可以选择其他的免费的 RTOS 系统。
- 许多其他半导体厂商产品的 SDK 包就使用 FreeRTOS 作为其操作系统,尤其是 WIFI、蓝牙这些带协议栈的芯片或模块。
- 许多软件厂商也使用 FreeRTOS 做本公司软件的操作系统, 比如著名的 TouchGFX, 其所有的例程都是基于 FreeRTOS 操作系统的。 ST 公司的所有要使用到 RTOS 系统的例程也均采用了 FreeRTOS,由此可见免费的力量啊!
- 简单, FreeRTOS 的文件数量很少, 这个在我们后面的具体学习中就会看到,和 UCOS系统相比要少很多!
- 文档相对齐全,在 FreeRTOS 的官网(www.freertos.org) 上可以找到所需的文档和源码,但是所有的文档都是英文版本的,而且下载 pdf 文档的时候是要收费的。
- FreeRTOS 被移植到了很多不同的微处理器上,极大的方便了我们学习和使用。
- 社会占有量很高, EEtimes 统计的 2014,2015 年 RTOS 系统占有量中 FreeRTOS 已经跃升至第一位, 如下图所示:
三、FreeRTOS特点
FreeRTOS 是一个可裁剪的小型 RTOS 系统, 其特点包括:
- FreeRTOS 的内核支持抢占式, 合作式和时间片调度。
- SafeRTOS 衍生自 FreeRTOS, SafeRTOS 在代码完整性上相比 FreeRTOS 更胜一筹。
- 提供了一个用于低功耗的 Tickless 模式。
- 系统的组件在创建时可以选择动态或者静态的 RAM, 比如任务、消息队列、信号量、软件定时器等等。
- 已经在超过 30 种架构的芯片上进行了移植。
- FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元, 如 STM32F103。
- FreeRTOS 系统简单、小巧、易用, 通常情况下内核占用 4k-9k 字节的空间。
- 高可移植性,代码主要 C 语言编写。
- 支持实时任务和协程(co-routines 也有称为合作式、 协同程序, 本教程均成为协程)。
- 任务与任务、 任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信号量、 递归互斥信号量和互斥信号量进行通信和同步。创新的事件组(或者事件标志)。
- 具有优先级继承特性的互斥信号量。
- 高效的软件定时器。
- 强大的跟踪执行功能。
- 堆栈溢出检测功能。
- 任务数量不限。
- 任务优先级不限。
FreeRTOS的不足:
相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。其不足之处, 一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方 面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统, 不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。
四、FreeRTOS核心功能