跳转至

1 前言

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

1.1.1 关于 FreeRTOS 内核

FreeRTOS 是包含实时内核的 C 库的集合 以及一组实现互补的模块化库 功能。

Richard Barry 最初于 2003 年左右开发了 FreeRTOS。 实时 Richard 的公司 Engineers Ltd 继续开发 FreeRTOS 与全球领先芯片公司紧密合作直至亚马逊 Web Services (AWS) 接管了 FreeRTOS 2016 的管理工作。理查德现在 作为高级首席工程师继续从事 FreeRTOS 的工作 AWS 物联网团队。 FreeRTOS 是 MIT 授权的开源代码,可用于 任何目的。 您不必成为 AWS 客户即可从 AWS 中受益 管理权!

FreeRTOS 内核非常适合深度嵌入式实时 在微控制器或小型微处理器上运行的应用程序。这个 应用类型通常包括硬性和软性的混合 实时性要求。

软实时要求规定了时间期限,但违反了 截止日期不会使系统变得毫无用处。例如,响应 击键速度太慢可能会使系统显得反应迟钝,令人恼火 而实际上并没有使其无法使用。

硬实时要求规定了时间期限,并且违反了 截止日期将导致系统绝对失败。例如,一个 驾驶员安全气囊如果不这样做的话,弊大于利 对碰撞传感器输入的响应太慢。

FreeRTOS 内核是一个实时 kernel (or real-time scheduler), 使基于 FreeRTOS 的应用程序能够满足其硬实时要求 要求。它使应用程序能够被组织为一个集合 独立的执行线程。例如,在具有 只有一个核心,只有一个执行线程可以在任意时刻执行 一次。内核通过检查来决定执行哪个线程 由应用程序设计者分配给每个线程的优先级。在 最简单的情况,应用程序设计者可以分配更高的优先级 到实现硬实时要求和较低的线程 实现软实时要求的线程的优先级。 以这种方式分配优先级将确保硬实时线程 始终先于软实时线程执行,但优先级分配 决策并不总是那么简单。

如果您不完全理解本文中的概念,请不要担心 上一段还没有。以下章节提供了详细的 带有许多示例的解释,帮助您了解如何使用 实时内核,尤其是 FreeRTOS。

1.1.2 价值主张

FreeRTOS 内核在全球范围内取得的空前成功源于其 令人信服的价值主张; FreeRTOS是专业开发的, 严格质量控制、坚固、受支持、不含任何 知识产权归属不明确,真正可以自由使用 商业应用程序无需公开您的 专有源代码。此外,AWS 的管理权还提供了全球 存在、专家安全事件响应程序、大量且多样化的 开发团队,形式化验证、笔测试、内存方面的专业知识 安全证明和长期 支持 – 同时维护 FreeRTOS 作为硬件、开发 工具和云服务中立的开源项目。自由实时操作系统 GitHub 中的开发是透明且由社区驱动的,并且不 需要任何特殊的工具或开发实践。

您可以使用 FreeRTOS 将产品推向市场,甚至无需告诉我们, 更不用说支付任何费用了,成千上万的公司就是这么做的。如果 在任何时候您想要接收额外的备份,或者如果您 法律团队要求额外的书面保证或赔偿, 然后我们的战略合作伙伴提供简单的低成本商业许可 选项。您可以选择学习的知识让您内心平静 商业路线任您选择。

1.1.3 关于术语的说明

在 FreeRTOS 中,每个执行线程称为“任务”。没有 嵌入式社区内术语达成共识,但我更喜欢 “任务”到“线程”,因为线程在某些情况下可以有更具体的含义 应用领域。

1.1.4 为什么使用 RTOS?

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

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

  • 抽象出计时信息

RTOS 负责执行计时,并提供与时间相关的 API 到应用程序。这使得应用程序的结构 代码更简单,整体代码大小更小。

  • 可维护性/可扩展性

抽象出时序细节会减少相互依赖性 模块之间并允许软件在受控和 可预测的方式。另外,内核负责计时,所以 应用程序性能不太容易受到底层变化的影响 硬件。

  • 模块化

任务是独立的模块,每个模块都应该有明确的定义 目的。

  • 团队发展

