縮短μC/OS-II實時內(nèi)核中斷關(guān)閉時間的方法設(shè)計
2.2 增加任務(wù)重調(diào)度函數(shù)OS_Resched
任務(wù)重調(diào)度函數(shù)OS_Resched的偽代碼如下:
任務(wù)重調(diào)度函數(shù)在以下兩處執(zhí)行:
(1) 當μC/OS-II將當前任務(wù)控制塊壓棧,而還沒有將最高優(yōu)先級任務(wù)的控制塊彈出棧時執(zhí)行,因為這時在系統(tǒng)循環(huán)函數(shù)數(shù)組里有可能還有未執(zhí)行的函數(shù),這些函數(shù)的執(zhí)行有可能導致另外一個更高優(yōu)先級任務(wù)的就緒。
(2) 在中斷服務(wù)函數(shù)的末尾執(zhí)行。如果μC/OS-II中斷返回函數(shù)返回的是一個真值,則表示需要執(zhí)行重調(diào)度函數(shù),這時就要執(zhí)行重調(diào)度函數(shù)。
2.3 中斷返回函數(shù)OSIntExit的修改
中斷返回函數(shù)OSIntExit的偽代碼如下:
原函數(shù)的返回是void,而改動后的函數(shù)返回一個布爾量,用來表示下一步是要正常中斷返回(返回布爾假值時),還是要調(diào)用任務(wù)重調(diào)度函數(shù)(返回布爾真值時);同時,改動后還增加對系統(tǒng)狀態(tài)標志的查詢,如果發(fā)現(xiàn)系統(tǒng)在臨界操作狀態(tài),則直接返回布爾假值。所以在中斷服務(wù)程序的最后不是象原來那樣簡單的調(diào)用,而是調(diào)用后根據(jù)返回值作相應(yīng)的處理。
2.4 信號量發(fā)送函數(shù)OSSemPost的修改
這里將以信號量發(fā)送函數(shù)OSSemPost為例來描述對可在中斷中調(diào)用而又會對臨界區(qū)操作的函數(shù)的改進。對于μC/OS-II中的其他函數(shù),改進的方法大致相同。
信號量發(fā)送函數(shù)OSSemPost的偽代碼如下:
在這里,改動后的函數(shù)將先判斷系統(tǒng)狀態(tài)標志,如果系統(tǒng)在臨界區(qū)操作狀態(tài),則將臨界操作作為另一個函數(shù)放入全局函數(shù)循環(huán)數(shù)組,等待在任務(wù)調(diào)度時執(zhí)行,如果不在臨界區(qū)操作狀態(tài),則關(guān)中斷后將系統(tǒng)狀態(tài)標志置位,然后開中斷進行原函數(shù)的那些臨界操作和任務(wù)調(diào)度。
評論