2010-06-03 68 views
4

我已经使用RTOS为Arm7编写了一个代码。有多个任务的优先级设置为同一级别。所以这些任务在循环基础上执行。如何计算RTOS任务的时间

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

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

任何一个可以给一些知道该怎么做....以及如何在代码做..

问候 达尼

回答

3

,如果你给我们介绍一下你的平台的更多信息,这将是有益的( CPU,RTOS),但总的想法是这样的:大多数RTOS具有某种类型的“任务切换”标注或挂钩。大多数嵌入式平台都有易于访问的定时器外设(硬件定时器)。

所以:每当你切换到&出低优先级的任务时,拍一个计时器的快照&计算出时间间隔。

各种注意事项都适用,如计时器翻转(包括多次翻转,如果您的计时器周期非常短),低功耗/睡眠模式(如果使用它们),在ISR中花费的时间等。

5

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

如果您可以访问OS代码,另一种方法是在每次选择默认任务时使线条变高,而对于任何其他任务则变低。

1

我同意丹的答案 - 这里有一些附加/增强:

(1)基于窗口的计算。因为默认大概没有周期性,所以需要根据某个窗口(比如说1000毫秒)在该任务上花费的百分比来计算它的运行时间。您需要定义一个用于累计计时器点击的静态变量。一旦你的窗口过期(即:1000毫秒已经过去),你可以计算出默认花费的时间,相比之下,1000毫秒将是默认花费的百分比。在我阅读你的描述时,它看起来像默认状态基本上是一个空闲状态 - 这意味着这个百分比大致是你可用的微型利用率。 (2)每小时翻转一次。。如果您可以使用32位计数器并捕获usec时间戳,则可以在发生任何滚动之前使其超过1小时。如果您将此用于家庭项目,则可以选择忽略翻转。它将有助于单个失真的1000毫秒窗口,就这些。另一方面,如果您要监视最大利用率并因此设置故障或诊断,那么您需要考虑它。

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

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

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