国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種改善嵌入式實時操作系統(tǒng)中斷延遲的方法

      文檔序號:6575901閱讀:544來源:國知局

      專利名稱::一種改善嵌入式實時操作系統(tǒng)中斷延遲的方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及嵌入式實時操作系統(tǒng),尤其是涉及一種改善嵌入式實時操作系統(tǒng)中斷延遲的方法。
      背景技術(shù)
      :隨著嵌入式實時應(yīng)用程序復(fù)雜度的增加,嵌入式實時操作系統(tǒng)得到日益廣泛的應(yīng)用,以實現(xiàn)任務(wù)調(diào)度、資源管理、同步與通訊、精確定時,以及i/o管理等。嵌入式實時操作系統(tǒng)需要對外部事件作出及時的響應(yīng),因而對實時性有極高要求,這是它與一般操作系統(tǒng)的最主要區(qū)別。評價一個實時操作系統(tǒng)的實時性的重要指標(biāo)有兩個,即任務(wù)調(diào)度時間和中斷延遲。中斷延遲(InterruptLatency)是指從中斷發(fā)生到操作系統(tǒng)作出響應(yīng)并執(zhí)行中斷服務(wù)例程(InterruptServiceRoutine)的第一條指令所需要的時間,一般使用"最大中斷禁止時間(MaximumInterrupt-maskedTime)"來衡量。關(guān)閉中斷的時間越長,則中斷延遲越大,甚至可能導(dǎo)致中斷丟失。一般的嵌入式實時操作系統(tǒng)的系統(tǒng)服務(wù)都采用關(guān)閉中斷的方法來保護臨界區(qū)以實現(xiàn)對臨界資源的操作。開放源代碼的嵌入式實時操作系統(tǒng)uC/OS-II提供的保護臨界區(qū)的方法,就是采用宏OS—ENTER—CRITICALO和OS_EXIT—CRITICAL()來完成的。在宏OS_ENTER—CRITICAL()中,先保存當(dāng)前的中斷狀態(tài),然后關(guān)閉全局中斷;在宏OS-EXIT一CRITICAL0中恢復(fù)先前的中斷狀態(tài)。從而,在這兩個宏之間的臨界區(qū)得到了保護。.關(guān)閉中斷不可避免地增加了應(yīng)用系統(tǒng)的中斷延遲,導(dǎo)致應(yīng)用系統(tǒng)的實時性下降。而實際上,大多數(shù)中斷的處理與操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)無關(guān),關(guān)閉中斷導(dǎo)致這些與臨界區(qū)無關(guān)的中斷的延遲時間增大。
      發(fā)明內(nèi)容針對上述存在的問題,本發(fā)明的目的是提供一種改善嵌入式實時操作系統(tǒng)中斷延遲的方法。本發(fā)明解決其技術(shù)問題所采用的關(guān)鍵點是在操作系統(tǒng)系統(tǒng)服務(wù)的實現(xiàn)過程中永遠不執(zhí)行關(guān)閉中斷操作。該方法將實時應(yīng)用系統(tǒng)中使用的中斷分為兩類-實時中斷和非實時中斷。針對不同中斷的操作按如下處理(1)實時中斷具有比非實時中斷更高的優(yōu)先級。實時中斷的中斷服務(wù)例程不能使用操作系統(tǒng)服務(wù)。4實時中斷的中斷服務(wù)例程結(jié)束后,被中斷的操作得以繼續(xù)。實時中斷的中斷服務(wù)例程直接注冊到處理器的中斷向量表,操作系統(tǒng)不對該中斷進行管理。(2)非實時中斷優(yōu)先級小于實時中斷優(yōu)先級,但大于任務(wù)優(yōu)先級。非實時中斷的中斷服務(wù)例程可以使用有限的操作系統(tǒng)服務(wù),并且在退出前必須重新使能該中斷。非實時中斷的中斷服務(wù)例程執(zhí)行結(jié)束后,由于其使用的操作系統(tǒng)服務(wù)可能導(dǎo)致任務(wù)調(diào)度,因此可能會暫停被中斷任務(wù)的操作而執(zhí)行其他任務(wù)的操作。操作系統(tǒng)需要對非實時中斷進行管理以保護被中斷任務(wù)的上下文(Omtext)。因此,操作系統(tǒng)對用戶的中斷服務(wù)例程進行封裝,形成中斷處理程序(InterruptHandler),再將中斷處理程序注冊到中斷向量表。(3)實時中斷允許嵌套實時中斷。非實時中斷可以被實時中斷嵌套,但不可被非實時中斷嵌套。(4)非實時中斷的中斷服務(wù)例程按照先到先服務(wù)(FCFS)策略進行處理。本發(fā)明通過在操作系統(tǒng)系統(tǒng)服務(wù)的實現(xiàn)過程中永遠不執(zhí)行關(guān)閉中斷操作來改善操作系統(tǒng)帶來的中斷延遲問題。本發(fā)明采用的技術(shù)方案的步驟如下1)創(chuàng)建一個系統(tǒng)服務(wù)標(biāo)志,一個臨界區(qū)標(biāo)志,一個非實時中斷標(biāo)志和一個待處理中斷服務(wù)例程環(huán)形隊列;2)使用如下的流程編寫任意的操作系統(tǒng)服務(wù)(2.1)設(shè)置系統(tǒng)服務(wù)標(biāo)志;(2.2)如果本系統(tǒng)服務(wù)是在非實時中斷的中斷服務(wù)例程中調(diào)用的,即非實時中斷標(biāo)志被置位,則進入步驟(2.3),否則跳轉(zhuǎn)到步驟(2.8);(2.3)設(shè)置臨界區(qū)標(biāo)志;(2.4)訪問操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)完成本系統(tǒng)服務(wù)的功能;(2.5)重置臨界區(qū)標(biāo)志;C2.6)重置系統(tǒng)服務(wù)標(biāo)志;(2.7)跳轉(zhuǎn)到步驟(2.13);(2.8)設(shè)置臨界區(qū)標(biāo)志;(2.9)訪問操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)完成本系統(tǒng)服務(wù)的功能;(2.10)重置臨界區(qū)標(biāo)志;(2.1l贈照先到先服務(wù)策略調(diào)用待處理中斷服務(wù)例程環(huán)形隊列中的中斷服務(wù)例程;(2.12)執(zhí)行操作系統(tǒng)任務(wù)調(diào)度;(2.13)結(jié)束該操作系統(tǒng)服務(wù)操作并返回;3)使用如下的流程實現(xiàn)操作系統(tǒng)的任務(wù)調(diào)度(3.1)査找下一個被執(zhí)行的任務(wù)并切換任務(wù)上下文;(3.2)重置系統(tǒng)服務(wù)標(biāo)志、臨界區(qū)標(biāo)志和非實時中斷標(biāo)志,清空待處理中斷服務(wù)例程環(huán)形隊列;勺使用如下的流程編寫任意的非實時中斷的中斷處理程序(4.1)設(shè)置非實時中斷標(biāo)志;(4.2)如果系統(tǒng)服務(wù)標(biāo)志沒有被置位,則進入步驟(4.3),否則跳轉(zhuǎn)到步驟(4.4);(4.3)保存操作系統(tǒng)上下文切換相關(guān)信息;(4.4)如果臨界區(qū)標(biāo)志被置位或者待處理中斷服務(wù)例程環(huán)形隊列非空,則進入步驟(4.5),否則跳轉(zhuǎn)到步驟(4.7);(4.5)將本中斷處理程序?qū)?yīng)的中斷服務(wù)例程加入待處理中斷服務(wù)例程環(huán)形隊列;(4.6)屏蔽本中斷并跳轉(zhuǎn)到步驟(4.8);(4.7)直接調(diào)用本中斷處理程序?qū)?yīng)的中斷服務(wù)例程;(4.8)重置非實時中斷標(biāo)志;(4.9)如果系統(tǒng)服務(wù)標(biāo)志沒有被置位,則使用步驟(4.3)保存的上下文信息進行操作系統(tǒng)任務(wù)調(diào)度;(4.10)結(jié)束該中斷處理程序并返回;5)將非實時中斷的中斷處理程序注冊到中斷向量表,將實時中斷的中斷服務(wù)例程注冊到中斷向量表。在本發(fā)明中,除了操作系統(tǒng)處于調(diào)度時無法立刻響應(yīng)外部中斷外,當(dāng)實時中斷發(fā)生時,其中斷服務(wù)例程可以立刻得到執(zhí)行;當(dāng)非實時中斷發(fā)生時,如果系統(tǒng)服務(wù)正在執(zhí)行,則非實時中斷的中斷服務(wù)例程會被加入到待處理中斷服務(wù)例程環(huán)形隊列并在系統(tǒng)服務(wù)的臨界區(qū)操作結(jié)束之后得到運行;如果非實時中斷發(fā)生時沒有系統(tǒng)服務(wù)在執(zhí)行,其中斷服務(wù)例程也可以立刻得到執(zhí)行。本發(fā)明具有的有益效果是1.本發(fā)明把中斷分為實時中斷和非實時中斷,使得對中斷的使用和管理更加方便。將實時性要求高的中斷作為實時中斷直接注冊到中斷向量表,脫離操作系統(tǒng)的管理,減少操作系統(tǒng)管理中斷帶來的執(zhí)行開銷從而縮短中斷延遲。2.本發(fā)明在操作系統(tǒng)系統(tǒng)服務(wù)的實現(xiàn)過程中永遠不執(zhí)行關(guān)閉中斷操作,使得實時中斷的中斷延遲幾乎為零,提高了中斷處理的實時性。3.實時中斷的中斷延遲取決于操作系統(tǒng)的調(diào)度時間,而實時操作系統(tǒng)的調(diào)度時間是可確定的,因此實時中斷的中斷延遲也是可確定的,從而提高了實時應(yīng)用系統(tǒng)的可預(yù)測性。本發(fā)明實現(xiàn)中斷管理所需要的時間開銷和空間開銷很少,非常適合微內(nèi)核嵌入式實時操作系統(tǒng)。圖1操作系統(tǒng)的系統(tǒng)服務(wù)流程圖。圖2操作系統(tǒng)的非實時中斷的中斷處理程序流程圖。圖3常見方法與本發(fā)明方法的最大中斷禁止時間對比圖。圖4常見方法與本發(fā)明方法對實時中斷的中斷延遲對比圖。圖5常見方法與本發(fā)明方法對非實時中斷的中斷延遲對比圖。具體實施例方式下面結(jié)合附圖和一個實施例對本發(fā)明作進一步分析和介紹。如圖1所示,使用如下的流程編寫任意的操作系統(tǒng)服務(wù)(2.1)設(shè)置系統(tǒng)服務(wù)標(biāo)志;(2.2)如果本系統(tǒng)服務(wù)是在非實時中斷的中斷服務(wù)例程中調(diào)用的,即非實時中斷標(biāo)志被置位,則進入步驟(23),否則跳轉(zhuǎn)到步驟(2.8);(2.3)設(shè)置臨界區(qū)標(biāo)志;(2.4)訪問操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)完成本系統(tǒng)服務(wù)的功能;(2.5)重置臨界區(qū)標(biāo)志;(2.6)重置系統(tǒng)服務(wù)標(biāo)志;(2.7)跳轉(zhuǎn)到步驟(2.13);(2.8)設(shè)置臨界區(qū)標(biāo)志;(2.9)訪問操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)完成本系統(tǒng)服務(wù)的功能;(2.10)重置臨界區(qū)標(biāo)志;(2.11)按照先到先服務(wù)策略調(diào)用待處理中斷服務(wù)例程環(huán)形隊列中的中斷服務(wù)例程;(2.12)執(zhí)行操作系統(tǒng)任務(wù)調(diào)度;(2.13)結(jié)束該操作系統(tǒng)服務(wù)操作并返回。如圖2所示,使用如下的流程實現(xiàn)操作系統(tǒng)的任務(wù)調(diào)度(3.1)查找下一個被執(zhí)行的任務(wù)并切換任務(wù)上下文;P.2)重置系統(tǒng)服務(wù)標(biāo)志、臨界區(qū)標(biāo)志和非實時中斷標(biāo)志,清空待處理中斷服務(wù)例程環(huán)形隊列;4)使用如下的流程編寫任意的非實時中斷的中斷處理程序(4.1)設(shè)置非實時中斷標(biāo)志;(4.2)如果系統(tǒng)服務(wù)標(biāo)志沒有被置位,則進入步驟(4.3),否則跳轉(zhuǎn)到步驟(4.4);(4.3)保存操作系統(tǒng)上下文切換相關(guān)信息;(4.4)如果臨界區(qū)標(biāo)志被置位或者待處理中斷服務(wù)例程環(huán)形隊列非空,則進入步驟(4.5),否則跳轉(zhuǎn)到步驟(4.7);(4.5)將本中斷處理程序?qū)?yīng)的中斷服務(wù)例程加入待處理中斷服務(wù)例程環(huán)形隊列;(4.6)屏蔽本中斷并跳轉(zhuǎn)到歩驟(4.8);(4.7)直接調(diào)用本中斷處理程序?qū)?yīng)的中斷服務(wù)例程;(4.8)重置非實時中斷標(biāo)志;(4.9)如果系統(tǒng)服務(wù)標(biāo)志沒有被置位,則使用步驟(4.3)保存的上下文信息進行操作系統(tǒng)任務(wù)調(diào)度;(4.10)結(jié)束該中斷處理程序并返回。如圖3所示,闡明了在一個系統(tǒng)服務(wù)中,本發(fā)明與常見方法的最大中斷禁止時間的區(qū)別。在常見的嵌入式實時操作系統(tǒng)(如uC/OS-II)中,系統(tǒng)服務(wù)常常使用關(guān)閉中斷的方式來保護臨界區(qū)。為了保證操作系統(tǒng)服務(wù)操作的連續(xù)性,整個系統(tǒng)服務(wù)的代碼都被當(dāng)作臨界區(qū)處理。一個系統(tǒng)服務(wù)的操作可以抽象成兩部分對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作和任務(wù)調(diào)度。為了保護對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作,常見方法是通過關(guān)閉中斷來實現(xiàn)的,從而引入了中斷關(guān)閉時間。任務(wù)調(diào)度是使用自陷指令(TRAP)或者軟中斷指令(SWI)實現(xiàn)的,這兩個指令都是不可中斷指令,以保證任務(wù)調(diào)度的原子性,從而導(dǎo)致不可中斷時間。因此,常見方法的最大中斷禁止時間是由中斷關(guān)閉時間和不可中斷時間構(gòu)成的。而本發(fā)明對內(nèi)核數(shù)據(jù)結(jié)構(gòu)操作的保護是不需要關(guān)閉中斷的,從而沒有中斷關(guān)閉時間。本發(fā)明的最大中斷禁止時間僅由任務(wù)調(diào)度導(dǎo)致的不可中斷時間構(gòu)成。顯然,本發(fā)明導(dǎo)致的最大中斷禁止時間比常見方法的要小,從而中斷延遲也小。如圖4所示,闡明了一個系統(tǒng)服務(wù)在執(zhí)行時,本發(fā)明與常見方法對實時中斷的處理的區(qū)別。當(dāng)操作系統(tǒng)的系統(tǒng)服務(wù)在執(zhí)行對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作時,發(fā)生了一個實時中斷。對于常見方法,由于在執(zhí)行對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作時中斷是禁止的,而且持續(xù)到整個系統(tǒng)服務(wù)的操作完成,因此對該實時中斷的響應(yīng)被推遲到系統(tǒng)服務(wù)的操作完成,即任務(wù)調(diào)度結(jié)束后才開始執(zhí)行實時中斷服務(wù)例程,從而造成較長的中斷延遲。而對于本發(fā)明,在執(zhí)行對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作時中斷一直是允許的,因此操作系統(tǒng)可以立刻響應(yīng)該實時中斷,導(dǎo)致的中斷延遲幾乎為零。如圖5所示,闡明了一個系統(tǒng)服務(wù)在執(zhí)行時,本發(fā)明與常見方法對非實時中斷的處理的區(qū)別。當(dāng)操作系統(tǒng)的系統(tǒng)服務(wù)在執(zhí)行對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作時,發(fā)生了一個非實時中斷。對于常見方法,由于在執(zhí)行對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作時中斷是禁止的,而且持續(xù)到整個系統(tǒng)服務(wù)的操作完成,因此對該非實時中斷的響應(yīng)被推遲到系統(tǒng)服務(wù)的操作完成,即任務(wù)調(diào)度結(jié)束后才開始執(zhí)行非實時中斷服務(wù)例程,從而造成較長的中斷延遲。而對于本發(fā)明,在執(zhí)行對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作時中斷一直是允許的,因此操作系統(tǒng)可以立刻捕獲到該非實時中斷,并把相應(yīng)的非實時中斷服務(wù)例程加入待處理中斷服務(wù)例程環(huán)形隊列;在系統(tǒng)服務(wù)完成對內(nèi)核數(shù)據(jù)結(jié)構(gòu)的操作后,立刻執(zhí)行該非實時中斷服務(wù)例程而非等到整個系統(tǒng)服務(wù)的操作完成,即任務(wù)調(diào)度結(jié)束后才開始執(zhí)行非實時中斷服務(wù)例程,從而減少中斷延遲。下面結(jié)合實施例對本發(fā)明進一步介紹。該實施例使用基于飛思卡爾HCS12微控制器的開發(fā)板作為硬件平臺,使用應(yīng)用本發(fā)明實現(xiàn)了系統(tǒng)服務(wù)和中斷處理程序的SmartOSEKOS作為本實施例中的嵌入式實時操作系統(tǒng)。該實施例包含一個既可以在任務(wù)中調(diào)用又可以在中斷服務(wù)例程中調(diào)用的SmartOSEKOS操作系統(tǒng)服務(wù)ActivateTask(pTask),—個時鐘中斷及其中斷服務(wù)例程和一個串口接收中斷及其中斷服務(wù)例程。其中,時鐘中斷作為本發(fā)明中所述的實時中斷,它的中斷服務(wù)例程的功能是記錄時鐘中斷發(fā)生的次數(shù)從而可以計算系統(tǒng)時間;串口接收中斷作為本發(fā)明所述的非實時中斷,它的中斷服務(wù)例程的功能是使用操作系統(tǒng)服務(wù)ActivateTask(pTask)激活一個任務(wù)處理接收到的串口數(shù)據(jù)。這種改善嵌入式實時操作系統(tǒng)中斷延遲的方法在SmartOSEKOS中的實現(xiàn)步驟如下1)創(chuàng)建一個系統(tǒng)服務(wù)標(biāo)志SSCflag,一個臨界區(qū)標(biāo)志CSflag,一個非實時中斷標(biāo)志NRTIflag,一個待處理中斷服務(wù)例程環(huán)形隊列pISRlist。2)操作系統(tǒng)服務(wù)ActivateTask(pTask)的實現(xiàn)步驟如下(2.1)設(shè)置系統(tǒng)服務(wù)標(biāo)志,即賦值SSCflag為1;(2.2)如果非實時中斷標(biāo)志NRTIflag為1,則進入步驟(2.3),否則跳轉(zhuǎn)到步驟(2.8);(2.3)設(shè)置臨界區(qū)標(biāo)志,即賦值CSflag為l;(2.4)將實現(xiàn)該系統(tǒng)服務(wù)功能相關(guān)的內(nèi)核數(shù)據(jù)結(jié)構(gòu),即任務(wù)pTask的狀態(tài)置為9就緒態(tài);(2.5)重置臨界區(qū)標(biāo)志,即賦值CSflag為0;(2.6)重置系統(tǒng)服務(wù)標(biāo)志,即賦值SSCflag為O;(2.7)跳轉(zhuǎn)到步驟(2.13);(2.8)設(shè)置臨界區(qū)標(biāo)志,即賦值CSflag為l;(2.9)將實現(xiàn)該系統(tǒng)服務(wù)功能相關(guān)的內(nèi)核數(shù)據(jù)結(jié)構(gòu),即任務(wù)pTask的狀態(tài)置為就緒態(tài);(2.10)重置臨界區(qū)標(biāo)志,即賦值CSflag為0;(2.11)按照先到先服務(wù)策略調(diào)用待處理中斷服務(wù)例程環(huán)形隊列中的中斷服務(wù)例程,即檢査待處理中斷服務(wù)例程環(huán)形隊列pISRlist是否非空,若非空則依次取出隊列中所記錄的中斷服務(wù)例程并調(diào)用執(zhí)行它;(2.12)執(zhí)行操作系統(tǒng)任務(wù)調(diào)度;(2.13)結(jié)束該操作系統(tǒng)服務(wù)操作并返回。3)操作系統(tǒng)任務(wù)調(diào)度的實現(xiàn)如下(3.1)查找下一個被執(zhí)行的最高優(yōu)先級的任務(wù)并切換任務(wù)上下文;(3.2)重置系統(tǒng)服務(wù)標(biāo)志、臨界區(qū)標(biāo)志和非實時中斷標(biāo)志,清空待處理中斷服務(wù)例程環(huán)形隊列;4)串口接收中斷的中斷處理程序的實現(xiàn)步驟如下(4.1)設(shè)置非實時中斷標(biāo)志,即賦值NRTIflag為1;(4.2)如果SSCflag為0,則進入步驟(4.3),否則跳轉(zhuǎn)到步驟(4.4);(4.3)保存操作系統(tǒng)上下文切換相關(guān)信息;(4.4)如果CSflag為1或者隊列pISRlist非空,則進入步驟(4.5),否則跳轉(zhuǎn)到步驟(4.7);(4.5)將串口接收中斷的中斷服務(wù)例程加入隊列pISRlist;(4.6)屏蔽串口接收中斷并跳轉(zhuǎn)到步驟(4.8);(4.7)執(zhí)行串口接收中斷的中斷服務(wù)例程;(4.8)重置非實時中斷標(biāo)志,即賦值NRTIflag為0;(4.9)如果SSCflag為0,則使用步驟(4.3)保存的上下文信息進行操作系統(tǒng)任務(wù)調(diào)度;(4.10;)結(jié)束該中斷處理程序并返回。5)將串口接收中斷的中斷處理程序注冊到HCS12微控制器中斷向量表的第20號的位置,將實時時鐘中斷的中斷服務(wù)例程直接注冊到HCS12微控制器的中斷向量表中的第7號的位置。針對上述的實現(xiàn),下面介紹在下述場景中本發(fā)明執(zhí)行的過程。在應(yīng)用本發(fā)明實現(xiàn)了ActivateTask(pTask)系統(tǒng)服務(wù)和串口接收中斷的中斷處理程序的SmartOSEKOS中運行的一個任務(wù)調(diào)用了系統(tǒng)服務(wù)ActivateTask(pTask),當(dāng)其執(zhí)行到步驟(2.9)的時候同時發(fā)生了2個中斷,即上述的實時時鐘中斷和串口接收中斷。時鐘中斷的中斷服務(wù)例程的功能是記錄時鐘中斷發(fā)生的次數(shù)從而可以計算系統(tǒng)時間;串口接收中斷的中斷服務(wù)例程的功能是使用操作系統(tǒng)服務(wù)ActivateTask(pTask)激活一個任務(wù)處理接收到的串口數(shù)據(jù)。當(dāng)任務(wù)調(diào)用系統(tǒng)服務(wù)ActivateTask(pTask)并執(zhí)行到步驟(2.9)的時候,已經(jīng)把系統(tǒng)服務(wù)標(biāo)志SSCflag賦值為1,臨界區(qū)標(biāo)志CSflag賦值為1。由于實時時鐘中斷是實時中斷,串口接收中斷是非實時中斷,因此實時時鐘中斷的優(yōu)先級大于串口接收中斷優(yōu)先級,從而優(yōu)先得到處理器的響應(yīng)。處理器從中斷向量表中得到實時時鐘中斷服務(wù)例程的入口,直接執(zhí)行實時時鐘中斷的中斷服務(wù)例程。實時時鐘中斷的中斷服務(wù)例程執(zhí)行結(jié)束后,處理器才響應(yīng)串口接收中斷。處理器從中斷向量表中得到串口接收中斷處理程序的入口,并依次執(zhí)行歩驟(4.1),(4.2),(4.4),(4.5),(4.6),(4.8),(4.9),(4.10)??梢姶诮邮罩袛嗟闹袛喾?wù)例程只是被加入隊列pISRlist,并沒有立刻執(zhí)行。串口接收中斷處理程序返回后,被中斷了的系統(tǒng)服務(wù)ActivateTask(pTask)繼續(xù)執(zhí)行后續(xù)的步驟(2.10),(2.11),(2.12),(2.13)。在步驟(2.11)中,串口接收中斷的中斷服務(wù)例程被執(zhí)行。從上述例子可以看出,本發(fā)明是不需要在操作系統(tǒng)的系統(tǒng)服務(wù)中執(zhí)行關(guān)閉中斷操作的。由于沒有關(guān)閉中斷,改善了中斷延遲,尤其是實時中斷的延遲。中斷延遲是使用最大中斷禁止時間來衡量的。在基于飛思卡爾的HCS12微控制器的開發(fā)板上對比運行采用常見方法實現(xiàn)的SmartOSEKOS和采用本發(fā)明后的優(yōu)化中斷延遲的SmartOSEKOS,微控制器HCS12的處理器為MC9S12DP256,頻率16MHz。在飛思卡爾提供的CodeWarriorDebugger上用模擬器運行,測試得到SmartOSEKOS部分系統(tǒng)服務(wù)的最大中斷禁止時間分別如表1所示。表l采用常見方法和本發(fā)明方法最大中斷禁止時間對比(單位CPU周期)<table>tableseeoriginaldocumentpage12</column></row><table>從表1可以看出,由于常見的實現(xiàn)操作系統(tǒng)服務(wù)的方法需要在系統(tǒng)服務(wù)中關(guān)閉中斷,從而導(dǎo)致系統(tǒng)服務(wù)的最大中斷禁止時間比較長。而采用本發(fā)明在系統(tǒng)服務(wù)中不需要關(guān)閉中斷,因此本發(fā)明的最大中斷禁止時間很短,此最大中斷禁止時間僅表現(xiàn)為如圖3所示的不可中斷的操作系統(tǒng)任務(wù)調(diào)度的時間,從而最大程度地改善了中斷延遲。權(quán)利要求1、一種改善嵌入式實時操作系統(tǒng)中斷延遲的方法,其特征在于該方法的步驟如下1)創(chuàng)建一個系統(tǒng)服務(wù)標(biāo)志,一個臨界區(qū)標(biāo)志,一個非實時中斷標(biāo)志和一個待處理中斷服務(wù)例程環(huán)形隊列;2)使用如下的流程編寫任意的操作系統(tǒng)服務(wù)(2.1)設(shè)置系統(tǒng)服務(wù)標(biāo)志;(2.2)如果本系統(tǒng)服務(wù)是在非實時中斷的中斷服務(wù)例程中調(diào)用的,即非實時中斷標(biāo)志被置位,則進入步驟(2.3),否則跳轉(zhuǎn)到步驟(2.8);(2.3)設(shè)置臨界區(qū)標(biāo)志;(2.4)訪問操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)完成本系統(tǒng)服務(wù)的功能;(2.5)重置臨界區(qū)標(biāo)志;(2.6)重置系統(tǒng)服務(wù)標(biāo)志;(2.7)跳轉(zhuǎn)到步驟(2.13);(2.8)設(shè)置臨界區(qū)標(biāo)志;(2.9)訪問操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)完成本系統(tǒng)服務(wù)的功能;(2.10)重置臨界區(qū)標(biāo)志;(2.11)按照先到先服務(wù)策略調(diào)用待處理中斷服務(wù)例程環(huán)形隊列中的中斷服務(wù)例程;(2.12)執(zhí)行操作系統(tǒng)任務(wù)調(diào)度;(2.13)結(jié)束該操作系統(tǒng)服務(wù)操作并返回;3)使用如下的流程實現(xiàn)操作系統(tǒng)的任務(wù)調(diào)度(3.1)查找下一個被執(zhí)行的任務(wù)并切換任務(wù)上下文;(3.2)重置系統(tǒng)服務(wù)標(biāo)志、臨界區(qū)標(biāo)志和非實時中斷標(biāo)志,清空待處理中斷服務(wù)例程環(huán)形隊列;4)使用如下的流程編寫任意的非實時中斷的中斷處理程序(4.1)設(shè)置非實時中斷標(biāo)志;(4.2)如果系統(tǒng)服務(wù)標(biāo)志沒有被置位,則進入步驟(4.3),否則跳轉(zhuǎn)到步驟(4.4);(4.3)保存操作系統(tǒng)上下文切換相關(guān)信息;(4.4)如果臨界區(qū)標(biāo)志被置位或者待處理中斷服務(wù)例程環(huán)形隊列非空,則進入步驟(4.5),否則跳轉(zhuǎn)到步驟(4.7);(4.5)將本中斷處理程序?qū)?yīng)的中斷服務(wù)例程加入待處理中斷服務(wù)例程環(huán)形隊列;(4.6)屏蔽本中斷并跳轉(zhuǎn)到步驟(4.8);(4.7)直接調(diào)用本中斷處理程序?qū)?yīng)的中斷服務(wù)例程;(4.8)重置非實時中斷標(biāo)志;(4.9)如果系統(tǒng)服務(wù)標(biāo)志沒有被置位,則使用步驟(4.3)保存的上下文信息進行操作系統(tǒng)任務(wù)調(diào)度;(4.10)結(jié)束該中斷處理程序并返回;5)將非實時中斷的中斷處理程序注冊到中斷向量表,將實時中斷的中斷服務(wù)例程注冊到中斷向量表。全文摘要本發(fā)明公開了一種改善嵌入式實時操作系統(tǒng)中斷延遲的方法。該方法先創(chuàng)建系統(tǒng)服務(wù)標(biāo)志、臨界區(qū)標(biāo)志、非實時中斷標(biāo)志和待處理中斷服務(wù)例程環(huán)形隊列,然后使用特定步驟編寫任意的操作系統(tǒng)服務(wù)、非實時中斷的中斷處理程序和操作系統(tǒng)的任務(wù)調(diào)度,最后將非實時中斷的中斷處理程序注冊到中斷向量表,將實時中斷的中斷服務(wù)例程注冊到中斷向量表。本發(fā)明使得操作系統(tǒng)的系統(tǒng)服務(wù)的實現(xiàn)過程中永遠不執(zhí)行關(guān)閉中斷操作,可以縮短最大中斷禁止時間,減少中斷延遲,從而提高嵌入式實時操作系統(tǒng)的實時性。本發(fā)明實現(xiàn)中斷管理所需要的時間開銷和空間開銷很少,非常適合微內(nèi)核嵌入式實時操作系統(tǒng)。文檔編號G06F9/46GK101639791SQ20091010189公開日2010年2月3日申請日期2009年8月31日優(yōu)先權(quán)日2009年8月31日發(fā)明者吳朝暉,麗周,霖周,張呂紅,張培鋒,紅李,楊國青申請人:浙江大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1