> For the complete documentation index, see [llms.txt](https://freertoskernel.asicfans.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freertoskernel.asicfans.com/qian-yan.md).

# 前言

## 小型嵌入式系统中的多任务处理

### 关于 FreeRTOS

FreeRTOS 由 Real Time Engineers Ltd. 独家拥有，开发和维护。Real Time Engineers Ltd. 与世界领先的芯片公司密切合作十多年，为您提供屡获殊荣的商业级和完全免费的高质量软件。

FreeRTOS 非常适合使用微控制器和微处理器的深度嵌入式实时应用程序。这种类型的应用程序通常包括硬件和软件时间要求的混合。

软实时设备是指那些规定了一个时间期限，但超过这个期限不会使系统失效的设备。例如，响应键击的速度太慢可能会使系统看起来反应迟钝，令人恼火，而实际上没有使其无法使用。

硬性实时设备是指那些规定了一个时间期限，而超过这个期限将导致系统的绝对失败。例如，如果驾驶员的安全气囊对碰撞传感器输入的响应太慢，这带来的坏处会超过好处。

FreeRTOS 是一个实时内核（或实时调度程序），可以在其上构建嵌入式应用程序以满足其硬实时要求。 它允许将应用程序组织为独立执行线程的集合。 在只有一个核心的进程中，任何时候都只能执行一个线程。 内核通过检查应用程序设计者分配给每个线程的优先级来决定应该执行哪个线程。 在最简单的情况下，应用程序设计人员可以为实现硬实时要求的线程分配更高的优先级，并为实现软实时要求的线程分配更低的优先级。 这将确保硬实时线程始终在软实时线程之前执行，但优先级分配决策并不总是那么简单。

如果你还没有完全理解前一段的概念，不要担心。下面几章提供了详细的解释，并提供了许多示例，以帮助您理解如何使用实时内核，特别是如何使用 FreeRTOS。

### 价值主张

FreeRTOS 史无前例的全球成功来自其令人信服的价值主张; FreeRTOS 是专业开发的，严格的质量控制，健壮，支持，不包含任何知识产权所有权模糊，是真正自由使用在商业应用程序，没有任何要求公开您的专有源代码。你可以使用 FreeRTOS 将产品推向市场，甚至无需与实时工程师公司 (Real Time Engineers ltd.) 沟通，更不用说支付任何费用，而成千上万的人就是这样做的。如果您希望在任何时候获得额外的备份，或者您的法律团队需要额外的书面担保或赔偿，那么有一个简单的低成本商业升级路径。平和的心态伴随着这样的知识: 你可以在任何时候选择商业路线。

### 术语说明

在 FreeRTOS 中，每个执行线程都称为一个 “任务”。在嵌入式社区中对术语没有共识，但是我更喜欢 task 而不是 thread，因为 thread 在应用程序的某些领域可以有更具体的含义。

### 为什么使用实时内核

有许多成熟的技术可以在不使用内核的情况下编写优秀的嵌入式软件，如果正在开发的系统很简单，那么这些技术可能提供最合适的解决方案。在更复杂的情况下，使用内核可能是更好的选择，但是发生交叉点的地方总是主观的。

如前所述，任务优先级可以帮助确保应用程序满足其处理截止期限，但是内核也可以带来其他不太明显的好处。下面简要列出了其中一些。

* **抽象出时间信息**：内核负责执行计时，并为应用程序提供一个与时间相关的 API。这使得应用程序代码的结构更简单，并且整个代码的尺寸更小。
* **可维护性/可扩展性**：抽象出计时细节可以减少模块之间的相互依赖，并允许软件以可控和可预测的方式发展。此外，内核负责计时，因此应用程序性能不太容易受到底层硬件变化的影响。
* **模块化**：任务是独立的模块，每个模块都应该有一个明确的目标。
* **团队开发**：任务也应该有明确的接口，允许团队更容易的开发。
* **更容易测试**：如果任务是定义良好的独立模块，具有干净的接口，则可以单独测试它们。
* **代码重用**：更高的模块性和更少的相互依赖性导致代码可以更轻松地重复使用。
* **提高效率**：使用内核可以使软件完全由事件驱动，因此轮询没有发生的事件不会浪费处理时间。代码只在必须执行某些操作时才执行。与效率节省相反的是需要处理 RTOS 滴答中断，并将执行从一个任务切换到另一个任务。然而，不使用 RTOS 的应用程序通常包含某种形式的滴答中断。
* **空闲时间**：在启动调度程序时自动创建空闲任务。只要没有应用程序任务需要执行，它就执行。空闲任务可以用来测量空闲处理能力，执行背景检查，或者简单地将处理器置于低功耗模式。
* **功耗管理**：通过使用 RTOS 获得的效率提高允许处理器在低功耗模式下花费更多时间。每次空闲任务运行时将处理器置于低功耗状态，可以显著降低功耗。FreeRTOS 也有一个特殊的无滴答模式。使用无滴答模式允许处理器进入比其他方式更低的功耗模式，并在低功耗模式下保持更长时间。
* **灵活的中断处理**：通过将中断处理推迟到应用程序编写者创建的任务或 FreeRTOS 守护程序的任务中执行，可以使中断处理程序保持非常短。
* **混合处理需求**：简单的设计模式可以在应用程序中实现周期性、连续性和事件驱动处理的混合。此外，可以通过选择适当的任务和中断优先级来满足硬实时和软实时需求。

### FreeRTOS 的功能

FreeRTOS 具有以下标准功能：

* 抢占或合作操作
* 非常灵活任务优先级分配
* 灵活、快速、轻量级任务通知机制
* 队列
* 二进制信号量
* 计数信号量
* 互斥量
* 递归互斥量
* 软件定时器
* 事件组
* 滴答钩子函数
* 空闲钩子函数
* 堆栈溢出检查
* 跟踪记录
* 任务运行时统计
* 信息收集
* 可选的商业许可和支持
* 完全中断嵌套模型（适用于部分架构）
* 适用于极低功耗应用的无滴答功能
* 适当的软件管理中断堆栈（这可以帮助节省RAM）

### 许可，以及 FreeRTOS，OpenRTOS 和 SafeRTOS 系列

**FreeRTOS** 开源许可证旨在确保：

1. FreeRTOS 可以用于商业应用。
2. FreeRTOS 本身仍然对每个人免费开放。
3. FreeRTOS 用户保留其知识产权的所有权。

有关最新的开源许可信息，请访问 <http://www.FreeRTOS.org/license>。

**OpenRTOS** 是FreeRTOS的商业许可版本，由 Real Time Engineers Ltd. 许可，由第三方提供。

**SafeRTOS** 与 FreeRTOS 具有相同的使用模式，但是是根据声称符合各种国际公认的安全相关标准所必需的实践，程序和流程开发的。

## 包含的源文件和项目

### 获取随附本书的示例

本书中提供的所有示例的源代码，预配置项目文件和完整构建说明都在随附的 zip 文件中提供。如果您没有收到该书的副本，您可以从 <http://www.FreeRTOS.org/Documentation/code> 下载 zip 文件。zip 文件可能不包含最新版本的 FreeRTOS。

本书中包含的屏幕截图是在使用 FreeRTOS Windows 移植版在 Microsoft Windows 环境中执行示例时拍摄的。使用 FreeRTOS Windows 移植版的项目已预先配置为使用 Visual Studio 的免费 Express 版本进行构建， 可以从下载 <http://www.microsoft.com/express>。 请注意，虽然 FreeRTOS Windows 移植版提供了方便的评估，测试和开发平台，但它并不能提供真正的实时行为。
