為了提供一個開放、自主、實用的汽車電子軟件開發平臺,介紹了當前在國際汽車工業界日益占據主導地位的汽車電子開放式平臺系統(OSEK/VDX)規范;其中著重分析了關于操作系統內核的定義,并且在免費的嵌入式實時操作系統μC/OS-Ⅱ的基礎上,分析兩者技術特點之間的差異;通過修改μC/OS-Ⅱ內核的部分功能使之符合OSEK/VDX規范,并提出了車用實時操作系統的設計思想。
引言
隨著汽車工業的飛速發展,電子技術在汽車上的應用比重不斷增加。為了滿足日益復雜的汽車電子控制軟件的開發需要,實現應用軟件的可移植性和不同廠商的控制模塊間的可兼容性,1993年德國汽車工業界聯合推出了“汽車電子的開放式系統及接口軟件規范”,即OSEK(open system and the corresponding interfaces for automotive electronics)。1994年法國汽車工業界的相似規范VDX(vehicle distributed executive)和OSEK規范合并,從而形成OSEK/VDX規范體系。
此規范主要由4部分組成:操作系統規范(OSEKOS)、通信規范(OSEKCOM)、網絡管理規范(OSEKNM)和OSEK實現語言(OSEKOIL)。其中OSEKOS是針對汽車應用特點而專門制定的一個小型RTOS規范,著重以下幾個方面:
①可移植性,所有API都是標準化的并且在功能上都有明確的定義;
②可擴展性,OSEKOS旨在通用于任何類型的 ECU,因此一方面系統要高度的模塊化,另一方面又要能進行靈活的配置;
③汽車應用的特定需求,諸如可靠性、實用性和代價敏感性等。相應的,OSEKOS 靜態配置可以通過OS2EKOIL語言實現,用戶在系統生成時靜態制定任務的個數、需要的資源和系統服務。OSEKCOM為通信網絡中的數據交換提供了標準的接口和協議。OSEKNM為監視網絡的流量提供了一組標準的功能函數,以保證網絡的安全性和可靠性。
μC/OS-Ⅱ是一個著名的源代碼公開的實時內核,專門為嵌入式應用設計的。它的主要性能特點如下:
①源代碼公開。這樣很容易就能把操作系統移植到各個不同的硬件平臺上;
②可移植性。μC/OS-Ⅱ絕大部分源代碼是用C語言寫的,而與微處理器硬件相關的那部分是用匯編語言寫的,使得μC/OS-Ⅱ便于移植到其他的微處理器上;
③可固化。只要開發者有固化手段,μC/OS-Ⅱ可以嵌入到開發者的系統中;
④可裁剪性(Scalable)。開發者可以有選擇的使用μC/OS-Ⅱ中應用程序需要的那些系統服務,可以減少μC/OS-Ⅱ所需的存儲空間;
⑤占先(Preemp2tive)。μC/OS-Ⅱ完全是占先式的實時內核;
⑥多任務(Multi-Tasking)。μC/OS-Ⅱ可以管理64個任務,但是目前應用程序最多有56個任務;
⑦可確定性 (Affirmable)。μC/OS-Ⅱ系統服務的執行時間不依賴于應用程序任務的多少;
⑧實用性和可靠性。許多的行業都有成功應用該實時內核的實例,這些應用的實踐是該內核實用性和可靠性的最好證據。
OSEKOS結構特點及運行機制
OSEKOS的結構特點
(1)高實時性。由于在汽車控制領域,如果出現絲毫的差錯會導致危及生命安全的嚴重后果,因此要求具有高度的實時性。OSEKOS所有的系統對象由用戶在建立時靜態創建,避免了動態創建時的時間消耗,增強了其實時性。而且通過占先式的調度策略和警報機制也能滿足實時性需求;
(2)標準化應用接口。其制定了標準的應用程序編程接口,這樣可以屏蔽底層硬件結構的不同而提供一個一致的開發環境。并且用戶只需修改OIL配置文件中與硬件相關的部分,可以方便地在不同的ECU上進行移植;
(3)可裁剪性。其具有高度模塊化和可靈活配置的特性,用OIL語言進行裁剪,可以在很少的硬件資源環境下運行。
OSEKOS運行機制分析
任務管理
OSEK規范將任務分為基本任務和擴展任務。基本任務具有3種狀態:運行狀態、就緒狀態和掛起狀態。擴展任務多了一個等待狀態。此外基本任務只在開始和結束時才有同步點,所以其需要的資源少,而擴展任務可以對應不同的時間,在運行中可能有多個同步點,所以對環境要求高。操作系統的任務之間的同步通過調度程序來實現。
OSEK規范支持3種調度方式:
①完全搶占式調度。該策略用于保存現場的內存開銷較大,理論上可以在任務的任何位置重調度,因此任務必須同步訪問共享資源,增加了系統的復雜性;
②非搶占調度。此策略通過調用某些服務例程實現任務切換,即用戶設置重調度點。通過定義任務組,可以使多個任務同時具有搶占或非搶占調度的特征;
③混合搶占調度。搶占任務和非搶占任務共存于一個系統時,使用“混合搶占”調度策略。在這種情況下,調度策略依賴于正在運行任務的搶占特性,開發者通過配置任務優先級和搶占屬性來定義任務執行順序。
一致類
為了更加靈活的配置操作系統調度,OSEK規范定義了4種一致類:BCC1、BCC2、ECC1和ECC2。其根據每個優先級可能有的任務個數,需要的是基本任務還是擴展任務來進行劃分。若每個優先級上只有一個任務,且是基本任務則定義一致類為BCC1,是擴展任務則定義為BCC2;若每個優先級上可以有多個任務,且是基本任務則定義一致類為ECC1,是擴展任務則定義為ECC2。
中斷處理
OSEK規范定義了2種中斷服務程序:①ISR1。此類中斷程序不使用操作系統的資源,中斷結束后,處理程序從產生中斷的地方繼續執行。其對任務的管理沒有影響,不要求調用操作系統的API。②ISR2。此類中斷程序是系統生成時,通過用戶子程序配置而成,它可以調用操作系統的API。中斷的優先級高于任務,因此可以搶占任何任務。
事件機制
事件機制用于保證不同擴展任務之間的同步。該機制含義是,一個處于等待狀態的擴展進程,只有當它所等待的事件至少有一個發生,才能進入就緒態,并且事件的發生會以信號的方式傳給該進程。只有擴展任務,才具有事件。
資源管理
具有不同優先級的多任務訪問共享資源需要使用資源管理機制進行協調。這些資源可以是一段臨界區代碼、調度程序、共享內存或是數據結構,也可以是共享硬件設備。系統在處理多個進程對共享資源的互斥訪問時,采用信號量對臨界區數據或資源加鎖,但是這樣可能會導致優先級反轉。為了避免這種情況出現,OSEK采用了優先級最高限度協議(PCP),即當一個進程占用了一個資源后,該進程的優先級會臨時升高為該資源優先級。當該任務釋放了資源后,其優先級回到要求訪問資源前的優先級。使用該協議同時也解決了死鎖的問題。