2012-06-12 25 views
1

vxworks任務如何使CPU以較低的優先級執行最短時間的任務?vxworks任務如何讓所有其他較低優先級的任務在單個多任務週期中運行?

有沒有一種方法可以讓任務放棄CPU少於1ms?

我知道讓其他低優先級任務運行的唯一方法是taskDelay(n),其中n> = 1。

我一直認爲taskDelay(0)讓所有其他任務具有相同或更高優先級的任務運行。

taskDelay(1)允許所有較低優先級的掛起任務運行長達1ms。

回答

2

較高優先級的任務將總是運行,如果是準備好了,如果你還沒有叫taskLock()intLock()等,所以你不需要taskDelay()更高優先級任務運行。

taskDelay(0)將把當前任務置於該優先級的就緒隊列的後面。如果是在優先的唯一任務,這將是立即改期不管低優先級任務

taskDelay(n>0)的存在將會把當前任務在就緒隊列的後面,對於優先級,它不會被重新安排爲n刻度。這將允許任何低優先級的準備好的任務運行。

參數taskDelay()是ticks,而不是ms。這個長度可以根據系統時鐘速率確定(您可以通過sysClkRateSet()設置並由sysClkRateGet()讀取)。 1 tick 可能等於1ms,但只有如果系統時鐘速率爲1000.它可能不會。

NOTE:該系統時鐘與CPU頻率不同。

1

VxWorks中有某些事件強制調度器運行,例如每個semGive(),每個系統時鐘節拍和taskDelay()。 taskDelay()的參數是系統時鐘的滴答聲。 sysClkRateGet()將返回系統時鐘的速率。

例如,如果sysClkRateGet()返回10,那麼每個時鐘節拍是100 ms。 所以,如果你調用taskDelay(1),那麼這將告訴你的任務睡覺,直到下一個系統打勾。然而,這並不能保證100ms的睡眠,而是如果下一個時鐘滴答即將出現,睡眠可達100ms或低至0ms。如果你調用taskDelay(2),那麼你的任務將休眠,直到下一個時鐘滴答聲(0-100毫秒之間的某個時間)加上下一個時鐘滴答滴答(保證爲100毫秒) - 導致100毫秒和200毫秒。

VxWorks中的時序有很多考慮,我希望這有助於解釋一些細節。

相關問題