1.1初识FreeRTOS
1.1.1 什么是FreeRTOS?
FreeRTOS的名字由两部分构成,Free+RTOS。Free就是免费的意思,RTOS的全称是RealTimeOperatingSystem,中文名就是实时操作系统。RTOS 不是指某一个确定的系统, 而是指一类系统。 比如 UCOS, FreeRTOS, RTX, RT-Thread 等这些都是 RTOS 类操作系统。
一般操作系统允许多个任务同时允许,但实际上一个处理器在同一时刻只能运行一个任务。所谓的多个任务同时运行是操作系统在各个任务之间进行切换,且该操作非常的快,就给人一种同一时刻有多个任务同时运行的错觉。在操作系统中决定某一个时刻运行哪个任务是由 任务调度器 来决定的。
操作系统的分类方式可以由任务调度器的工作方式决定。比如Unix操作给每个任务分配了同样的运行时间,时间到了就轮到下一个任务。RTOS类的操作系统的任务调度器被设计为可预测的。原因是实时环境中要求操作系统必须对某一个事件做出实时的响应。 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级, 任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
1.1.2 为什么选择 FreeRTOS?
- 免费
- 其他半导体厂商的SDK使用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 磨刀不误砍柴工
1.2.1 资料查找
其实找资料没有这么复杂,官网是最好的地方, FreeRTOS的官网是 www.freertos.org
1.2.2 FreeRTOS 官方文档
FreeRTOS 有一个在线文档,可以直接在官网浏览文档链接
1.2.3 Cortex-M 架构资料
学习FreeRTOS 任务切换的时候需要我们了解 Cortex-M 内核架构相关的知识,否则的话根本看不懂任务切换的过程。参考《ARM Cortex-M3 与 Cortex-M4 权威指南(第三版)》,oseph Yiu 著,吴常玉、曹孟娟、王丽红译,清华大学出版社
1.3 FreeRTOS 源码初探
1.3.1 FreeRTOS 源码下载
在官网的主页点击下载按钮即可下载最新版本的FreeRTOS源码
下载完成后可以进行解压,在FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel下查看FreeRTOS的源码。
当前是2025-02-19 21:59:57 星期三。目前最新的源码版本为v202406.01-LTS。本人的学习资料为正点原子的STM32F1 FreeRTOS开发手册_V1.1。教材中使用的版本为FreeRTOSv9.0.0。所以后续的笔记还是使用9.0.0的源码。1.3.2 FreeRTOS 文件预览
1.3.2.1 FreeRTOS 文件夹
打开 FreeRTOS 文件夹,里面有三个文件夹, Demo、 License 和 Source。
- Demo 文件夹里面就是 FreeRTOS 的相关例程
- License文件夹里面就是相关的许可信息
Source文件夹就是 FreeRTOS 的本尊了
include 文件夹是一些头文件,下面的这些.C 文件就是 FreeRTOS 的源码文件了;重点来看一下 portable这个文件夹。portable 文件夹里面的东西就是 FreeRTOS系统和具体的硬件之间的连接桥梁! 不同的编译环境
从上图中可以看出FreeRTOS 针对不同的编译环境和 MCU 都有不同的“桥梁”。MemMang 这个文件夹是跟内存管理相关的。这个在移植时候是必须的。再看Keil文件夹。里面提示查看RDVS文件夹。打开RVDS文件夹我们可以看到对于不同的MCU有着不同的分类。
我们要往STM32F1的MCU上移植。它属于CM3架构。打开后我们可以看到一个port.c和portmacro.h文件。我们在移植的时候是必须的。1.3.2.2 FreeRTOS-Plus 文件夹
打开FreeRTOS-Plus文件夹我们可以看到也是有三个文件夹,与FreeRTOS文件夹一样。我们再打开Source文件夹。
可以看出, FreeRTOS-Plus 中的源码其实并不是 FreeRTOS 系统的源码, 而是在 FreeRTOS系统上另外增加的一些功能代码, 比如 CLI、 FAT、 Trace 等等。 就系统本身而言, 和 FreeRTOS里面的一模一样的
评论 (0)