在您確定系統(tǒng)中滴答處理的優(yōu)先級(jí)之前,重要的是要注意與滴答相關(guān)的延遲,正如我上一篇文章所指出的,可能并不總是在您的系統(tǒng)中實(shí)現(xiàn)周期性行為的最佳方式。您可能希望避免在某些任務(wù)中依賴滴答作響的一個(gè)原因是延遲往往會(huì)因調(diào)用而波動(dòng)。如果您的系統(tǒng)任務(wù)之一重復(fù)調(diào)用 OSTimeDly() 以延遲 5 個(gè)滴答聲,并且您的系統(tǒng)的滴答聲周期為 1 毫秒,則該任務(wù)不會(huì)始終保持等待狀態(tài)正好 5 毫秒。在某些情況下,它可能會(huì)經(jīng)歷接近 4 毫秒的延遲,而在其他情況下,它可能會(huì)延遲 6 毫秒或更長時(shí)間。
在許多系統(tǒng)中,這種波動(dòng)或抖動(dòng)的原因之一是多個(gè)任務(wù)使用延遲函數(shù)。如圖 1 所示,如果三個(gè)任務(wù)的延遲周期都在同一個(gè)內(nèi)核節(jié)拍上到期,那么只有那些任務(wù)中最高優(yōu)先級(jí)的任務(wù)會(huì)在節(jié)拍處理程序之后立即運(yùn)行。隨著時(shí)間的推移,較低優(yōu)先級(jí)的任務(wù)將在其延遲中經(jīng)歷更多的抖動(dòng),因?yàn)榭偸谴嬖谒鼈儫o法在將它們移動(dòng)到就緒狀態(tài)的滴答聲之后立即運(yùn)行的可能性。
當(dāng)然,滴答處理程序優(yōu)先級(jí)的可變性是延遲波動(dòng)的另一個(gè)潛在來源。在 μC/OS-III 的例子中,它預(yù)留了一個(gè)系統(tǒng)任務(wù)來處理滴答中斷,如果這個(gè)任務(wù)被賦予了一個(gè)相對(duì)較低的優(yōu)先級(jí)并且在一個(gè)高優(yōu)先級(jí)任務(wù)運(yùn)行時(shí)發(fā)生了一個(gè)滴答,那么內(nèi)核將不會(huì)被能夠處理滴答并執(zhí)行任何相關(guān)的調(diào)度,直到 CPU 被高優(yōu)先級(jí)任務(wù)放棄,如圖 2 所示。在完全在 ISR 中處理滴答的 μC/OS-II 中,如果這ISR 的優(yōu)先級(jí)相對(duì)較低,并且在執(zhí)行更重要的 ISR 期間發(fā)生了滴答聲。
在設(shè)置滴答優(yōu)先級(jí)時(shí),您需要牢記應(yīng)用程序?qū)Σ▌?dòng)延遲的容忍度。如果您的代碼可以適應(yīng)幾毫秒的波動(dòng)——也許是因?yàn)槟鷮⑹褂玫未鹧舆t僅用于輪詢用戶 I/O——那么您可以選擇優(yōu)先級(jí)相對(duì)較低的滴答。另一方面,如果您的任務(wù)需要相當(dāng)一致的延遲,那么您應(yīng)該采用高優(yōu)先級(jí),并且您還應(yīng)該采取措施限制使用延遲函數(shù)的任務(wù)數(shù)量。
RTOS 內(nèi)核用戶在配置滴答優(yōu)先級(jí)和頻率方面可能具有的靈活性肯定會(huì)給剛接觸內(nèi)核的開發(fā)人員帶來一些困難。然而,通過設(shè)置刻度所涉及的權(quán)衡信息,這種靈活性成為定制多任務(wù)系統(tǒng)以滿足各種應(yīng)用程序需求的寶貴手段。我已嘗試在本系列博客中提供滴答使用和配置所需的一些關(guān)鍵信息。
審核編輯:郭婷
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40282 -
RTOS
+關(guān)注
關(guān)注
22文章
811瀏覽量
119597
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論