FreeRTOS学习笔记【一】——初识FreeRTOS

发布时间:2024年01月04日

1.1 初识 FreeRTOS


1.1.1 什么是 FreeRTOS?


????????我们看一下 FreeRTOS 的名字,可以分为两部分:Free 和 RTOS, Free 就是免费的、 自由的、不受约束的意思, RTOS 全称是 Real Time Operating System, 中文名就是实时操作系统。可以看出 FreeROTS 就是一个免费的 RTOS 类系统。这里要注意, RTOS 不是指某一个确定的系统, 而是指一类系统。 比如 UCOS, FreeRTOS, RTX, RT-Thread 等这些都是 RTOS 类操作系统。
????????操作系统允许多个任务同时运行, 这个叫做多任务, 实际上, 一个处理器核心在某一时刻只能运行一个任务。 操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务, 任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。

????????操作系统的分类方式可以由任务调度器的工作方式决定, 比如有的操作系统给每个任务分配同样的运行时间,时间到了就轮到下一个任务, Unix 操作系统就是这样的。 RTOS 的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的, 实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。 像 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级, 任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
????????FreeRTOS 是 RTOS 系统的一种, FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,当然了, FreeRTOS 不仅局限于在微控制器中使用。 但从文件数量上来看 FreeRTOS 要比
UCOSII 和 UCOSIII 小的多。


1.1.2 为什么选择 FreeRTOS?


????????上面我们说了 RTOS 类系统有很多, 为什么要选择 FreeRTOS 呢?在 UCOS 教程中,我们说过学习 RTOS 首选 UCOS,因为 UCOS 的资料很多,尤其是中文资料! 但是 FreeRTOS 的资料少,而且大多数是英文的, 我为何要选择它? 原因如下:
????????1、 FreeRTOS 免费! 这是最重要的一点, UCOS 是要收费的, 学习 RTOS 系统的话UCOS是首选,但是做产品的话就要考虑一下成本了。 显而易见的, FreeRTOS 在此时就是一个很好的选择,当然了也可以选择其他的免费的 RTOS 系统。
????????2、 许多其他半导体厂商产品的 SDK 包就使用 FreeRTOS 作为其操作系统,尤其是 WIFI、蓝牙这些带协议栈的芯片或模块。
????????3、许多软件厂商也使用 FreeRTOS 做本公司软件的操作系统, 比如著名的 TouchGFX, 其所有的例程都是基于 FreeRTOS 操作系统的。 ST 公司的所有要使用到 RTOS 系统的例程也均采用了 FreeRTOS,由此可见免费的力量啊!
????????3、简单, FreeRTOS 的文件数量很少, 这个在我们后面的具体学习中就会看到,和 UCOS系统相比要少很多!
????????4、文档相对齐全,在 FreeRTOS 的官网(www.freertos.org) 上可以找到所需的文档和源码,但是所有的文档都是英文版本的,而且下载 pdf 文档的时候是要收费的。
????????5、 FreeRTOS 被移植到了很多不同的微处理器上,比如我们使用的 STM32, F1、 F3、 F4和最新的 F7 都有移植,这个极大的方便了我们学习和使用。
????????6、社会占有量很高, EEtimes 统计的 2015 年 RTOS 系统占有量中 FreeRTOS 已经跃升至第一位, 如图 1.1.1 所示


?图 1.1.2.1 2014/2015 年 ROTS 系统使用情况

1.1.3 FreeRTOS 特点


????????FreeRTOS 是一个可裁剪的小型 RTOS 系统, 其特点包括:
● FreeRTOS 的内核支持抢占式, 合作式和时间片调度。
● SafeRTOS 衍生自 FreeRTOS, SafeRTOS 在代码完整性上相比 FreeRTOS 更胜一筹。
● 提供了一个用于低功耗的 Tickless 模式。
● 系统的组件在创建时可以选择动态或者静态的 RAM, 比如任务、消息队列、信号量、
软件定时器等等。
● 已经在超过 30 种架构的芯片上进行了移植。
● FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元, 如 STM32F103。
● FreeRTOS 系统简单、小巧、易用, 通常情况下内核占用 4k-9k 字节的空间。
● 高可移植性,代码主要 C 语言编写。
● 支持实时任务和协程(co-routines 也有称为合作式、 协同程序, 本教程均成为协程)。
● 任务与任务、 任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信
号量、 递归互斥信号量和互斥信号量进行通信和同步。
● 创新的事件组(或者事件标志)。
● 具有优先级继承特性的互斥信号量。
● 高效的软件定时器。
● 强大的跟踪执行功能。
● 堆栈溢出检测功能。
● 任务数量不限。
● 任务优先级不限。


1.1.4 商业许可


