引 言
1 嵌入式實時作業系統和μc/os-ii
嵌入式作業系統eos(embedded operating system)主要負責嵌入式系統的全部軟、硬體資源的分配、排程、控制、協調併發活動;它必須體現其所在系統的特徵,能夠通過裝卸某些模組來達到系統所要求的功能[1]。
μc/os-ii是專門為計算機的嵌入式應用而設計的實時作業系統,是基於靜態優先順序的佔先式(preemptive)多工實時核心。採用μc/os -ii作為測試的目標,一方面是因為它已經通過了很多嚴格的測試,被確認是乙個安全的、高效的實時作業系統;另乙個重要的原因,是因為它免費提供了核心的源**,通過修改相關的源**,就可以比較容易地構造自己所需要的測試環境,實現自己需要的功能。
2 實時作業系統和系統實時效能指標
實時系統對邏輯和時序的要求非常嚴格,如果邏輯和時序出現偏差將會引起嚴重後果。實時系統有兩種型別:軟實時系統和硬實時系統。軟實時系統僅要求事件響應是實時的,並不要求限定某一任務必須在多長時間內完成;而在硬實時系統中,不僅要求任務響應要實時,而且要求在規定的時間內完成事件的處理。通常,大多數實時系統是兩者的結合。
事實上,沒有乙個絕對的數字可以說明什麼是硬實時,什麼是軟實時。它們之間的界限是十分模糊的。這與選擇什麼樣的cpu,它的主頻、記憶體等引數有一定的關係[1]。另外,因為應用的場合對系統實時效能要求的不同而有不同的定義。因此,在現有的固定的軟、硬體平台上,如何測試並找出決定系統實時效能的關鍵引數,並給出優化的措施和試驗資料,就成為乙個具有普遍意義並且值得深入**的課題。本文就是基於此目的進行討論的。
因為採用實時作業系統的意義就在於能夠及時處理各種突發的事件,即處理各種中斷,因而衡量嵌入式實時作業系統的最主要、最具有代表性的效能指標引數無疑應該是中斷響應時間了。中斷響應時間通常被定義為:
中斷響應時間=中斷延遲時間+儲存cpu狀態的時間+該核心的isr進入函式的執行時間[2]。
中斷延遲時間=max(關中斷的最長時間,最長指令時間) + 開始執行isr的第一條指令的時間[2]。
通俗點定義就是:從中斷發生起,到執行中斷處理程式的第一條指令所用的時間。由於實時作業系統更多考慮的是最壞的情況,而不是平均的情況,因此指令執行的時間就按照最長的指令執行時間來計算,所以中斷延遲時間,通常是由關中斷的最長時間來決定的。當fiq(快速中斷)使能時,最壞情況下fiq的中斷延遲時間由以下幾個部分構成:
t同步——請求通過同步器的最長時間,約4個處理器週期。
t最長指令時間——最長指令完成的時間。最長指令是載入包括pc的所有暫存器的ldm指令,在零等待狀態的系統中,約為20個週期。
t異常——資料異常進入時間,為3個週期。
tfiq——fiq進入時間, 2個週期。
最大的fiq中斷延遲時間約為29個時鐘週期。在系統使用40 mhz處理器時鐘時,約為0.7 μs。
對於最大的irq延遲,其計算與fiq類似。若必須允許fiq有更高的優先順序,那麼進入irq處理程式的延遲時間是隨機的[3]。
3 試驗原理和測試方法
首先需要啟動並開始執行μc/os-ii,因為試驗需要使用的計時函式是系統函式。進行堆疊和中斷向量等系統初始化後,首先要建立乙個任務,用以產生中斷。這樣os啟動後,中斷服務程式可以在任務中呼叫或者切換,中斷源可以設定為外部中斷或由任務產生。在主程式的臨界段迴圈查詢中斷狀態(vicrawintr;中斷狀態暫存器),一旦發現有中斷標識,則立即啟動計數器,並使能該中斷,跳出臨界段(在進入臨界段之前要關中斷 (os_enter_critical()),而跳出臨界段**進入中斷服務子程式後,儲存全部cpu暫存器後清除中斷源,並立即開中斷 (os_exit_critical()),然後停止計時並執行中斷處理**)。由於是在檢測到中斷標識後才跳出臨界段,所以一跳出臨界段就會立即發生中斷,進行中斷處理。儲存了cpu暫存器後進入中斷服務的第一條指令就是儲存計數器值。由於在跳出臨界段時才啟動的計數器,而在進入中斷服務時立即儲存了計數值,所以這個計數值就是所需要的中斷響應時間。
如果要試驗不同優先順序的中斷響應時間,可以設幾個不同優先順序的中斷服務程式,在高優先順序程式的出口計數器清零;而在下乙個中斷開始時儲存計數值,從而測試中斷優先順序對中斷響應時間的影響。
如果要測試不同型別的中斷響應時間,可以在程式中,分別使用不同型別的中斷(向量中斷,非向量中斷,快速中斷)來測試中斷型別對中斷響應時間的影響。原則上快速中斷(fiq)要求具有最高的優先順序,而且快速中斷的處理與作業系統基本無關,中斷服務子程式可以自行編寫(在不呼叫μc/os-ii的系統服務程式的情況下),沒有特別的要求。向量中斷則不能如此。因為雖然ads可以使用_irq關鍵字來宣告乙個函式是用來處理中斷的,從而可以避免在程式中使用彙編**,但是在μc/os-ii中不能這樣處理。因為使用c語言無法確保堆疊的結構,而rtos必須使堆疊保持一定的結構。這只有組合語言可以做到。這部分的**在檔案vectors.s中(為了簡化使用者編寫中斷服務子程式,這段彙編**已經被編寫成乙個巨集handler)[4]。具體可見參考文獻 [4]的p358~p359中所列的程式清單6.5中的彙編**,即中斷服務子程式必須按照 μc/os-ii的中斷服務程式的要求編寫,格式如下[4]:
儲存全部cpu暫存器;(1)
呼叫osintenter或osintnesting直接加1;(2)
清除中斷源(3)
重新開中斷(4)
執行使用者**做中斷服務;(5)
呼叫osintexit();(6)
恢復所有cpu暫存器;(7)
執行中斷返回指令;(8)
如果要測試儲存器加速模組對中斷響應時間的影響,可以在關閉、部分使能和完全使能3種設定下分別測試同乙個中斷的響應時間,從而得出中斷響應時間與儲存器加速模組設定之間的關係。
由於鎖相器的設定必然會影響中斷響應時間,並且中斷響應時間與鎖相器(pll)的倍頻設定成反比,即倍頻設定越高,處理器工作速度越快,指令週期越短,而不同時鐘設定下同一中斷響應所需要執行的指令數是相同的,因而中斷響應時間就會越短。所以本文不作此項測試。
下面用程式來測試執行在lpc2104上的μc/os-ii的中斷響應時間。系統初始環境(預設)設定如下:系統晶振頻率設為11 059.2 khz,鎖相環(pll)倍增器值設定為4,處理器工作在fcclk=fosc×4=11059 mhz×4=44.236 mhz。儲存器加速開啟。中斷型別為irq中斷,優先順序為0,即最高優先順序。
μc/os-ii提供了標準的計時程式初始化以及計時開始和計時結束的函式,分別如下所示。這些函式將在所有的試驗中使用。
void pc_elapsedinit(void)//初始化計時程式設定
void pc_elapsedstart(void)//開始計時
int16u pc_elapsedstop(void)//統計時間返回值
進行實驗時,首先在進入main()函式前對系統進行一些基本的初始化工作,包括初始化引腳、系統時鐘、儲存器加速模組、系統時鐘等引數,以保證系統能夠基本執行。初始化完成後,系統進入main()函式,並建立新的任務。以外部中斷為例,由按鍵產生乙個外部中斷,在當前執行的任務中迴圈檢測中斷標誌暫存器,檢測到後就跳出迴圈進入中斷服務子程式。統計這段時間,就可以得出中斷響應時間了。
中斷服務程式的彙編部分按照參考文獻《arm微控制器基礎與實踐》p384~p385的程式清單6.5異常處理**的彙編部分來編寫,也就是編寫巨集handler,並在vectors.s檔案中引用這個彙編介面:irq_handler handler irq_exception,至此就完成了μc/os-ii中斷服務子程式的彙編部分。c語言部分主要用於具體的中斷處理,在完成必要的初始化後,只要在中斷處理程式的第一句將計時停止並返回計數值,具體的中斷處理**則並不重要,或者說停止計時就是中斷處理**了。由於irq中斷與系統相關,這部分**一般在檔案target.c中編寫實現。c語言部分示意性**如下所示:
void __irq_ecpe(void)
void task (void) }// 跳出迴圈;
os_exit_critical(); //退出臨界區,開中斷
return(0);
} int main (void)
測試不同優先順序的中斷響應時間的情況稍有些不同。因為要在低優先順序任務的中斷出口啟用高優先順序的中斷任務,對計數器清零並開始計數,在高優先順序的中斷處理**的第一條語句結束計時。其餘的部分基本一樣。限於篇幅,具體的源**就不一一枚舉了。
4 結論
經過試驗,得到表1所列測試資料。所有資料按照預設的條件,每次只更改其中乙個條件測試得出。
注:中斷優先順序測試時,中斷響應時間大於正常值,是因為發生高優先順序中斷時,需要等待低優先順序中斷任務開中斷才能進行響應。
由以上資料可知,μc/os-ii的中斷響應時間受記憶體加速模組和系統頻率設定的影響較大,而與中斷的型別和任務(中斷)優先順序關係不大。以上僅僅是個簡單的測試,更深入的測試可以基於這個方法繼續**。
C OS II微小核心分析
c os ii 嵌入式實時作業系統的源 可以分成三部分 與硬體無關的核心 與處理器有關的移植 和使用者配置檔案。核心 位於source目錄下,提供了4個微小核心。它們分別位於source source1 包含建立任務和延時功能 source source2 增加刪除任務功能 source sourc...
嵌入式實時作業系統 C OS II與eCos的比較
摘要 敘述嵌入式系統和嵌入式作業系統的概念,簡述嵌入式實時系統的發展階段。重點介紹 c os ii和ecos的發展歷史,並且對 c os ii與ecos進行比較,為大家在選擇嵌入式作業系統時提供參考。1 背景 隨著計算機技術的迅速發展和晶元製造工藝的不斷進步,嵌入式系統的應用日益廣泛 從民用的電視 ...
實時Web資料的實時分析
鄭昀 玩聚sr 20100306 但是實時分析就不那麼容易了。實時分析大致有幾種 熱門鏈結分析 把關聯結果中相對熱門 相對重要的鏈結挑出來,單獨展示,可以按時間排序或按重要性排序。oneriot比較擅長這一點,如搜尋chile。熱門鏈結的甄選一般都是依據twitter等微部落格訊息的鏈結分享次數。語...