1.1 认识 FreeRTOS
1.1.1 什么是 FreeRTOS
free:免费
rtos:real time Opreating System 实时操作系统
允许多个任务同时运行。实际上,一个处理器核心某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务, 任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。
FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级, 任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
1.1.2 为什么选择 FreeTOS
- FreeRTOS 免费! 这是最重要的一点, UCOS 是要收费的, 学习 RTOS 系统的话 UCOS是首选,但是做产品的话就要考虑一下成本了。 显而易见的, FreeRTOS 在此时就是一个很好的选择,当然了也可以选择其他的免费的 RTOS 系统。
- 许多其他半导体厂商产品的 SDK 包就使用 FreeRTOS 作为其操作系统,尤其是 WIFI、蓝牙这些带协议栈的芯片或模块。
- 许多软件厂商也使用 FreeRTOS 做本公司软件的操作系统, 比如著名的 TouchGFX, 其所有的例程都是基于 FreeRTOS 操作系统的。 ST 公司的所有要使用到 RTOS 系统的例程也均采用了 FreeRTOS,由此可见免费的力量啊!
- 简单, FreeRTOS 的文件数量很少, 这个在我们后面的具体学习中就会看到,和 UCOS系统相比要少很多!
- 文档相对齐全,在 FreeRTOS 的官网(www.freertos.org) 上可以找到所需的文档和源码,但是所有的文档都是英文版本的,而且下载 pdf 文档的时候是要收费的。
- FreeRTOS 被移植到了很多不同的微处理器上,比如我们使用的 STM32, F1、 F3、 F4 和最新的 F7 都有移植,这个极大的方便了我们学习和使用。
- 社会占有量很高, EEtimes 统计的 2015 年 RTOS 系统占有量中 FreeRTOS 已经跃升至第一位
1.1.3 FreeRTOS 特定
● FreeRTOS 的内核支持抢占式, 合作式和时间片调度。
● SafeRTOS 衍生自 FreeRTOS, SafeRTOS 在代码完整性上相比 FreeRTOS 更胜一筹。
● 提供了一个用于低功耗的 Tickless 模式。
● 系统的组件在创建时可以选择动态或者静态的 RAM, 比如任务、消息队列、信号量、
软件定时器等等。
● 已经在 超过 30 种架构的芯片上进行了移植。
● FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元, 如 STM32F103。
● FreeRTOS 系统简单、小巧、易用, 通常情况下内核占用 4k-9k 字节的空间。
● 高可移植性,代码主要 C 语言编写。
● 支持实时任务和协程(co-routines 也有称为合作式、 协同程序, 本教程均成为协程)。
● 任务与任务、 任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信
号量、 递归互斥信号量和互斥信号量进行通信和同步。
● 创新的事件组(或者事件标志)。
● 具有优先级继承特性的互斥信号量。
● 高效的软件定时器。
● 强大的跟踪执行功能。
● 堆栈溢出检测功能。
● 任务数量不限。
● 任务优先级不限
1.2 FreeRTOS 源码初探
1.2.1 源码下载
官网:www.freertos.org
1.2.2 Free RTOS 文件预览
1、FreeRTIS 文件夹
- Demo文件夹
Free RTOS相关例程
- License 文件夹
相关许可信息
- Source 文件夹
就是 FreeRTOS 的源码文件。 include 文件夹是一些头文件,移植的时候是需要的,下面的这些.C 文件就是 FreeRTOS 的源码文件了, 移植的时候肯定也是需要的。重点来看一下 portable这个文件夹, 我们知道 FreeRTOS 是个系统,归根结底就是个纯软件的东西, 它是怎么和硬件联系在一起的呢?软件到硬件中间必须有一个桥梁, portable 文件夹里面的东西就是 FreeRTOS系统和具体的硬件之间的连接桥梁! 不同的编译环境, 不同的 MCU, 其桥梁应该是不同的, 打开 portable 文件夹, 如图
可以看出 FreeRTOS 针对不同的编译环境和 MCU 都有不同的“桥梁”,。
我们这里就以 MDK 编译环境下的 STM32F103 为例。 MemMang 这个文件夹是跟内存管理相关的,我们移植的时候是必须的, 具体内容我们后面会专门有一章来讲解。 Keil 文件夹里面的东西肯定也是必须的,但是我们打开Keil文件夹以后里面只有一个文件: See-also-the-RVDS-directory.txt,就是参考 RVDS文件夹里面的东西!打开 RVDS 文件夹,如图所示:
STM32F103 就参考 ARM_CM3,打开 ARM_CM3 文件夹
2、Free RTOS-Plus 文件夹![](https://i-blog.csdnimg.cn/blog_migrate/8c4cbd896793f65a9e04be763cd74edd.png)
我们看一下 Source
FreeRTOS-Plus 中的源码其实并不是 FreeRTOS 系统的源码, 而是在 FreeRTOS系统上另外增加的一些功能代码, 比如 CLI、 FAT、 Trace 等等。 就系统本身而言, 和 FreeRTOS里面的一模一样的, 所以我们如果只是学习 FreeRTOS 这个系统的话, FreeRTOS-Plus 就没必要了。