馮 沖,吳堯輝,吳昊珍
(1.河南理工大學 電氣工程與自動化學院,河南 焦作 454150;2.河南理工大學 許繼電氣股份有限公司煤礦井下智能供電系統(tǒng)實驗室,河南 焦作 454150;3.鄭州工商學院,河南 鄭州 451400)
嵌入式實時系統(tǒng)具有時間約束性、可預測性、可靠性等特點,其中實時性是衡量系統(tǒng)優(yōu)劣的關(guān)鍵因素。嵌入式實時系統(tǒng)一般通過中斷的方式對外部異常事件進行處理,其實時性能關(guān)乎中斷的處理方式。
傳統(tǒng)嵌入式實時系統(tǒng)外設(shè)中斷優(yōu)先級均高于操作系統(tǒng)內(nèi)部任務優(yōu)先級,在未關(guān)閉硬件中斷的情況下,外設(shè)中斷發(fā)生就立即響應并執(zhí)行ISR(Interrupt Service Routines)。μC/OS-III實時操作系統(tǒng)可以選擇以線程的方式處理中斷,中斷發(fā)生后僅在ISR中做簡單處理(例如向任務發(fā)布消息、信號量等),然后調(diào)用中斷服務并以任務的方式進行處理。兩種中斷執(zhí)行模式都有各自的優(yōu)缺點[1-3]。
μC/OS-III實時操作系統(tǒng)具有源代碼公開、可裁剪、可固化等優(yōu)點,其第三代內(nèi)核的優(yōu)點更為突出,不僅無任務數(shù)量限制,還可以直接向任務發(fā)送消息并支持時間片輪轉(zhuǎn)調(diào)度[4-6]。
μC/OS-III實時操作系統(tǒng)提供兩種中斷模式,如圖1和圖2所示。通過OS_cfg.h文件,將OS_CFG_ISR_POST_DEFERRED_EN置0或1。置0時使用直接發(fā)布模式,在未關(guān)中斷情況下,外設(shè)只要產(chǎn)生IRQ(Interrupt Request)信號,無論此時IRQ信號優(yōu)先級處于何種級別,都會立即執(zhí)行該ISR。置1時使用延遲發(fā)布模式,當中斷發(fā)生后執(zhí)行ISR。但該模式僅僅是向中斷隊列OS_INT_Q發(fā)送信號,異常事件的處理仍需轉(zhuǎn)向IST中詳細處理[7-11]。
圖1 直接發(fā)布模式Figure 1. Direct release mode
圖2 延遲發(fā)布模式Figure 2. Delayed release mode
μC/OS-III中斷直接發(fā)布模式如圖1所示,外設(shè)中斷產(chǎn)生IRQ并調(diào)用ISR,在ISR中詳細處理可能使某任務處于就緒態(tài),處理完成后由中斷退出調(diào)度。通過比較該任務和被中斷任務優(yōu)先級選擇執(zhí)行,從中斷退出調(diào)度到優(yōu)先性更高的任務執(zhí)行期間,μC/OS-III均以關(guān)中斷的方式對臨界段進行保護。
μC/OS-III中斷延遲發(fā)布模式如圖2所示,外設(shè)中斷產(chǎn)生IRQ并調(diào)用ISR,但ISR只向中斷隊列OS_INT_Q發(fā)送信號,隨后中斷處理任務OS_IntQTask就緒。又由于該任務在系統(tǒng)中的任務優(yōu)先級為0(最高優(yōu)先級)立即運行,發(fā)布信號量或消息給對應任務。若發(fā)布的任務優(yōu)先級比被中斷的任務優(yōu)先級高,則立即搶占CPU執(zhí)行權(quán),反之則返回被中斷任務繼續(xù)執(zhí)行。關(guān)閉中斷時間段只在這一極短的過程中,大量的臨界段代碼處理過程則被放在了OS_IntQTask任務中,此處可開啟鎖定任務調(diào)度來確保臨界段代碼的完整執(zhí)行。中斷延遲發(fā)布模式將IRQ通過ISR處理轉(zhuǎn)為IST處理方式,縮短了中斷關(guān)閉時間。
雖然μC/OS-III增加中斷延遲發(fā)布模式可以將ISR(Interrupt Service Thread)轉(zhuǎn)為線程方式處理,減少中斷關(guān)閉時間,但是此種中斷處理方式也有不足之處。由于中斷隊列OS_IntQTask任務在系統(tǒng)中為最高優(yōu)先級任務,中斷以IST方式處理情況,并沒有細分,以至于處理粒度較粗,進而導致低優(yōu)先級的ISR仍會干擾緊急任務的執(zhí)行。μC/OS-III實時操作系統(tǒng)沒有完全基于優(yōu)先級剝奪CPU執(zhí)行,外設(shè)中斷任務始終高于系統(tǒng)管理任務的優(yōu)先級,這將會影響緊急任務的執(zhí)行。
針對章節(jié)1.2提出的μC/OS-III中斷模式缺點,本研究優(yōu)化了μC/OS-III中斷管理機制,優(yōu)化后的中斷管理機制能夠?qū)崿F(xiàn)高優(yōu)先級IRQ的快速響應并縮短緊急任務的截止期。本文以任務的最大響應時間來比較優(yōu)化前后μC/OS-III中斷管理機制的性能。
無論是μC/OS-III中斷處理粒度較粗還是低優(yōu)先級外設(shè)中斷對緊急任務執(zhí)行造成的干擾,一定程度上是μC/OS-III實時操作系統(tǒng)對外設(shè)中斷的管理不到位造成的。因此,改進μC/OS-III中斷管理機制,使其完全基于μC/OS-III優(yōu)先級剝奪原則,可實現(xiàn)優(yōu)先級的統(tǒng)一分配。
在系統(tǒng)任務設(shè)計時,將每一個IRQ分別對應ISR和IST。該IRQ以ISR或IST方式執(zhí)行取決于當前正在執(zhí)行任務優(yōu)先級是否高于中斷任務。
情況1中斷任務低于當前執(zhí)行任務的優(yōu)先級則以IST方式執(zhí)行。IRQ調(diào)用ISR并向?qū)腎ST發(fā)送信號量,在IST得到信號量后處于就緒態(tài),等待高優(yōu)先級的當前執(zhí)行任務結(jié)束后,再根據(jù)該IST任務和其他任務的優(yōu)先級剝奪CPU使用權(quán);
情況2中斷任務高于當前執(zhí)行任務的優(yōu)先級,則以ISR方式執(zhí)行。IRQ直接調(diào)用ISR并立即剝奪當前執(zhí)行任務的CPU使用權(quán)。雖然這種情況會出現(xiàn)中斷響應時間增加,以及緊急中斷不能及時響應等傳統(tǒng)中斷管理模式的缺點,但是該模式可以滿足高優(yōu)先級ISR及時響應并盡可能減少中斷任務對其他任務的干擾[12-15]。
在盡量不更改內(nèi)核代碼的情況下進行過程優(yōu)化,主要涉及正在執(zhí)行任務優(yōu)先級和中斷任務優(yōu)先級的獲取和比較。優(yōu)化后的中斷模式處理如圖3所示,具體過程為:(1)當中斷發(fā)生時,首先獲取此IRQ的ID,并通過此ID獲取中斷源。通過IRQ_Prio=INT_PRIO[ID]來獲得中斷任務優(yōu)先級;(2)獲取最高級別就緒任務的Prio,當中斷發(fā)生時讀取并賦值給Current_Prio;(3)比較判斷IRQ_Prio與Current_Prio的優(yōu)先級,優(yōu)先級值越低優(yōu)先級越高。中斷以ISR執(zhí)行還是以IST執(zhí)行并不是一成不變的,具體要與當前正在執(zhí)行的任務優(yōu)先級比較。若IRQ_Prio的值大,則中斷優(yōu)先級越低,給對應IST發(fā)送信號量使其處于就緒態(tài),反之則立即執(zhí)行對應的ISR;(4)獲取最高級別就緒任務Prio后賦值給Current_Prio并執(zhí)行此任務,該任務可能是普通任務也可能是IST。
圖3 優(yōu)化后的中斷模式處理流程圖Figure 3. Flowchart of optimized interrupt mode processing
由于高優(yōu)先級IRQ比當前正在執(zhí)行任務的優(yōu)先級還高,產(chǎn)生后會立即執(zhí)行,改進中斷模式與μC/OS-III直接發(fā)布模式的任務響應時間一樣,所以本文不做討論。本文主要討論在μC/OS-III中斷管理模式下的低優(yōu)先級IRQ,對比直接發(fā)布模式、延遲發(fā)布模式和改進后模式中任務最大響應時間,進一步驗證改進后模式的優(yōu)化效果。
在μC/OS-III中選擇直接發(fā)布模式時的任務調(diào)度如圖4所示。優(yōu)先級較高的TASK2運行時發(fā)生IRQ1和IRQ2,并立即執(zhí)行對應ISR1和ISR2。在ISR2運行后使TASK1處于就緒態(tài),由于TASK2優(yōu)先級比TASK1優(yōu)先級高,執(zhí)行完TASK2后任務切換執(zhí)行TASK1任務。
圖4 直接發(fā)布模式時任務調(diào)度Figure 4. Task scheduling in direct release mode
在直接發(fā)布模式下,TASK2任務的最大響應時間為
(1)
式中,Ti=ti+δ。Ti為TASK2執(zhí)行時間總和,包括實際執(zhí)行時間ti和任務切換時間δ;tISRm是IRQ2執(zhí)行時間;α1是ISR2運行后使TASK1處于就緒態(tài)的時間;β1是進入和退出中斷進行現(xiàn)場保護時間;m是執(zhí)行任務過程中發(fā)生中斷數(shù)目。
在μC/OS-III中選擇延遲發(fā)布模式時任務調(diào)度如圖5所示,高優(yōu)先級的TASK2運行時發(fā)生IRQ1,并立即執(zhí)行對應ISR1,ISR1只向中斷隊列OS_INT_Q發(fā)送信號。隨后中斷處理任務OS_IntQTask就緒并以最高優(yōu)先級立即運行,發(fā)布信號量或消息給對應任務TASK1使其處于就緒態(tài)。TASK2以較高優(yōu)先級執(zhí)行完后任務切換執(zhí)行TASK1任務。
圖5 延遲發(fā)布模式時任務調(diào)度Figure 5. Task scheduling in delayed release mode
在直接發(fā)布模式下,TASK2任務的最大響應時間為
(2)
式中,TISRm=tISRm+δ。α1是ISR1向中斷隊列OS_INT_Q發(fā)送信號時間;γ是中斷處理任務OS_IntQTask發(fā)送信號使TASK1處于就緒態(tài)的時間;其他變量和式(1)中的變量相同。
μC/OS-III改進模式的任務調(diào)度如圖6所示。在TASK1執(zhí)行過程中發(fā)生IRQ1,IRQ1仍會執(zhí)行ISR1,但是主要以IST方式處理,IST處理后向低優(yōu)先級的TASK1發(fā)送信號量或消息。
圖6 改進模式時任務調(diào)度Figure 6. Task scheduling in improved mode
在改進模式下,TASK2任務的最大響應時間為式(3)。
(3)
由于IRQ1以IST方式處理,并且優(yōu)先級低于TASK2,所以不會占用TASK2的執(zhí)行時間,因此消除了ISR消耗tISRm時間。
(4)
(5)
式(4)和式(5)均大于0,驗證了優(yōu)化后的中斷模式能夠縮短高優(yōu)先級任務TASK2的任務截止時間,也可以看出在3種模式中,優(yōu)化后的μC/OS-III中斷模式對任務響應時間最少。
仿真實驗使用帶有ARM的STM32處理器,MUC選擇高性能且低功耗,主頻為72 MHz的Cortex-M3作為主芯片[16-17]。硬件Systick定時器為μC/OS-III提供時鐘節(jié)拍任務,可根據(jù)應用任務要求更改時鐘節(jié)拍頻率,使頻率至少是50 Hz,另外將頻率設(shè)置為整數(shù)倍,此處為200 Hz。按照章節(jié)2.2對μC/OS-III部分內(nèi)核進行修改[18-19],實現(xiàn)具體功能。實驗主要討論低優(yōu)先級中斷對緊急任務截止期的影響。
通過設(shè)計定時器任務和時鐘節(jié)拍任務,可以得到周期性的中斷信號。定時器任務優(yōu)先級高于時鐘節(jié)拍任務,一般都將時鐘節(jié)拍任務設(shè)置成中等優(yōu)先級。設(shè)置定時器任務執(zhí)行周期為100 ms,任務執(zhí)行期間可發(fā)生多個時鐘節(jié)拍中斷。
通過μC/Probe對系統(tǒng)運行檢測,如圖7所示,圖中能夠顯示任務狀態(tài)、任務優(yōu)先級、切換頻率和任務堆棧等。由圖7可知,優(yōu)化后的μC/OS-III實時操作系統(tǒng)能夠穩(wěn)定運行。由于高優(yōu)先級中斷為ISR立即執(zhí)行方式,中斷的及時響應減輕了CPU負載能力,改進后CPU利用率為28.32%,相較于直接發(fā)布模式和延遲發(fā)布模式降低了約5%,且隨任務數(shù)量的增加優(yōu)化效果會更加明顯。定時器任務的切換次數(shù)和鎖任務調(diào)度器時間明顯減少,這是因為低優(yōu)先級中斷對高優(yōu)先級任務的干擾有所減少。但是,最大中斷關(guān)閉時間有所增加,也正是犧牲了低優(yōu)先級中斷任務的及時響應才換來了緊急任務的截止期縮短,不過對于一些特別緊急的任務,增加的時間是可被接受的。
圖7 系統(tǒng)運行檢測Figure 7. System operation detection diagram
通過如圖8所示的串口助手接收數(shù)據(jù)可知,對應3種中斷模式下定時器任務截止期數(shù)值。直接發(fā)布模式和延遲發(fā)布模式中定時器任務隨著中斷執(zhí)行時間的增加變化較大,這也要求中斷ISR盡可能短小簡單的原因。改進中斷模式中的低優(yōu)先級中斷以IST任務執(zhí)行,而IST任務優(yōu)先級較低不會剝奪CPU執(zhí)行權(quán),對緊急任務的截止期沒有影響,所以隨著中斷執(zhí)行時間的增加變化并不大。
圖8 緊急任務截止期數(shù)值Figure 8. Urgent task deadline value
本文通過3種中斷模式理論分析以及實驗與結(jié)果表明,中斷任務和內(nèi)核管理的普通任務在基于完全優(yōu)先級剝奪原則下,可以使緊急任務的截止期縮短,降低優(yōu)先級中斷對緊急任務的干擾。雖然基于完全優(yōu)先級剝奪更加符合任務優(yōu)先運行的實際情況,但是改進中斷模式會導致中斷響應時間增加,并且可能造成中斷的丟失。因此,后續(xù)工作應該優(yōu)化中斷對任務的影響,并進一步縮短中斷響應的時間。