????????FreeRTOS 衍生出来了另外两个系统: OpenRTOS 和 SafeTROS, FreeRTOS 开源许可协议允许在商业应用中使用 FreeRTOS 系统, 并且不需要公开你的私有代码。 如果有以下需求的话可以使用 OpenRTOS:
1、 你不能接受 FreeRTOS 的开源许可协议条件,具体参见表 1.4.1。
2、 你需要技术支持。
3、你想获得开发帮助
4、你需要法律保护或者其他的保护。
????????使用 OpenRTOS 的话需要遵守商业协议, FreeRTOS 的开源许可和 OpenRTOS 的商业许可
区别如表 1.4.1 所示:

?表 1.4.1 开源许可和商业许可区别

????????OpenRTOS 是 FreeRTOS 的商业化版本, OpenRTOS 的商业许可协议不包含任何 GPL条款。还有另外一个系统: SafeRTOS, SafeRTOS 看名字有个 Safe, 安全的意思! SafeRTOS 也是
????????FreeRTOS 的衍生版本, 只是 SafeRTOS 过了一些安全认证,比如 IEC61508。


1.2 磨刀不误砍柴工


1.2.1 资料查找


????????不管学习什么,第一件事就是找资料, 可能有的朋友会说“找资料还不容易吗? ”,打开谷
歌或者百度直接搜索不就行了。 方法是没错,但是你会发现搜索出来的资料很凌乱,尤其是国
内大部分开发者不喜欢看英文,都想找中文资料。而 FreeRTOS 的中文资料大多数都是老版本
的, 要知道 FreeRTOS 的更新是很快的,在笔者写教程的时候最新版本的 FreeRTOS 是 V9.0.0
的, 而且大多数资料都是零零散散, 断断续续的。 当然了,也有很多很不错的资料,比如有的
博主写的博客,有些技术论坛上别人分享的帖子等,但是从这么多资料中找出这些精华还是很
费时间的。其实找资料没有这么复杂,官网是最好的地方, FreeRTOS的官网是www.freertos.org,
????????打开以后如图 1.2.1.1 所示。

?图 1.2.1.1 FreeRTOS 官网

????????显而易见的, FreeRTOS 的官网是全英文的,由此可见英语对于一个电子工程师的重要性,
不管你喜不喜欢,英文就在这里! 所以在这里建议大家不要谈英色变, 像我这种四级考了六次
都没过的人此时也只能静下心来慢慢啃了。
点击网页导航栏中的“Quick Start”,直译就是“快速开始”,点击以后打开 Quick Start 页
面,此页面就是简单的介绍如何快速的上手 FreeRTOS, 这个大家还是要看一下的,对 FreeRTOS
????????可以有一个简单的了解。 导航栏中的“Suppotred MCUs”可以查看 FreeRTOS 所支持的 MCU,打开以后如图 1.2.1.2 所示。

?图 1.2.1.2 FreeRTOS 所支持的 MCU

????????从这里就可以找到 FreeRTOS 是否支持我们所使用的 MCU,支持的意思就是官方已经移植
好了, 用户直接拿过来针对自己的板子简单修改一下就可以在自己的板子上跑起来,后面我们讲解的 FreeRTOS 在 ALIENTEK STM32F103 板子上的移植就是用的这种方法。

?图 1.2.2.1 Micrium 官方文档和书籍

????????图 1.2.2.1 中只是 uC/OS 官方一部分的文档和书籍, 详细的情况可以到 uC/OS 官网
www.micrium.com 上查看, 可以看出 Micrium 官方的文档和书籍非常多, Micrium 官方所有的
产品都有书籍, 不仅仅是 uC/OS,像 uC/TCP、 uC/USB 这些组件也都有相应的文档和书籍。 并
且 uC/OS 的本地化做得也很好,这些书籍大多数都有中文翻译版本出售,具体大家可以到当当
上查找一下。
????????那么问题来了, FreeRTOS 的官方文档和教程怎么样? 点击导航栏中的“PDF Books”,打开
以后如图 1.2.2.2 所示:

?图 1.2.2.2 FreeRTOS 官方文档和教程


????????从图 1.2.2.2 可以看到, FreeRTOS 官方有两份 PDF 文档,一份是 FreeRTOS 的指导手册,
一份是 FreeRTOS 的 API 函数参考手册。相比 uC/OS,FreeRTOS 的官方文档确实有点少。
FreeRTOS 还有一个在线文档,可以直接在官网浏览, 点击“Quick Start”, 打开以后如图 1.2.2.3
所示

1.3 FreeRTOS 源码初探


1.3.1?FreeRTOS 源码下载


????????了解过 FreeRTOS 的一些基础知识后接下来就是要见识一下 FreeRTOS 的庐山真面目,是骡
子是马拉出来溜溜嘛。 FreeRTOS 真身在哪里呢?很明显,官网下载嘛! 进入 FreeRTOS 首页,
有两个下载提示点,一个是左上角部分的 FreeRTOS 下载提示, 一个是右上角部分的下载提示,
如图 1.3.1.1 所示:

