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 有两个文件,这两个文件就是我们移植的时候所需要的!

FreeRTOS学习笔记【一】——初识FreeRTOS相关推荐

  1. 【FreeRTOS学习笔记】0 FreeRTOS实时内核使用指南阅读笔记

    目录 a 概述 a-0 任务函数 a-1 任务状态 a-2 创建任务 a-3 任务优先级 a-4 扩充"非运行形态" 阻塞状态 挂起状态 就绪状态 完整的状态转移图 a-5 空闲任 ...

  2. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  3. freeRtos学习笔记 (9) 移植和CPU利用率统计

    freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...

  4. freeRtos学习笔记 (8) 任务通知

    freeRtos学习笔记 freeRtos任务通知 任务通知的优缺点 freeRtos任务控制块中包含两个32位的变量,用于任务通知,在一些情况下,任务通知可以替代信号量和事件组,并且比信号量和事件组 ...

  5. freeRtos学习笔记 (7)信号量

    freeRtos学习笔记 freeRtos信号量 信号量种类 信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值 ...

  6. freeRtos学习笔记 (6)软件定时器

    freeRtos学习笔记 freeRtos软件定时器 软件定时器需要注意事项 软件定时器的精度基于时钟节拍,例如系统时钟节拍为10ms, 软件定时器定时时间必须是10ms的整数倍,因此软件定时器一般用 ...

  7. freeRtos学习笔记 (5)事件组

    freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...

  8. FreeRTOS学习笔记——互斥型信号量

    来自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段.下面结合一 ...

  9. FreeRTOS学习笔记

    FreeRTOS学习笔记 (这是我自己学习FreeRTOS整理的笔记,仅供参考) 第一部分:实现FreeRTOS内核 变量名: 定义变量时往往会把变量的类型当作前缀加在变量上 变量类型 前缀 char ...

  10. 1、野火freertos学习笔记

    野火freertos学习笔记 1.任务 1.1 栈 1.2 任务的切换 taskYIELD(); 1.3 临界段 2.空闲任务 3.任务优先级 4.任务延时的表现 5.时间片 5.1抢占式.协做式 6 ...

最新文章

  1. 一篇文章带你了解https是如何做到客户端与服务端之间安全通信
  2. Leetcode PHP题解--D16 922. Sort Array By Parity II
  3. 嘿!不用太过于担心的单点故障
  4. php 错误记录_PHP中把错误日志保存在系统日志中(Windows系统)
  5. .net core 集成 autofac.
  6. 【树链剖分】Milk Visits G(luogu 5838)
  7. 计算机网络(湖科大教书匠)
  8. visual studio 2017 3月7日正式发布,同时庆祝visual Studio 20周年
  9. Atitit.为什么小公司也要做高大上开源项目
  10. 微型计算机控制技术学科认识,微型计算机控制技术学习心得.docx
  11. android数据库可视化工具
  12. PHP 快递地图模式,使用D3.js创建物流地图的步奏详解
  13. Socket服务器分类与流程总结
  14. 1.5.12、面向对象下__接口Implement,接口的使用
  15. 【社会网络分析图】python实现
  16. android 微信 amr转mp3格式,微信amr格式转换器使用教程 如何批量转换微信amr为mp3音频格式文件...
  17. html怎么制作小黄人,教你如何自己动手制作小黄人模型攻略
  18. 前端学习笔记:CSS学习之选择器篇
  19. P4043 [AHOI2014/JSOI2014]支线剧情(有源汇上下界最小费用可行流)
  20. 解决方案资源管理器中显示bin,Debug等文件夹

热门文章

  1. 实战技法 - 短线操盘 (2)
  2. 【扫描PDF】如何将颜色淡的扫描PDF颜色变深,便于阅读??PDF中文字太淡怎么加深?汇总网上已有的方法,一波小结
  3. 今日的金山,而非往日的金山
  4. 【问题解决方案】cc1plus: error: unrecognized command line option ‘-fdump-class-hierarchy’
  5. 动图如何在线制作?教你一键在线制作动图
  6. win7 64位虚拟机安装
  7. 海洋表面洋流数据可视化
  8. [笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台
  9. shell 获取当前目录的路径
  10. PHP MySQL 连接数据库