如何计算RTOS任务的时间

时间:2010-06-03 12:51:45

标签: embedded task rtos

我使用RTOS为arm7编写了一个代码。有多个任务的优先级设置为相同级别。因此,任务在循环基础上执行。

有一个例外,一个任务(默认)设置为低于rtos中的另一个任务的优先级。因此,如果没有任何任务正在运行,则运行默认优先级或优先级较低的任务。

现在我想计算该默认任务运行的确切总时间(持续时间)。

任何人都可以知道该做什么......以及如何在代码中做..

此致 达尼

3 个答案:

答案 0 :(得分:5)

查看默认或空闲任务何时运行的一种非常简单的方法是,如果您的硬件具有此类功能,则可以使此任务切换未使用(但可访问)的GPIO引脚或指示灯LED。然后,如果将示波器连接到I / O线,您可以看到处理器在“示波器”上看到的振荡周期的持续时间内保持在空闲任务中的时间。只要其他任务正在运行,该线路将保持稳定状态。

如果可以使用操作系统代码,另一种方法是在选择默认任务时使该行变为高电平,而对于任何其他任务则为低电平。

答案 1 :(得分:3)

如果您向我们提供了有关您的平台(CPU,RTOS)的更多信息,那将会很有帮助,但一般的想法是:

大多数RTOS都有某种类型的“任务切换”标注或挂钩。大多数嵌入式平台都有易于访问的定时器外设(硬件定时器)。

所以:每次你切换到&在低优先级任务之外,拍摄计时器和快照的快照。计算时间间隔。

应用各种警告,例如计算定时器翻转(如果您的计时器周期非常短,包括多次翻转),低功耗/睡眠模式(如果您使用它们),在ISR中花费的时间等等......

答案 2 :(得分:1)

我同意Dan的回答 - 这里有一些补充/改进:

(1)基于窗口的计算。因为默认值可能没有周期性,您需要根据某个窗口(例如1000毫秒)在该任务中花费的百分比来计算它的运行时间。您需要定义一个用于累积计时器点击的静态变量。一旦你的窗口过期(即:1000毫秒已经过去)你可以计算默认花费的时间与1000毫秒相比,这将是默认花费的百分比。当我正在阅读你的描述时,看起来默认状态基本上是一个空闲状态 - 这意味着这个百分比大致是你可用的微观利用率。

(2)每小时一次翻转。。如果您可以使用32位计数器并捕获usec时间戳,则可以在发生翻转之前超过1小时。如果您将其用于家庭项目,则可以选择忽略翻转。它将导致单个扭曲的1000毫秒窗口,这就是全部。另一方面,如果您要监视最大利用率并因此设置故障或诊断......那么您需要考虑它。

(3) ISR偏差。确定您是否需要处理在ISR中花费的时间与在另一个任务中花费的时间不同,这取决于您的RTOS如何处理上下文切换。正如Dan所提到的,大多数RTOS都有某种回调或挂钩,会在发生任务切换时触发。一些RTOS只为ISR提供了一个单独的挂钩。我不确定这个动机是什么,除了一般理论之外,用户不太关心在(希望)短暂的ISR中花费的时间而不是用户任务本身。在任何情况下,请查看您的RTOS如何处理此切换并从那里开始。

如果您没有正确处理这个问题,那么在ISR中花费的时间将归因于ISR解雇时正在运行的任何任务。如果您碰巧处于默认状态,那么您的默认任务就是“吸收”ISR时间。如果你没有运行很多ISR,那么我会完全忽略它。

祝你好运!我用PowerPC 551X系列完成了这项工作,它用于生产汽车SW,所以它必须是完美的!你应该更容易:)