很多嵌入式开发人员努力正确地编写使用 RTOS 的应用程序,这些困难包括正确确定系统中有多少任务、如何设置优先级、协调任务行为、避免常见的陷阱,有时只是让应用程序正常工作!如今,近三分之二的嵌入式系统都使用 RTOS,而且随着系统的时序要求变得更加复杂,这个数字只会随着时间的推移而增加。在今天的文章中,我们将探讨设计基于 RTOS 的应用程序的五种最佳实践。
RTOS 最佳实践 1 – 通过任务分解识别任务
开发人员可以遵循以使其 RTOS 应用程序开发成功的第一个最佳实践是使用任务分解在他们的应用程序中获得正确数量的任务。有许多技术可用于分解任务,但有一种适用于嵌入式开发人员的方法是使用由外向内的方法。在这种方法中,开发人员遵循七个简单的步骤:
识别并列出主要的系统组件
绘制高级框图
标记系统输入
标记输出
确定第一层任务
确定并发级别和依赖项
识别第二层任务(应用程序任务)
在对恒温器等物联网传感器节点执行此过程时,最终可能会得到如下图:
在这种情况下,系统通常有六个任务,其中一个任务监督应用程序代码。(根据系统复杂性,这个任务可以进一步分解)。
RTOS 最佳实践 2 – 选择正确的调度算法来分配任务优先级
很多使用 RTOS 的嵌入式开发人员从不花时间决定如何安排他们的任务。他们经常假设 RTOS 会为他们做这件事,并且他们的任务只会基于提供他们选择的任务优先级而成功运行。事实上,开发人员可以通过多种不同的方式来安排任务。
首先,开发人员可以使用任务响应时间来安排任务。在这些系统中,应为响应时间最短的任务分配最高优先级。其次,开发人员可以使用一个任务执行时间来安排任务。在这些系统中,应为执行时间最短的任务分配最高优先级。最后,开发人员可以使用任务周期来安排任务。在这些系统中,周期最短的任务优先级最高。
只有在你选择了调度方法之后,你才能正确设置你的任务优先级。
RTOS 最佳实践 3 – 使用 RMS 验证任务是否可调度
大多数使用 RTOS 的嵌入式系统中使用的调度算法是基于周期的调度,也称为速率单调调度。多年来,针对如何使用 RMS 正确安排任务进行了大量研究。通常,RMS 带有开发人员需要牢记的几个假设。
首先,RMS 假设任务是周期性的并且它们也是独立的。这意味着如果你有一个非周期性任务,在分析中你会假设它是并为其提供一些周期性时间。接下来,RMS 假设 RTOS 使用抢占式调度。它还假设所有任务都是平等的,并且最坏情况下的执行时间是恒定的。
RTOS 最佳实践 4 – 使用同步和数据流图
在使用由外向内的方法来识别应用程序中需要的所有任务之后,嵌入式开发人员可以创建一个同步和数据流图,该图的目的是:
映射系统中所有数据的来源
映射数据如何从其源移动到系统中的任务
映射如何存储和访问这些数据
映射如何使用该数据生成系统输出
下面是我们可能为该应用程序制作的数据流和同步图。
如你所见,此图不仅可以帮助我们了解数据是如何在系统中移动的,还可以帮助我们了解我们在应用程序中需要的 RTOS 组件,例如:
队列
流缓冲区
信号量
互斥体
如果没有这样的图表,开发团队必然会遇到开发和维护问题。
RTOS 最佳实践 5 – 利用 RTOS 最佳实践指南
还有更多其他的最佳实践,这里整理了一份 RTOS 最佳实践指南,其中包含常见 RTOS 的最佳实践,例如:
任务管理
内存管理
绩效管理
同步和任务建议
RTOS 问题和调试
结论
RTOS 比以往任何时候都更广泛地用于开发实时应用程序。嵌入式开发人员遵循这些最佳实践可以帮助避免犯可能延迟产品交付和总开发成本的错误。
发表评论 取消回复