日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
μC/OS-II的實時性能分析
[1] [2]  下一頁
μC/OS-II的實時性能分析
 更新時間:2008-8-18 10:06:54  點擊數(shù):16
【字體: 字體顏色

摘要 簡單介紹一種公開源代碼的實時操作系統(tǒng)μC/OS-II,并對它的實時性能進(jìn)行簡單的測試。通過改變測試條件,如改變中斷的類型或中斷發(fā)生時系統(tǒng)的狀態(tài)等,分析μC/OS-II在中斷時的中斷響應(yīng)時間與各種條件之間的關(guān)系,從而為分析或改善實時操作系統(tǒng)的中斷響應(yīng)時間提供理論依據(jù)。

關(guān)鍵詞 RTOS μC/OS-II 中斷響應(yīng)時間 實時性能

1  嵌入式實時操作系統(tǒng)和μC/OS-II

  嵌入式操作系統(tǒng)EOS(Embedded Operating System)主要負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬件資源的分配、調(diào)度、控制、協(xié)調(diào)并發(fā)活動;它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達(dá)到系統(tǒng)所要求的功能[1]。

  μC/OS-II是專門為計算機的嵌入式應(yīng)用而設(shè)計的實時操作系統(tǒng),是基于靜態(tài)優(yōu)先級的占先式(preemptive)多任務(wù)實時內(nèi)核。采用μC/OS-II作為測試的目標(biāo),一方面是因為它已經(jīng)通過了很多嚴(yán)格的測試,被確認(rèn)是一個安全的、高效的實時操作系統(tǒng);另一個重要的原因,是因為它免費提供了內(nèi)核的源代碼,通過修改相關(guān)的源代碼,就可以比較容易地構(gòu)造自己所需要的測試環(huán)境,實現(xiàn)自己需要的功能。

2  實時操作系統(tǒng)和系統(tǒng)實時性能指標(biāo)

  實時系統(tǒng)對邏輯和時序的要求非常嚴(yán)格,如果邏輯和時序出現(xiàn)偏差將會引起嚴(yán)重后果。實時系統(tǒng)有兩種類型:軟實時系統(tǒng)和硬實時系統(tǒng)。軟實時系統(tǒng)僅要求事件響應(yīng)是實時的,并不要求限定某一任務(wù)必須在多長時間內(nèi)完成;而在硬實時系統(tǒng)中,不僅要求任務(wù)響應(yīng)要實時,而且要求在規(guī)定的時間內(nèi)完成事件的處理。通常,大多數(shù)實時系統(tǒng)是兩者的結(jié)合。

  事實上,沒有一個絕對的數(shù)字可以說明什么是硬實時,什么是軟實時。它們之間的界限是十分模糊的。這與選擇什么樣的CPU,它的主頻、內(nèi)存等參數(shù)有一定的關(guān)系[1]。另外,因為應(yīng)用的場合對系統(tǒng)實時性能要求的不同而有不同的定義。因此,在現(xiàn)有的固定的軟、硬件平臺上,如何測試并找出決定系統(tǒng)實時性能的關(guān)鍵參數(shù),并給出優(yōu)化的措施和試驗數(shù)據(jù),就成為一個具有普遍意義并且值得深入探討的課題。本文就是基于此目的進(jìn)行討論的。

  因為采用實時操作系統(tǒng)的意義就在于能夠及時處理各種突發(fā)的事件,即處理各種中斷,因而衡量嵌入式實時操作系統(tǒng)的最主要、最具有代表性的性能指標(biāo)參數(shù)無疑應(yīng)該是中斷響應(yīng)時間了。中斷響應(yīng)時間通常被定義為:

  中斷響應(yīng)時間=中斷延遲時間+保存CPU狀態(tài)的時間+該內(nèi)核的ISR進(jìn)入函數(shù)的執(zhí)行時間[2]。

  中斷延遲時間=MAX(關(guān)中斷的最長時間,最長指令時間) + 開始執(zhí)行ISR的第一條指令的時間[2]。

  通俗點定義就是:從中斷發(fā)生起,到執(zhí)行中斷處理程序的第一條指令所用的時間。由于實時操作系統(tǒng)更多考慮的是最壞的情況,而不是平均的情況,因此指令執(zhí)行的時間就按照最長的指令執(zhí)行時間來計算,所以中斷延遲時間,通常是由關(guān)中斷的最長時間來決定的。當(dāng)FIQ(快速中斷)使能時,最壞情況下FIQ的中斷延遲時間由以下幾個部分構(gòu)成:

  t同步——請求通過同步器的最長時間,約4個處理器周期。

  t最長指令時間——最長指令完成的時間。最長指令是加載包括PC的所有寄存器的LDM指令,在零等待狀態(tài)的系統(tǒng)中,約為20個周期。

  t異常——數(shù)據(jù)異常進(jìn)入時間,為3個周期。

  tFIQ——FIQ進(jìn)入時間, 2個周期。

  最大的FIQ中斷延遲時間約為29個時鐘周期。在系統(tǒng)使用40 MHz處理器時鐘時,約為0.7 μs。

  對于最大的IRQ延遲,其計算與FIQ類似。若必須允許FIQ有更高的優(yōu)先級,那么進(jìn)入IRQ處理程序的延遲時間是隨機的[3]。

