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提供了便捷的评估、测试、开发平台, 它不提供真正的实时行为。