任务还应该有明确定义的接口,以便更容易 团队发展。

  • 更容易测试

任务是具有清晰接口的明确定义的独立模块 更容易单独测试。

  • 代码重用

具有更高模块化性和更少相互依赖性的代码设计 更容易重复使用。

  • 提高效率

使用 RTOS 的应用程序代码可以完全由事件驱动。否 轮询事件需要浪费处理时间 没有发生。

与事件驱动所获得的效率相反的是需要处理 RTOS 滴答 中断并将执行从一项任务切换到另一项任务。然而, 不使用 RTOS 的应用程序通常包含某种形式的勾选 无论如何打断。

  • 空闲时间

自动创建的Idle任务在没有任务时执行 需要处理的应用程序任务。空闲任务可以测量 备用处理能力,执行背景调查,或放置 处理器进入低功耗模式。

  • 电源管理

使用 RTOS 带来的效率提升使处理器能够 在低功耗模式下花费更多时间。

通过放置可以显着降低功耗 每次空闲任务运行时,处理器都会进入低功耗状态。自由实时操作系统 还有一个特殊的无滴答模式。使用无滴答模式允许 处理器进入比其他方式更低的功耗模式 并保持在低功耗模式更长时间。

  • 灵活的中断处理

通过将处理延迟到 由应用程序编写者创建的任务或自动创建的任务 创建了 RTOS 守护进程 task (also known as the timer task)。

  • 混合加工要求

简单的设计模式可以实现周期性、连续性和周期性的混合 应用程序内的事件驱动处理。此外,硬和 通过选择合适的任务和满足软实时要求 中断优先级。

1.1.5 FreeRTOS 内核特性

FreeRTOS 内核具有以下标准功能:

  • 先发制人或合作行动
  • 可选的时间切片
  • 非常灵活的任务优先级分配
  • 灵活、快速、轻量级的任务通知机制
  • 队列
  • 二进制信号量
  • 计数信号量
  • 互斥体
  • 递归互斥体
  • 软件定时器
  • 活动组
  • 流缓冲区
  • 消息缓冲区
  • Co-routines (deprecated)
  • 勾选钩子函数
  • 空闲挂钩功能
  • 堆栈溢出检查
  • 跟踪宏
  • 任务运行时统计信息收集
  • 可选的商业许可和支持
  • 完全中断嵌套 model (for some architectures)
  • 极低功耗的无滴答功能 applications (for some architectures)
  • 内存保护单元支持隔离任务和增加应用程序 safety (for some architectures)
  • appropriate (this can help save RAM) 时软件管理中断堆栈
  • 能够使用静态或静态方式创建 RTOS 对象 动态分配内存

1.1.6 许可以及 FreeRTOS、OpenRTOS 和 SafeRTOS 系列

FreeRTOS MIT 开源许可证旨在确保:

  • FreeRTOS可用于商业应用。

  • FreeRTOS 本身仍然可供所有人免费使用。

  • FreeRTOS 用户保留其知识产权的所有权。

请参阅 https://www.FreeRTOS.org/license 了解最新的开源代码 许可证信息。

OpenRTOS 是 FreeRTOS 提供的商业许可版本 经第三方 Amazon Web Services 许可。

SafeRTOS 与 FreeRTOS 具有相同的使用模型,但已 根据实践、程序和流程开发 有必要声称遵守各种国际公认的 安全相关标准。

1.2 包含的源文件和项目

1.2.1 获取本书附带的示例

zip 文件可从 https://www.FreeRTOS.org/Documentation/code 下载 包含所有源代码、预配置的项目文件,以及 构建和执行中提供的示例所需的说明 这本书。请注意,zip 文件不一定包含最多的内容 FreeRTOS 的最新版本。

本书中包含的屏幕截图显示了在 Microsoft Windows 环境,使用 FreeRTOS Windows 端口。的 使用 FreeRTOS Windows 端口的项目已预先配置为构建 使用 Visual Studio 的免费社区版,可从以下位置获取 https://www.visualstudio.com/. 请注意,虽然 FreeRTOS Windows port提供了便捷的评估、测试、开发平台, 它提供真正的实时行为。