在您確定系統(tǒng)中滴答處理的優(yōu)先級之前,重要的是要注意與滴答相關(guān)的延遲,正如我上一篇文章所指出的,可能并不總是在您的系統(tǒng)中實現(xiàn)周期性行為的最佳方式。您可能希望避免在某些任務中依賴滴答作響的一個原因是延遲往往會因調(diào)用而波動。如果您的系統(tǒng)任務之一重復調(diào)用 OSTimeDly() 以延遲 5 個滴答聲,并且您的系統(tǒng)的滴答聲周期為 1 毫秒,則該任務不會始終保持等待狀態(tài)正好 5 毫秒。在某些情況下,它可能會經(jīng)歷接近 4 毫秒的延遲,而在其他情況下,它可能會延遲 6 毫秒或更長時間。
在許多系統(tǒng)中,這種波動或抖動的原因之一是多個任務使用延遲函數(shù)。如圖 1 所示,如果三個任務的延遲周期都在同一個內(nèi)核節(jié)拍上到期,那么只有那些任務中最高優(yōu)先級的任務會在節(jié)拍處理程序之后立即運行。隨著時間的推移,較低優(yōu)先級的任務將在其延遲中經(jīng)歷更多的抖動,因為總是存在它們無法在將它們移動到就緒狀態(tài)的滴答聲之后立即運行的可能性。

當然,滴答處理程序優(yōu)先級的可變性是延遲波動的另一個潛在來源。在 μC/OS-III 的例子中,它預留了一個系統(tǒng)任務來處理滴答中斷,如果這個任務被賦予了一個相對較低的優(yōu)先級并且在一個高優(yōu)先級任務運行時發(fā)生了一個滴答,那么內(nèi)核將不會被能夠處理滴答并執(zhí)行任何相關(guān)的調(diào)度,直到 CPU 被高優(yōu)先級任務放棄,如圖 2 所示。在完全在 ISR 中處理滴答的 μC/OS-II 中,如果這ISR 的優(yōu)先級相對較低,并且在執(zhí)行更重要的 ISR 期間發(fā)生了滴答聲。

在設(shè)置滴答優(yōu)先級時,您需要牢記應用程序?qū)Σ▌友舆t的容忍度。如果您的代碼可以適應幾毫秒的波動——也許是因為您將使用滴答延遲僅用于輪詢用戶 I/O——那么您可以選擇優(yōu)先級相對較低的滴答。另一方面,如果您的任務需要相當一致的延遲,那么您應該采用高優(yōu)先級,并且您還應該采取措施限制使用延遲函數(shù)的任務數(shù)量。
RTOS 內(nèi)核用戶在配置滴答優(yōu)先級和頻率方面可能具有的靈活性肯定會給剛接觸內(nèi)核的開發(fā)人員帶來一些困難。然而,通過設(shè)置刻度所涉及的權(quán)衡信息,這種靈活性成為定制多任務系統(tǒng)以滿足各種應用程序需求的寶貴手段。我已嘗試在本系列博客中提供滴答使用和配置所需的一些關(guān)鍵信息。
審核編輯:郭婷
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1467瀏覽量
42873 -
RTOS
+關(guān)注
關(guān)注
25文章
866瀏覽量
122976
發(fā)布評論請先 登錄
CW32F030中斷解析
RTOS在嵌入式開發(fā)中的作用
使用RTOS時需要注意的幾點內(nèi)容分享
CS32L010系列能否支持串口的發(fā)送和接收中斷單獨配置?不同中斷的中斷優(yōu)先級如何設(shè)置?
RTOS Crash 問題全維度分析與解決指南
搶占優(yōu)先級和子優(yōu)先級
電能質(zhì)量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳的優(yōu)先級是怎樣的?
低優(yōu)先級線程無法調(diào)度怎么解決?
什么是RTOS中的優(yōu)先級反轉(zhuǎn)
求助,關(guān)于MS51設(shè)置中斷優(yōu)先級問題求解
揭秘!基于RT-Thread探究“優(yōu)先級反轉(zhuǎn)”下的任務調(diào)度究竟是什么樣的?| 技術(shù)集結(jié)
基于RTOS內(nèi)核的滴答處理程序優(yōu)先級設(shè)置
評論