亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        μC/OS -III為縮短中斷關(guān)閉時(shí)間作出的改進(jìn)

        2013-06-25 02:46:12諶普江龔光華宮輝邵貝貝
        關(guān)鍵詞:服務(wù)程序任務(wù)調(diào)度內(nèi)核

        諶普江,龔光華,宮輝,邵貝貝

        (1.清華大學(xué) 工程物理系,北京 100084;2.清華大學(xué) 粒子技術(shù)與輻射成像教育部重點(diǎn)實(shí)驗(yàn)室;3.清華大學(xué) 飛思卡爾培訓(xùn)中心)

        引 言

        μC/OS-III是一款全新的實(shí)時(shí)內(nèi)核,源于世界上流行的實(shí)時(shí)內(nèi)核μC/OS-II。較μC/OS-II,μC/OS-III做了很多改進(jìn)。其中,很重要的一點(diǎn)就是為了縮短中斷關(guān)閉時(shí)間作出的改進(jìn)。本文將深入分析為什么這些改進(jìn)能夠使得μC/OS-III的實(shí)時(shí)性能得到提升。

        1 中斷簡(jiǎn)介

        所謂中斷,其實(shí)就是一種硬件機(jī)制,用于通知CPU有一個(gè)異步事件發(fā)生了。由于μC/OS-III是面向以ARM Cortex為代表的高端32位CPU的,因此,本文將以ARM Cortex-M3為例來(lái)介紹一般CPU對(duì)中斷的處理。

        如圖1所示,中斷控制器NVIC和ARM Cortex-M3 CPU緊密合作完成中斷的處理。中斷控制器NVIC負(fù)責(zé)接收所有的中斷請(qǐng)求。NVIC會(huì)把當(dāng)前優(yōu)先級(jí)最高的中斷請(qǐng)求的服務(wù)地址傳遞給CPU。Cortex-M3CPU在確認(rèn)中斷后,會(huì)自動(dòng)將R0~R2、R12~R15入棧保存[1],并跳轉(zhuǎn)執(zhí)行中斷服務(wù)程序。中斷服務(wù)程序執(zhí)行完后,R0~R2、R12~R15會(huì)自動(dòng)出棧。

        圖1 ARM Cortex M3中斷處理示意圖

        通過(guò)對(duì)中斷的處理,CPU能夠在外部事件發(fā)生的時(shí)候立刻進(jìn)行處理,從而滿足系統(tǒng)的實(shí)時(shí)性要求。在一些特殊情況下,CPU需要通過(guò)特殊的指令來(lái)關(guān)中斷。然而,需要引起特別注意的是,關(guān)中斷會(huì)增加中斷延遲時(shí)間,可能導(dǎo)致后續(xù)的中斷請(qǐng)求丟失。嵌入式系統(tǒng)中斷源眾多,對(duì)實(shí)時(shí)性要求高,中斷關(guān)閉的時(shí)間越短越好,中斷處理程序運(yùn)行時(shí)間越短越好。中斷關(guān)閉時(shí)間的長(zhǎng)短是實(shí)時(shí)內(nèi)核最重要的一個(gè)指標(biāo)。

        2 μC/OS -III作出的改進(jìn)

        在μC/OS-III中,如果一個(gè)中斷對(duì)應(yīng)的事件不需要任務(wù)知道,不需要給任務(wù)發(fā)送信號(hào)或者消息,推薦用戶把這個(gè)中斷寫成無(wú)需內(nèi)核參與的中斷;如果這個(gè)中斷需要給任務(wù)發(fā)送信號(hào)或者消息,用戶可以選擇直接發(fā)布或者延遲發(fā)布這兩種發(fā)布模式中的一種。

        2.1 無(wú)需內(nèi)核參與的中斷

        在很多情況下,中斷需要做的處理非常簡(jiǎn)單,比如一些I/O中斷,并不需要內(nèi)核知道。這種情況下典型的無(wú)需內(nèi)核參與的中斷服務(wù)程序示意代碼如下:

        在無(wú)需內(nèi)核參與的中斷服務(wù)程序中(1)處不要開(kāi)中斷,因?yàn)殚_(kāi)中斷后,其他中斷可能嵌套,也可能調(diào)用μC/OS-III的內(nèi)核函數(shù),導(dǎo)致調(diào)度回到高優(yōu)先級(jí)任務(wù)繼續(xù)執(zhí)行。而內(nèi)核并不知道有這個(gè)中斷,所以這個(gè)中斷的完成時(shí)間將會(huì)變得特別長(zhǎng)。

        筆者建議,I/O中斷處理程序最好使用這種方式。另外,在ARM Cortex-M3中,因?yàn)镽0~R2是自動(dòng)入棧和出棧的,簡(jiǎn)單的I/O處理中斷盡量只使用R0~R2,這樣可以省掉中斷服務(wù)程序中保存和恢復(fù)寄存器的步驟,縮短了中斷服務(wù)程序的運(yùn)行時(shí)間。

        2.2 需要內(nèi)核參與的中斷

        一個(gè)中斷對(duì)應(yīng)的事件正好是一個(gè)任務(wù)正在等待的事件,這意味著這個(gè)中斷需要向?qū)?yīng)的任務(wù)發(fā)送信號(hào)或者消息。μC/OS-III由中斷向任務(wù)發(fā)送信號(hào)或者消息有兩種模式。這兩種模式分別為直接發(fā)布(Direct Post)和延遲發(fā)布(Deferred Post)模式。所謂直接發(fā)布,是指在中斷服務(wù)函數(shù)中調(diào)用各種post函數(shù)時(shí),會(huì)立即完成post操作;而延遲發(fā)布,是指在中斷服務(wù)函數(shù)中調(diào)用各種post函數(shù)時(shí),不會(huì)立即完成post操作,該操作會(huì)被緩存起來(lái)。

        在分析μC/OS-III的這兩種發(fā)布模式之前,先看看μC/OS-III中典型的需要內(nèi)核參與的中斷服務(wù)程序的結(jié)構(gòu)。需要內(nèi)核參與的中斷服務(wù)程序[1]示意性代碼如下:

        2.2.1 直接發(fā)布

        μC/OS-II中使用的是直接發(fā)布模式,μC/OS-III中保留了這個(gè)模式。

        圖2為直接發(fā)布模式的示意圖,當(dāng)一個(gè)外設(shè)產(chǎn)生中斷,并向CPU發(fā)出中斷請(qǐng)求,然后CPU執(zhí)行中斷服務(wù)程序。這個(gè)需要內(nèi)核參與的中斷服務(wù)程序在示意性代碼標(biāo)志(1)這個(gè)步驟中,將會(huì)調(diào)用 OSSemPost()、OSTaskSem-Post()、OSFlagPost()、OSQPost()和 OSTaskQPost()這5個(gè)發(fā)布函數(shù)其中的一個(gè)給任務(wù)發(fā)消息或信號(hào),并且這些post操作會(huì)被立即執(zhí)行,使得正在等待這個(gè)中斷發(fā)生的任務(wù)進(jìn)入就緒狀態(tài)。

        圖2 直接發(fā)布示意圖

        在需要內(nèi)核參與的中斷服務(wù)程序示意性代碼標(biāo)志(2)中,調(diào)用OSIntExit(),OSIntExit()中會(huì)調(diào)用 OSIntCtxSw()進(jìn)行任務(wù)調(diào)度。然后系統(tǒng)將執(zhí)行更高優(yōu)先級(jí)的任務(wù)或者之前被中斷的任務(wù)。

        在直接發(fā)布模式下,中斷服務(wù)程序會(huì)直接執(zhí)行post操作。而這些post操作會(huì)訪問(wèn)μC/OS-III中的很多臨界段代碼,因此μC/OS-III必須通過(guò)關(guān)中斷來(lái)保護(hù)系統(tǒng)中會(huì)被上述post操作所訪問(wèn)到的臨界段代碼,這樣無(wú)疑會(huì)增加中斷關(guān)閉的時(shí)間。中斷關(guān)閉時(shí)間的增加會(huì)導(dǎo)致實(shí)時(shí)內(nèi)核的實(shí)時(shí)性能降低。

        2.2.2 延遲發(fā)布

        在詳細(xì)研究延遲發(fā)布模式之前,必須先了解μC/OSIII中兩個(gè)新的概念。

        (1)中斷隊(duì)列

        中斷隊(duì)列類似于一個(gè)堆棧,它專門用來(lái)保存發(fā)布函數(shù)調(diào)用操作以及與這個(gè)調(diào)用相關(guān)的參數(shù)。

        (2)中斷隊(duì)列處理任務(wù)

        中斷隊(duì)列處理任務(wù)是μC/OS-III中一個(gè)新的內(nèi)部任務(wù),它具有最高的優(yōu)先級(jí)(優(yōu)先級(jí)0)。這個(gè)任務(wù)專門用來(lái)處理中斷隊(duì)列。

        圖3為延遲發(fā)布模式的示意圖,一個(gè)外設(shè)產(chǎn)生中斷,并向CPU發(fā)出中斷請(qǐng)求,然后CPU執(zhí)行中斷服務(wù)程序。

        圖3 延遲發(fā)布模式示意圖

        與直接發(fā)布模式不同的是,這個(gè)中斷服務(wù)程序調(diào)用發(fā)布函數(shù)給任務(wù)發(fā)布消息或信號(hào)時(shí),系統(tǒng)不會(huì)立即執(zhí)行這些post操作,而是將這些post函數(shù)的調(diào)用以及相應(yīng)的參數(shù)寫入中斷隊(duì)列中,并且使中斷隊(duì)列處理任務(wù)進(jìn)入就緒態(tài)。

        舉例說(shuō)明,μC/OS-III中,中斷服務(wù)程序給任務(wù)發(fā)送信號(hào)量時(shí),調(diào)用OSSemPost()函數(shù)。在OSSemPost()函數(shù)中,系統(tǒng)先判斷是什么發(fā)布模式。如果是延遲發(fā)布模式,則調(diào)用OS_IntQPost(),OS_IntQPost()用來(lái)將 OSSem-Post()函數(shù)的調(diào)用和相應(yīng)的參數(shù)寫入中斷隊(duì)列并使得中斷處理任務(wù)進(jìn)入就緒態(tài);如果是直接發(fā)布模式,則調(diào)用OS_SemPost(),這個(gè)函數(shù)用來(lái)執(zhí)行信號(hào)量的post操作。OSSemPost()函數(shù)的部分源碼如下:

        然后,中斷服務(wù)程序執(zhí)行 OSIntExit(),OSIntExit()中調(diào)用OSIntCtxSw()執(zhí)行任務(wù)調(diào)度。由于中斷隊(duì)列處理任務(wù)優(yōu)先級(jí)最高,μC/OS-III將執(zhí)行中斷隊(duì)列處理任務(wù)。該任務(wù)從中斷隊(duì)列中提取出發(fā)布函數(shù)調(diào)用信息,此時(shí)仍需要關(guān)閉中斷,以防止中斷服務(wù)程序同時(shí)對(duì)中斷隊(duì)列進(jìn)行訪問(wèn)。中斷隊(duì)列處理任務(wù)提取出發(fā)布函數(shù)調(diào)用的信息后重新開(kāi)中斷,并且鎖定任務(wù)調(diào)度器,然后進(jìn)行發(fā)布函數(shù)調(diào)用,相當(dāng)于發(fā)布函數(shù)調(diào)用一直在任務(wù)級(jí)代碼中進(jìn)行。

        這個(gè)中斷隊(duì)列處理任務(wù)將中斷隊(duì)列一一處理完后,將自身掛起,并重新啟動(dòng)任務(wù)調(diào)度來(lái)運(yùn)行當(dāng)前處于最高優(yōu)先級(jí)的就緒任務(wù)。

        由于延遲發(fā)布模式下,μC/OS-III的中斷服務(wù)程序不會(huì)直接進(jìn)行post操作。所以μC/OS-III中那些能夠被post操作所訪問(wèn)的臨界段代碼不需要進(jìn)行關(guān)閉中斷的操作,只需要禁止任務(wù)調(diào)度就行。這將使得系統(tǒng)關(guān)中斷時(shí)間大大縮短。

        延遲發(fā)布模式下,用最高優(yōu)先級(jí)的中斷隊(duì)列處理任務(wù)來(lái)處理需要做任務(wù)調(diào)度的中斷,在保護(hù)了臨界段代碼的同時(shí),又保持了中斷的快速響應(yīng)和處理。中斷服務(wù)程序不需要進(jìn)行post操作,從而縮短了中斷服務(wù)程序的時(shí)間。

        2.2.3 模式選擇

        直接發(fā)布模式和延遲發(fā)布模式最主要的區(qū)別在于中斷關(guān)閉時(shí)間。延遲發(fā)布模式很大程度上縮短了中斷關(guān)閉時(shí)間和中斷程序的運(yùn)行時(shí)間,但是卻增加了任務(wù)的延時(shí)。

        應(yīng)用中如果存在要求響應(yīng)非常迅速的中斷源,用戶應(yīng)該選擇延遲發(fā)布模式,因?yàn)橛弥苯影l(fā)布模式很有可能無(wú)法處理。

        另外,由于μC/OS-III中,相同優(yōu)先級(jí)下的多任務(wù)、事件標(biāo)志組、等待多個(gè)內(nèi)核對(duì)象、調(diào)用廣播方式發(fā)布這4個(gè)特性都會(huì)導(dǎo)致臨界段代碼變長(zhǎng)。如果應(yīng)用中用到了這些特性,應(yīng)該使用延遲發(fā)布模式。

        如果應(yīng)用中不存在要求響應(yīng)非常迅速的中斷源,也沒(méi)有用到以上幾種特性,用戶可以使用直接發(fā)布模式,即μC/OS-II模式,否則還是建議用戶盡量使用延遲發(fā)布模式。

        選擇μC/OS-III的發(fā)布模式非常簡(jiǎn)單,只需要在OS_cfg.h中設(shè)置OS_CFG_ISR_POST_DEFERRED_EN的值即可,對(duì)應(yīng)用程序和中斷服務(wù)程序,代碼不需要做任何改動(dòng):置0,為直接發(fā)布模式;置1,為延遲發(fā)布模式。

        2.2.4 實(shí)驗(yàn)結(jié)果比較

        筆者在PK10N512VLL100上移植了μC/OS-III,這是Freescale公司的一款基于ARM Cortex-M4核的微控制器。通過(guò)一些簡(jiǎn)單的小實(shí)驗(yàn)來(lái)分析直接發(fā)布模式以及延遲發(fā)布模式下,中斷關(guān)閉時(shí)間的對(duì)比。實(shí)驗(yàn)中通過(guò)啟動(dòng)系統(tǒng)的統(tǒng)計(jì)任務(wù)stat_task,然后讀取系統(tǒng)的全局變量OSIntDisTimeMax來(lái)獲取系統(tǒng)的最大中斷關(guān)閉時(shí)間。

        整個(gè)實(shí)驗(yàn)用控制LED的閃爍任務(wù)來(lái)實(shí)現(xiàn)4種不同的實(shí)驗(yàn)條件。第1種,只有一個(gè)初始化任務(wù),用來(lái)初始化硬件和控制LED的閃爍;第2種,有一個(gè)初始化任務(wù)(初始化硬件)和兩個(gè)優(yōu)先級(jí)一樣的用戶任務(wù)(分別控制兩個(gè)不同的LED周期閃爍);第3種,有一個(gè)初始化任務(wù)(初始化硬件)和4個(gè)優(yōu)先級(jí)一樣的用戶任務(wù)(分別控制4個(gè)不同的LED周期閃爍),并且沒(méi)用到廣播消息的功能;第4種,有一個(gè)初始化任務(wù)(初始化硬件)和4個(gè)優(yōu)先級(jí)一樣的用戶任務(wù)(分別控制4個(gè)不同的LED周期閃爍),并且實(shí)驗(yàn)中用到了廣播消息的功能(初始化任務(wù)向4個(gè)優(yōu)先級(jí)一樣的用戶任務(wù)廣播消息)。

        表1是實(shí)驗(yàn)結(jié)果,表中的最大中斷關(guān)閉時(shí)間的單位為系統(tǒng)的時(shí)鐘周期數(shù),實(shí)驗(yàn)中系統(tǒng)的時(shí)鐘為100MHz。

        從以上實(shí)驗(yàn)結(jié)果可以看出,4種實(shí)驗(yàn)條件下,延遲發(fā)布模式的最大中斷關(guān)閉時(shí)間基本保持恒定。而直接發(fā)布模式下,系統(tǒng)的任務(wù)越多,功能越復(fù)雜,最大中斷關(guān)閉時(shí)間也越來(lái)越長(zhǎng)。并且,在相同條件下,直接發(fā)布模式的最大中斷關(guān)閉時(shí)間比延遲發(fā)布模式大很多。

        表1 實(shí)驗(yàn)結(jié)果

        結(jié) 語(yǔ)

        相對(duì)于μC/OS-II,μC/OS-III在縮短中斷關(guān)閉時(shí)間方面作出了突出的改進(jìn)。首先,用戶可以根據(jù)中斷的類型使用無(wú)需內(nèi)核參與的中斷服務(wù)程序和需要內(nèi)核參與的中斷服務(wù)程序,盡最大可能減少中斷程序的運(yùn)行時(shí)間。另外,新增了由中斷給任務(wù)發(fā)送信號(hào)或消息的延遲發(fā)布模式。該模式有效地縮短了中斷關(guān)閉的時(shí)間和中斷程序的運(yùn)行時(shí)間,提高了系統(tǒng)的實(shí)時(shí)性。

        [1]Joseph Yiu.ARM Cortex-M3權(quán)威指南[M].宋巖,譯.北京:北京航空航天大學(xué)出版社,2009.

        [2]Labrosse Jean J.μC/OS-III the Real Time Kernel[M].Weston:Micriμm Press,2011.

        猜你喜歡
        服務(wù)程序任務(wù)調(diào)度內(nèi)核
        萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
        基于移動(dòng)終端的人事信息員工自助服務(wù)系統(tǒng)設(shè)計(jì)
        強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        基于C#的進(jìn)程守護(hù)程序的設(shè)計(jì)
        視聽(tīng)(2020年3期)2020-06-11 14:28:18
        基于改進(jìn)NSGA-Ⅱ算法的協(xié)同制造任務(wù)調(diào)度研究
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
        Linux內(nèi)核mmap保護(hù)機(jī)制研究
        基于時(shí)間負(fù)載均衡蟻群算法的云任務(wù)調(diào)度優(yōu)化
        云計(jì)算環(huán)境中任務(wù)調(diào)度策略
        云計(jì)算中基于進(jìn)化算法的任務(wù)調(diào)度策略
        亚洲精品国产suv一区88| 美利坚亚洲天堂日韩精品| 亚洲无精品一区二区在线观看| 内射口爆少妇麻豆| 国产suv精品一区二区| 中文字幕久久精品波多野结百度| 国产又湿又爽又猛的视频| 国语自产视频在线| 老师脱了内裤让我进去| 久久久久亚洲AV无码专区喷| 美国又粗又长久久性黄大片| 丰满人妻一区二区三区视频| 亚洲av之男人的天堂网站| 91精品全国免费观看青青| 日本人妻三级在线观看| 亚洲一区精品无码| 亚洲av第一页国产精品| 91啦视频在线观看| 亚洲精品456在线播放狼人| 精品乱人伦一区二区三区| 99精品国产兔费观看久久99| 无码成年性午夜免费网站蜜蜂| 亚洲精品第四页中文字幕| 国产乡下三级全黄三级| 久久精品片| 91麻豆精品一区二区三区| 成人日韩精品人妻久久一区| 国产乱人视频在线播放| 色综合久久精品中文字幕| 亚洲中文字幕精品久久久| 色综合久久中文娱乐网| 精品亚洲aⅴ在线观看| 蜜桃伦理一区二区三区| 综合色免费在线精品视频| 999久久久国产精品| 97精品国产高清自在线看超| 亚州中文热码在线视频| 亚洲va久久久噜噜噜久久男同| 国产综合自拍| 韩国黄色三级一区二区| 国产av一区二区精品凹凸|