3  試驗原理和測試方法

  首先需要啟動并開始運行μC/OS-II,因為試驗需要使用的計時函數(shù)是系統(tǒng)函數(shù)。進(jìn)行堆棧和中斷向量等系統(tǒng)初始化后,首先要創(chuàng)建一個任務(wù),用以產(chǎn)生中斷。這樣OS啟動后,中斷服務(wù)程序可以在任務(wù)中調(diào)用或者切換,中斷源可以設(shè)置為外部中斷或由任務(wù)產(chǎn)生。在主程序的臨界段循環(huán)查詢中斷狀態(tài)(VICRawIntr;中斷狀態(tài)寄存器),一旦發(fā)現(xiàn)有中斷標(biāo)識,則立即啟動計數(shù)器,并使能該中斷,跳出臨界段(在進(jìn)入臨界段之前要關(guān)中斷(OS_ENTER_CRITICAL()),而跳出臨界段代碼進(jìn)入中斷服務(wù)子程序后,保存全部CPU寄存器后清除中斷源,并立即開中斷(OS_EXIT_CRITICAL()),然后停止計時并執(zhí)行中斷處理代碼)。由于是在檢測到中斷標(biāo)識后才跳出臨界段,所以一跳出臨界段就會立即發(fā)生中斷,進(jìn)行中斷處理。保存了CPU寄存器后進(jìn)入中斷服務(wù)的第一條指令就是保存計數(shù)器值。由于在跳出臨界段時才啟動的計數(shù)器,而在進(jìn)入中斷服務(wù)時立即保存了計數(shù)值,所以這個計數(shù)值就是所需要的中斷響應(yīng)時間。

  如果要試驗不同優(yōu)先級的中斷響應(yīng)時間,可以設(shè)幾個不同優(yōu)先級的中斷服務(wù)程序,在高優(yōu)先級程序的出口計數(shù)器清零;而在下一個中斷開始時保存計數(shù)值,從而測試中斷優(yōu)先級對中斷響應(yīng)時間的影響。

  如果要測試不同類型的中斷響應(yīng)時間,可以在程序中,分別使用不同類型的中斷(向量中斷,非向量中斷,快速中斷)來測試中斷類型對中斷響應(yīng)時間的影響。原則上快速中斷(FIQ)要求具有最高的優(yōu)先級,而且快速中斷的處理與操作系統(tǒng)基本無關(guān),中斷服務(wù)子程序可以自行編寫(在不調(diào)用μC/OS-II的系統(tǒng)服務(wù)程序的情況下),沒有特別的要求。向量中斷則不能如此。因為雖然ADS可以使用_irq關(guān)鍵字來聲明一個函數(shù)是用來處理中斷的,從而可以避免在程序中使用匯編代碼,但是在μC/OS-II中不能這樣處理。因為使用C語言無法確保堆棧的結(jié)構(gòu),而RTOS必須使堆棧保持一定的結(jié)構(gòu)。這只有匯編語言可以做到。這部分的代碼在文件VECTORS.S中(為了簡化用戶編寫中斷服務(wù)子程序,這段匯編代碼已經(jīng)被編寫成一個宏HANDLER)[4]。具體可見參考文獻(xiàn)[4]的P358~P359中所列的程序清單6.5中的匯編代碼,即中斷服務(wù)子程序必須按照 μC/OS-II的中斷服務(wù)程序的要求編寫,格式如下[4]:

  保存全部CPU寄存器;(1)
  調(diào)用OSIntEnter或OSIntNesting直接加1;(2)
  清除中斷源(3)
  重新開中斷(4)
  執(zhí)行用戶代碼做中斷服務(wù);(5)
  調(diào)用OSIntExit();(6)
  恢復(fù)所有CPU寄存器;(7)
  執(zhí)行中斷返回指令;(8)

  如果要測試存儲器加速模塊對中斷響應(yīng)時間的影響,可以在關(guān)閉、部分使能和完全使能3種設(shè)置下分別測試同一個中斷的響應(yīng)時間,從而得出中斷響應(yīng)時間與存儲器加速模塊設(shè)置之間的關(guān)系。

  由于鎖相器的設(shè)置必然會影響中斷響應(yīng)時間,并且中斷響應(yīng)時間與鎖相器(PLL)的倍頻設(shè)置成反比,即倍頻設(shè)置越高,處理器工作速度越快,指令周期越短,而不同時鐘設(shè)置下同一中斷響應(yīng)所需要執(zhí)行的指令數(shù)是相同的,因而中斷響應(yīng)時間就會越短。所以本文不作此項測試。

  下面用程序來測試運行在LPC2104上的μC/OS-II的中斷響應(yīng)時間。系統(tǒng)初始環(huán)境(默認(rèn))設(shè)置如下:系統(tǒng)晶振頻率設(shè)為11 059.2 kHz,鎖相環(huán)(PLL)倍增器值設(shè)置為4,處理器工作在fCCLK=fOSC×4=11059 MHz×4=44.236 MHz。存儲器加速開啟。中斷類型為IRQ中斷,優(yōu)先級為0,即最高優(yōu)先級。

  μC/OS-II提供了標(biāo)準(zhǔn)的計時程序初始化以及計時開始和計時結(jié)束的函數(shù),分別如下所示。這些函數(shù)將在所有的試驗中使用。

  void PC_ElapsedInit(void)//初始化計時程序設(shè)置
  void PC_ElapsedStart(void)//開始計時
  INT16U PC_ElapsedStop(void)//統(tǒng)計時間返回值

  進(jìn)行實驗時,首先在進(jìn)入main()函數(shù)前對系統(tǒng)進(jìn)行一些基本的初始化工作,包括初始化引腳、系統(tǒng)時鐘、存儲器加速模塊、系統(tǒng)時鐘等參數(shù),以保證系統(tǒng)能夠基本運行。初始化完成后,系統(tǒng)進(jìn)入main()函數(shù),并創(chuàng)建新的任務(wù)。以外部中斷為例,由按鍵產(chǎn)生一個外部中斷,在當(dāng)前運行的任務(wù)中循環(huán)檢測中斷標(biāo)志寄存器,檢測到后就跳出循環(huán)進(jìn)入中斷服務(wù)子程序。統(tǒng)計這段時間,就可以得出中斷響應(yīng)時間了。

  中斷服務(wù)程序的匯編部分按照參考文獻(xiàn)《ARM微控制器基礎(chǔ)與實踐》P384~P385的程序清單6.5異常處理代碼的匯編部分來編寫,也就是編寫宏HANDLER,并在Vectors.s文件中引用這個匯編接口:IRQ_Handler HANDLER IRQ_Exception,至此就完成了μC/OS-II中斷服務(wù)子程序的匯編部分。C語言部分主要用于具體的中斷處理,在完成必要的初始化后,只要在中斷處理程序的第一句將計時停止并返回計數(shù)值,具體的中斷處理代碼則并不重要,或者說停止計時就是中斷處理代碼了。由于IRQ中斷與系統(tǒng)相關(guān),這部分代碼一般在文件TARGET.C中編寫實現(xiàn)。C語言部分示意性代碼如下所示:

  void __IRQ_Ecpe(void) {
  INT16UElapTime;
  OS_ENTER_CRITICAL();//關(guān)中斷
  OSIntEnter();//中斷服務(wù)子程序ISR開始
  EXTINT = 0x02;//清除中斷源
  OS_EXIT_CRITICAL();//開中斷
  ElapTime=PC_ElapsedStop();//停止計時并返回計數(shù)值
  OSIntExit();//退出中斷服務(wù)
  VICVectAddr0=0;//清零中斷向量
  }
  void Task (void) {
  PINSEL0 = 0x20000000;//設(shè)置I/O口工作模式,P0.14//設(shè)置為EINT1
  IODIR = 0x00000400;//設(shè)置LED1控制口為輸出,其//他I/O為輸入
  VICIntSelect = 0x00000000;//設(shè)置所有通道為IRQ中斷
  VICVectCntl0 = 0x2E;//EI NT1通道分配到IRQ slot 0,//即優(yōu)先級最高
  VICVectAddr0 = (int)IRQ_Ecpe;//設(shè)置EINT0向量地址
  VICIntEnable = 0x00008000;//使能EINT0
  EXTINT = 0x02;//清除外部中斷標(biāo)志
    OS_ENTER_CRITICAL();//進(jìn)入臨界區(qū),關(guān)中斷
      While(1)//循環(huán)檢測
        {if ((EXTINT & 0x01!)=0)
          PC_ElapsedStart(); //如果有中斷發(fā)生,計時開始
          break ;}}// 跳出循環(huán);
    OS_EXIT_CRITICAL(); //退出臨界區(qū),開中斷
  return(0);
  }
  int main (void) {
    PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
    OSInit();
    PC_DOSSaveReturn();
    PC_ElapsedInit()
    RandomSem=OSSemCreate(1);
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSStart();
  }

  測試不同優(yōu)先級的中斷響應(yīng)時間的情況稍有些不同。因為要在低優(yōu)先級任務(wù)的中斷出口激活高優(yōu)先級的中斷任務(wù),對計數(shù)器清零并開始計數(shù),在高優(yōu)先級的中斷處理代碼的第一條語句結(jié)束計時。其余的部分基本一樣。限于篇幅,具體的源代碼就不一一列舉了。

