设计基于RTOS的应用程序的5种RTOS最佳实践

我经常看到开发人员在努力正确编写 使用RTOS的应用程序。这些斗争的范围从适当确定 系统中有多少任务,如何设置优先级,进行协调 任务行为,避免常见的陷阱,有时只是制作应用程序 工作!今天,将近三分之二的嵌入式系统都使用RTOS, 由于系统的时间要求,数量仅随着时间增加 变得更加复杂。在今天的帖子中,我们将探讨五个最佳 设计基于RTOS的应用程序的实践。  

实时操作系统最佳实践#1 –通过任务分解识别任务

开发人员可以遵循的最佳最佳实践 RTOS应用程序开发成功是使用任务分解来获得 在他们的应用程序中正确数量的任务。有很多技术可以 用于分解任务,但是我喜欢使用的一种方法效果很好 对于嵌入式开发人员来说,是使用“由内而外”的方法。用这种方法 开发人员遵循七个简单步骤:

  1. 识别并列出主要系统组件
  2. 绘制高级框图
  3. 标记系统输入
  4. 标记输出
  5. 识别第一层任务
  6. 确定并发级别和依赖关系
  7. 识别第二层任务(应用程序任务)

对于IoT传感器节点(例如 温控器,最终可能会得到如下图:

A close up of text 上 a white background

Description automatically generated

在这种情况下,系统通常有六个任务 这些任务之一负责监视应用程序代码。 (取决于 系统复杂性,此任务可能会进一步细分)。

实时操作系统最佳实践2 –选择正确的调度算法来分配任务优先级

我观察到,很多开发人员正在使用 RTOS从不花时间来决定如何安排任务。 他们通常认为RTOS将为他们做到这一点,并且他们的任务将 只是基于提供他们选择的任务优先级而成功运行。的 事实是,开发人员可以通过几种不同的方式进行计划 tasks.

首先,开发人员可以使用任务响应时间来计划 任务。在这些系统中,响应时间最短的任务应为 分配了最高优先级。

其次,开发人员可以利用任务执行时间来 安排任务。在这些系统中,执行时间最短的任务 应该分配最高优先级。

最后,开发人员可以使用任务期来安排 任务。在这些系统中,周期最短的任务是最高的 priority.

只有选择了调度方法后,您才能 正确设置任务优先级。 (我看到很多开发人员只是猜测)。

实时操作系统最佳做法3 –使用RMS验证任务是否可调度

大多数嵌入式系统使用的调度算法 使用RTOS的系统是基于周期的调度,该调度也称为 速率单调调度。这些年来已经做了很多研究 有关如何使用RMS正确安排任务的信息。通常,RMS附带 开发人员需要牢记的几个假设。

首先,RMS假定任务是周期性的并且它们是 也独立。这意味着,如果您有非定期任务, 分析时,您会认为它是正确的,并为其提供一些定期时间。下一个, RMS假定RTOS使用抢占式调度。它还假设所有 任务是相等的,并且最坏情况下的执行时间是恒定的。

我经常发现RMS非常适合保持理智 检查我开发的RTOS应用程序架构是否有意义 或者我走错了方向。例如,我可以假设 有关具有以下任务的系统将如何运行并确定其是否可以 成功安排其任务:

A screenshot of a cell phone

Description automatically generated

对于使用RMS的系统,对于具有无限大的系统 任务数,所有这些任务的CPU利用率必须小于 69.3%。对于以上系统,我们可以看到总利用率为52% 意味着它们应该根据系统假设进行调度。

实时操作系统最佳实践4 –使用同步和数据流程图

在使用由外而内的方法识别所有 我在应用程序中需要执行的任务时,我经常会创建一个同步和数据 流程图。该图的目的是:

  • 映射系统中所有数据的来源 from
  • 映射数据如何从源移动到源 tasks in the system
  • 映射如何存储和访问数据
  • 映射如何使用这些数据生成系统 outputs

之前,我使用互联网连接的恒温器作为 例。下面是我们可能制作的数据流和同步图 对于该应用程序。

A screenshot of a cell phone

Description automatically generated

如您所见,此图不仅有助于我们了解如何 数据正在通过系统,而且还将通过RTOS组件 在我们的应用程序中需要:

  • s列
  • 流缓冲区
  • 信号量
  • 互斥体

没有这样的图表,开发团队就必然会 遇到开发和维护问题。

实时操作系统最佳做法5 –利用RTOS最佳做法指南

最后的最佳实践是仅仅认识到 比我们在本文中介绍的最佳实践更多。我放了 我会定期更新一份《 实时操作系统最佳做法指南》,其中包含 常见RTOS的最佳做法,例如:

  • 任务管理
  • 内存管理
  • 绩效管理
  • 同步和任务建议
  • 实时操作系统问题和调试

如果您想了解更多实时操作系统最佳实践,可以通过注册我的《嵌入式字节》月刊来下载《实时操作系统最佳实践指南》。 这里.

结论

实时操作系统的使用比以往任何时候都多 实时应用。遵循这些最佳做法可以帮助您避免 犯错误可能会延迟产品交付和总开发成本。

如果您想了解有关在开发产品时如何使用RTOS的更多信息,可以签出 雅各的RTOS培训课程 要么 c完整的雅各布 帮助您开发RTOS软件架构。

5 thoughts 上 “设计基于RTOS的应用程序的5种RTOS最佳实践”

  1. 写得很好。在有关任务优先级分配的部分中添加有关任务死锁和优先级反转的潜在问题的注释可能会很好。

  2. 我对您所说的将所有非周期性任务假定为周期性任务的部分有疑问。如果我的系统主要由事件驱动的任务组成怎么办?我应该假设那些定期吗?我认为通过这样做,RMS分析的复杂性将不必要地增加。还是我错过了什么?

    1. 这取决于。 RMA假定任务是周期性的。如果您的事件仅偶尔运行,则需要确定它们是否足够低,而不需要考虑CPU负载。如果它们确实加载了CPU,则您需要假定它们以最小周期性发生。 (可能还会发现,取决于设计,使用RMA可能没有任何意义!)。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.