新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 縮短μC/OS-II實(shí)時(shí)內(nèi)核中斷關(guān)閉時(shí)間的方法設(shè)計(jì)

縮短μC/OS-II實(shí)時(shí)內(nèi)核中斷關(guān)閉時(shí)間的方法設(shè)計(jì)

作者: 時(shí)間:2012-05-07 來源:網(wǎng)絡(luò) 收藏

2.2 增加任務(wù)重調(diào)度函數(shù)OS_Resched

任務(wù)重調(diào)度函數(shù)OS_Resched的偽代碼如下:

任務(wù)重調(diào)度函數(shù)在以下兩處執(zhí)行:

(1) 當(dāng)μC/OS-II將當(dāng)前任務(wù)控制塊壓棧,而還沒有將最高優(yōu)先級(jí)任務(wù)的控制塊彈出棧時(shí)執(zhí)行,因?yàn)檫@時(shí)在系統(tǒng)循環(huán)函數(shù)數(shù)組里有可能還有未執(zhí)行的函數(shù),這些函數(shù)的執(zhí)行有可能導(dǎo)致另外一個(gè)更高優(yōu)先級(jí)任務(wù)的就緒。

(2) 在中斷服務(wù)函數(shù)的末尾執(zhí)行。如果μC/OS-II中斷返回函數(shù)返回的是一個(gè)真值,則表示需要執(zhí)行重調(diào)度函數(shù),這時(shí)就要執(zhí)行重調(diào)度函數(shù)。

2.3 中斷返回函數(shù)OSIntExit的修改

中斷返回函數(shù)OSIntExit的偽代碼如下:

原函數(shù)的返回是void,而改動(dòng)后的函數(shù)返回一個(gè)布爾量,用來表示下一步是要正常中斷返回(返回布爾假值時(shí)),還是要調(diào)用任務(wù)重調(diào)度函數(shù)(返回布爾真值時(shí));同時(shí),改動(dòng)后還增加對(duì)系統(tǒng)狀態(tài)標(biāo)志的查詢,如果發(fā)現(xiàn)系統(tǒng)在臨界操作狀態(tài),則直接返回布爾假值。所以在中斷服務(wù)程序的最后不是象原來那樣簡(jiǎn)單的調(diào)用,而是調(diào)用后根據(jù)返回值作相應(yīng)的處理。

2.4 信號(hào)量發(fā)送函數(shù)OSSemPost的修改

這里將以信號(hào)量發(fā)送函數(shù)OSSemPost為例來描述對(duì)可在中斷中調(diào)用而又會(huì)對(duì)臨界區(qū)操作的函數(shù)的改進(jìn)。對(duì)于μC/OS-II中的其他函數(shù),改進(jìn)的方法大致相同。

信號(hào)量發(fā)送函數(shù)OSSemPost的偽代碼如下:

在這里,改動(dòng)后的函數(shù)將先判斷系統(tǒng)狀態(tài)標(biāo)志,如果系統(tǒng)在臨界區(qū)操作狀態(tài),則將臨界操作作為另一個(gè)函數(shù)放入全局函數(shù)循環(huán)數(shù)組,等待在任務(wù)調(diào)度時(shí)執(zhí)行,如果不在臨界區(qū)操作狀態(tài),則關(guān)中斷后將系統(tǒng)狀態(tài)標(biāo)志置位,然后開中斷進(jìn)行原函數(shù)的那些臨界操作和任務(wù)調(diào)度。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