4  結(jié)論

  經(jīng)過試驗,得到表1所列測試數(shù)據(jù)。所有數(shù)據(jù)按照默認(rèn)的條件,每次只更改其中一個條件測試得出。

表1

  由以上數(shù)據(jù)可知,μC/OS-II的中斷響應(yīng)時間受內(nèi)存加速模塊和系統(tǒng)頻率設(shè)置的影響較大,而與中斷的類型和任務(wù)(中斷)優(yōu)先級關(guān)系不大。以上僅僅是個簡單的測試,更深入的測試可以基于這個方法繼續(xù)探討。

參考文獻(xiàn)

1  中國軟件評測中心.漫談嵌入式實時操作系統(tǒng)與測試. 2002-06
2  Labrosse Jean J. 嵌入式實時操作系統(tǒng)μC/OS-II. 邵貝貝等譯.第2版.北京:北京航空航天大學(xué)出版社,2003
3  馬忠梅,等. ARM嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ).北京:北京航空航天大學(xué)出版社,2002
4  周立功,等. ARM微控制器基礎(chǔ)與實踐. 北京:北京航空航天大學(xué)出版社,2003

  • 上一篇: 常見通訊協(xié)議介紹
  • 下一篇: RS-485接口芯片介紹及應(yīng)用中的有關(guān)問題
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1