馬婧 馮鋒
摘要:由于實(shí)時(shí)系統(tǒng)內(nèi)核中的一個(gè)重要指標(biāo)是中斷關(guān)閉總時(shí)間,因此選擇實(shí)時(shí)內(nèi)核操作系統(tǒng)五大功能中的中斷管理分析研究。為解決之前所學(xué)的中斷管理純理論知識(shí)晦澀難懂的問(wèn)題,通過(guò)深入分析臨界段源代碼的開中斷、中斷關(guān)閉的時(shí)間、時(shí)鐘節(jié)拍以及調(diào)度器上鎖,完成了μC/OS-III實(shí)時(shí)內(nèi)核中斷管理機(jī)制的分析研究,方便學(xué)者對(duì)中斷管理機(jī)制更加輕松透徹理解。
關(guān)鍵詞:實(shí)時(shí)內(nèi)核;中斷管理;μC/OS-III;臨界段
中圖分類號(hào):TP316.2? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)16-0010-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
Research on Interrupt Management Mechanism of? ? μC/OS-III Real-time Kernel
MA Jing, FENG Feng*
(School of Information Engineering, Ningxia University, Yinchuan 750021, China)
Abstract: Because one of the most important indexes in the real-time system kernel is the total time of interrupt shutdown, we choose the interrupt management analysis among the five functions of real-time kernel operating system. In order to solve the problem that the pure theoretical knowledge of interrupt management is obscure, the interrupt management mechanism of μC/OS-III real-time kernel is analyzed and researched by deeply analyzing the open interrupt, interrupt closing time, clock beat and scheduler lock of critical segment source code, which is convenient for readers to understand the interrupt management mechanism more easily and thoroughly.
Key words: Real time kernel; Interrupt management; μC/OS-III; Critical section
嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性可以很好地支持嵌入式系統(tǒng)的多進(jìn)程,使得嵌入式應(yīng)用程序的設(shè)計(jì)和開發(fā)更加容易、方便[2],并且它具有多種中斷的級(jí)別,因此,它逐漸廣泛地涉及和應(yīng)用于各種嵌入式的領(lǐng)域,對(duì)于嵌入式實(shí)時(shí)操作系統(tǒng)的中斷管理研究也因此變得更加重要。該嵌入式系統(tǒng)的實(shí)時(shí)性由系統(tǒng)的任務(wù)響應(yīng)的時(shí)間和速度決定的,大部分的任務(wù)中斷響應(yīng)的時(shí)間由系統(tǒng)的中斷速度決定。嵌入式實(shí)時(shí)系統(tǒng)中斷管理技術(shù)直接影響到系統(tǒng)的實(shí)時(shí)響應(yīng)性能。因此,有必要對(duì)系統(tǒng)μC/OS-III的中斷響應(yīng)管理進(jìn)行深入的中斷管理研究。學(xué)者閱讀書本中關(guān)于中斷管理的純理論知識(shí)不好理解,因此通過(guò)分析源代碼從根本對(duì)中斷管理深入了解。
1 概述
uC/OS-III實(shí)時(shí)內(nèi)核是一個(gè)完全可擴(kuò)展的,可固化的和搶占式的實(shí)時(shí)任務(wù)管理內(nèi)核,它可以管理的實(shí)時(shí)任務(wù)個(gè)數(shù)很多而且不受時(shí)間的限制[1]。它也是第三代實(shí)時(shí)內(nèi)核,提供了我們現(xiàn)代實(shí)時(shí)內(nèi)核所期望的所有任務(wù)管理功能,這包括實(shí)時(shí)任務(wù)資源的管理、同步、內(nèi)部實(shí)時(shí)任務(wù)管理和交流等功能[3]。
uC/OS-III是根據(jù)ANSI-C標(biāo)準(zhǔn)寫的。內(nèi)核源文件代碼的基本規(guī)范性和標(biāo)準(zhǔn)到底是什么:micriumu這是內(nèi)核團(tuán)隊(duì)的一種基本文化。這些軟件源代碼嚴(yán)格地說(shuō)被要求必須遵循他們的代碼標(biāo)準(zhǔn)并且在他們的軟件產(chǎn)品內(nèi)部必須有完整的一本包括帶有這個(gè)代碼例子的源代碼使用說(shuō)明書以及它用于用來(lái)展示他們的源代碼產(chǎn)品開發(fā)者他們是怎樣用來(lái)進(jìn)行這些工作的。
中斷關(guān)閉的整個(gè)時(shí)間是實(shí)時(shí)多任務(wù)內(nèi)核的一個(gè)重要指標(biāo)。實(shí)時(shí)多任務(wù)內(nèi)核將在啟動(dòng)關(guān)鍵段代碼之前停止中斷,并在執(zhí)行關(guān)鍵段代碼之后恢復(fù)中斷。打開中斷關(guān)閉的時(shí)間越長(zhǎng),系統(tǒng)等待中斷的時(shí)間就越長(zhǎng)。
中斷響應(yīng)的時(shí)間幾乎涵蓋了所有的中斷響應(yīng)機(jī)制需要引入的所有時(shí)間消耗,通常是從處理器檢測(cè)到相應(yīng)中斷時(shí)的代碼開始。
2 中斷管理
2.1 開中斷/關(guān)中斷
關(guān)中斷和開中斷是單獨(dú)享用資源最簡(jiǎn)便最快的方法。其示意性代碼如下程序所示:
uC/OS-III對(duì)內(nèi)部的變量與數(shù)據(jù)結(jié)構(gòu)進(jìn)行訪問(wèn)時(shí),絕大部分使用的是這種方法,以此來(lái)確保對(duì)變量與數(shù)據(jù)結(jié)構(gòu)的“原子”操作。然而關(guān)中斷和開中斷事實(shí)上是CPU相關(guān)函數(shù),而非系統(tǒng)相關(guān)函數(shù)。
將0值賦給OS_CFG_ISR_POST_DEFERRED_EN后,進(jìn)入臨界段之前,uC/OS-III中斷會(huì)被關(guān)閉,在離開臨界段之后,中斷會(huì)被打開。{這里所說(shuō)的CPU寄存器是指輔助CPU進(jìn)行處理的多個(gè)寄存器}
OS_CRITICAL_EXIT()和OS_CRITICAL_EXIT_NO_SCHED()都會(huì)調(diào)用uC/CPU的宏CPU_CRITICAL_EXIT()。CPU_CRITICAL_EXIT()調(diào)用CPU_SR_Restore()。CPU_SR_Restore( )將保存的寄存器值還原到CPU寄存器,操作系統(tǒng)OS_CRITICAL_ENTER()調(diào)用前就是這個(gè)狀態(tài)。
2.2 測(cè)量中斷關(guān)閉時(shí)間
uC/OS-III擁有測(cè)量關(guān)中斷時(shí)間的功能。將CPU_CFG.H中的 CPU_CFG_TIME_MEAS_INT_DIS_EN設(shè)置為1時(shí)使用該功能。
測(cè)量在任務(wù)的每個(gè)結(jié)束之前和中斷結(jié)束之后開始。測(cè)量系統(tǒng)的功能分別保存兩個(gè)關(guān)閉中斷方面的測(cè)量值,任務(wù)運(yùn)行總的關(guān)中斷測(cè)量時(shí)間,每個(gè)任務(wù)最后關(guān)閉中斷的持續(xù)時(shí)間。因此,有了用戶測(cè)量,就可以根據(jù)上一次任務(wù)的關(guān)中斷時(shí)間對(duì)其進(jìn)行優(yōu)化。
每個(gè)任務(wù)的關(guān)中斷時(shí)間在上文保存的時(shí)候被保存于 OS_TCB{我將上下文切換分成兩個(gè)部分:上文保存、下文載入}
時(shí)間戳控制器通常位于TS內(nèi)的CPU中。時(shí)間戳的關(guān)閉中斷速率取決于來(lái)自整個(gè)CPU的速率。
中斷關(guān)閉時(shí)間受處理器指令執(zhí)行速度和存儲(chǔ)器訪問(wèn)速度的影響。如果硬件設(shè)計(jì)在存儲(chǔ)器訪問(wèn)時(shí)增加了額外的等待周期,則會(huì)導(dǎo)致中關(guān)閉時(shí)間顯著增加。
2.3 時(shí)鐘節(jié)拍
OSTimeTick()函數(shù)在時(shí)鐘節(jié)拍中斷中必須被調(diào)用,該函數(shù)的示意性代碼如下所示:
(1)來(lái)自O(shè)STimeTickHook函數(shù)的時(shí)鐘節(jié)拍中斷服務(wù)程序調(diào)用。這個(gè)干預(yù)功能使得uC/OS-III移植者能夠在時(shí)鐘節(jié)拍觸摸后執(zhí)行附加操作。這些用戶代碼可以放置在一個(gè)介入函數(shù)中,介入函數(shù)在時(shí)鐘節(jié)拍函數(shù)中最先被調(diào)用,這對(duì)于一些應(yīng)用是有利的。例如在一些介入函數(shù)中讀取傳感器,可以保證采樣時(shí)刻的均勻,避免其他代碼執(zhí)行時(shí)間的變化導(dǎo)致采樣時(shí)刻的抖動(dòng);又比如可以在介入函數(shù)中更新脈寬調(diào)制寄存器,保證輸出脈沖的精度。
(2)如果使用延遲發(fā)布模式,uC/OS-III讀取實(shí)時(shí)信息,將函數(shù)的請(qǐng)求和相關(guān)參數(shù)加入中斷隊(duì)列中,并且延遲時(shí)間標(biāo)記工作。然后向中斷隊(duì)列發(fā)送信號(hào),處理與中斷隊(duì)列相對(duì)應(yīng)的時(shí)鐘輸出。
(3)如果使用直接發(fā)布模式,則uC/OS-III將直接向時(shí)鐘節(jié)拍任務(wù)發(fā)信號(hào),使其能夠進(jìn)行延時(shí)處理和超時(shí)判斷。
(4)利用uC/OS-III運(yùn)行時(shí)間片輪轉(zhuǎn)調(diào)度算法來(lái)判斷當(dāng)前分配的調(diào)度是否已經(jīng)用完。
(5)uC/OS-III是可剝奪的實(shí)時(shí)內(nèi)核,一個(gè)按鍵或類似的非定時(shí)中斷也可將應(yīng)用程序從低耗模式中喚醒。當(dāng)然,沒(méi)有時(shí)鐘節(jié)拍意味著應(yīng)用程序不能進(jìn)行延遲或無(wú)法判斷超時(shí),這是低功耗應(yīng)用程序需要面對(duì)的問(wèn)題[4]。
2.4 調(diào)度器上鎖
當(dāng)OS_CFG_ISR_POST_DEFERRED_EN設(shè)置為1時(shí),uC/OS-III在鎖定調(diào)度器后進(jìn)入臨界區(qū),并且在打開調(diào)度器前離開臨界段。
當(dāng)OS_CRITICAL_ENTER()函數(shù)中OSSchedLockNestingCtr值上升時(shí),給一個(gè)調(diào)度器進(jìn)行上鎖。這是一個(gè)鎖定變量,用于確定一個(gè)任務(wù)調(diào)度器是否被打開。如果它不為0,則調(diào)度器關(guān)閉或被鎖。
OS_CRITICAL_EXIT()函數(shù)中將OSSchedLockNestingCtr值減少時(shí),調(diào)度器的鎖被打開。{如果調(diào)度器鎖嵌套值一直減為0時(shí),就會(huì)調(diào)用調(diào)度器}
OSSchedLockNestingCtr所有的值隨著OS_CRITICAL_EXIT_NO_SCHED()的一直遞減也被更改,有所不同的是,當(dāng)該值減少到0時(shí),不能繼續(xù)減少,因此不再調(diào)用該調(diào)度器。
調(diào)度器上鎖模式下,這幾個(gè)宏定義如下程序:
3 結(jié)語(yǔ)
本文介紹了μC/OS-III實(shí)時(shí)內(nèi)核以及源代碼的寫作標(biāo)準(zhǔn),通過(guò)分析與中斷管理相關(guān)的源代碼更深入的了解中斷管理。解決了學(xué)者閱讀書本上關(guān)于中斷管理純理論知識(shí)晦澀難懂的問(wèn)題,學(xué)者通過(guò)閱讀上面分析過(guò)的源代碼較輕松易懂的了解中斷管理機(jī)制。
參考文獻(xiàn):
[1] Labrosse Jean J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅲ[M]. 北京:北京航空航天大學(xué)出版社,2012.
[2] 秦玉華.嵌入式操作系統(tǒng)實(shí)時(shí)性的分析與研究[D].青島理工大學(xué),2010.
[3] 王申良.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ的研究[D].安徽理工大學(xué),2011.
[4] 宮輝,龔光華,黃土琛,邵貝貝.μC/OS-Ⅲ中的高效時(shí)鐘節(jié)拍管理機(jī)制[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(12):79-81.
[5] 祥袁志,甘正良.基于μC/OS-Ⅲ的實(shí)時(shí)內(nèi)核中斷管理機(jī)制[J].計(jì)算機(jī)工程,2015,41(11):100-105.
【通聯(lián)編輯:王力】