2010-06-03 69 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系列完成了這個工作,並且用於生產汽車軟件,所以它必須是完美的!你應該更容易:)