<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          縮短μC/OS-II實時內(nèi)核中斷關(guān)閉時間的方法設(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) 當μ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)度。



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();