图 1.3.1.1 FreeRTOS 下载
????????

????????这两个下载点都可以进入 FreeRTOS 源码下载页面, 下载页面如图 1.3.1.2 所示:

????????图 1.3.1.2 FreeRTOS 下载
?

?????????点击图 1.3.1.2 中的下载链接以后会提示我们下载“FreeRTOSv9.0.0.exe”这个东东, “.exe”
结尾的? 这不是个软件吗? 跟源码有什么关系? 其实这个软件会自动下载FreeRTOS的源码的,
把这个软件下载下来以后双击打开如图 1.3.1.3 所示:

1.3.2 FreeRTOS 文件预览

????????在 1.3.1 小节中我们已经获取到了 FreeRTOS 的源码了,这一小节我们就来初步的预览一下
这个源码文件, 大致看一下都是些什么东西。 从图 1.3.1.5 可以看出 FreeRTOS 源码中有两个文
件夹, 4 个 HTML 格式的网页和一个 txt 文档, HTML 网页和 txt 文档就不用介绍了, 看名字就
知道是什么东西了, 重点在于上面那两个文件夹:FreeRTOS 和 FreeRTOS-Plus, 这两个文件夹里面的东西就是 FreeRTOS 的源码。 我们知道苹果从 Iphone6 以后分为了 Iphone6 和 Iphone6 Plus两个版本,区别就是 Plus 比普通的功能多一点,配置强大一点。 现在 FreeRTOS 也这么分, 是不是 Plus 版本比 FreeRTOS 功能强一点啊,强大到哪里?是不是源码都不同了呀?

1、 FreeRTOS 文件夹


????????打开 FreeRTOS 文件夹, 如图 1.3.2.1 所示:

?

?图 1.3.2.1 FreeRTOS 文件夹

????????图 1.3.2.1 中有三个文件夹, Demo、 License 和 Source, 从名字上就可以很容易的得出他
们都是些什么。

????????● Demo 文件夹
????????Demo 文件夹里面就是 FreeRTOS 的相关例程,打开以后如图 1.3.2.2 所示:

图 1.3.2.2 Demo 文件夹

????????可以看出 FreeRTOS 针对不同的 MCU 提供了非常多的 Demo, 其中就有 ST 的 F1、 F4 和
F7 的相关例程, 这对于我们学习来说是非常友好的,我们在移植的时候就会参考这些例程。
????????● License 文件夹
????????这个文件夹里面就是相关的许可信息,要用 FreeRTOS 做产品的得仔细看看, 尤其是要出
口的产品。
????????● Source 文件夹
????????看名字就知道了,这个就是 FreeRTOS 的本尊了,打开后如图 1.3.2.3 所示:

?图 1.3.2.3 FreeRTOS 源码


????????图 1.3.2.3 就是 FreeRTOS 的源码文件,也是我们以后打交道的, 可以看出, 相比于 UCOS
来说 FreeRTOS 的文件非常少! include 文件夹是一些头文件,移植的时候是需要的,下面的这
些.C 文件就是 FreeRTOS 的源码文件了, 移植的时候肯定也是需要的。重点来看一下 portable
这个文件夹, 我们知道 FreeRTOS 是个系统,归根结底就是个纯软件的东西, 它是怎么和硬件
联系在一起的呢?软件到硬件中间必须有一个桥梁, portable 文件夹里面的东西就是 FreeRTOS
系统和具体的硬件之间的连接桥梁! 不同的编译环境, 不同的 MCU, 其桥梁应该是不同的, 打
开 portable 文件夹, 如图 1.3.2.4 所示:

?

????????图 1.3.2.4 portable 文件夹
?

????????从图 1.3.2.4 中可以看出 FreeRTOS 针对不同的编译环境和 MCU 都有不同的“桥梁”, 我们
这里就以 MDK 编译环境下的 STM32F103 为例。 MemMang 这个文件夹是跟内存管理相关的,
我们移植的时候是必须的, 具体内容我们后面会专门有一章来讲解。 Keil 文件夹里面的东西肯
定也是必须的,但是我们打开Keil文件夹以后里面只有一个文件: See-also-the-RVDS-directory.txt。
????????这个 txt 文件是什么鬼?别急嘛!看文件名字“See-also-the-RVDS-directory”,意思就是参考 RVDS
????????文件夹里面的东西!哎, 好吧, 再打开 RVDS 文件夹,如图 1.3.2.5 所示:

?图 1.3.2.5 RVDS 文件夹

????????RVDS 文件夹针对不同的架构的 MCU 做了详细的分类, STM32F103 就参考 ARM_CM3,
打开 ARM_CM3 文件夹,如图 1.3.2.6 所示:

图 1.3.2.6 ARM_CM4F 文件夹


????????ARM_CM3 有两个文件,这两个文件就是我们移植的时候所需要的!
?

文章来源:https://blog.csdn.net/weixin_46545987/article/details/127557835
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。