隨著社會的進步和汽車工業(yè)的飛速發(fā)展,汽車在降低能耗、提高安全性和舒適度以及環(huán)保等方面的要求越來越高。這些要求刺激了電子技術在汽車上的應用,而且比重不斷增加,其結果是汽車在零部件控制技術、通信和網絡方面的復雜性大大增加。 在這個強大的市場需求和激烈競爭的環(huán)境下,汽車電子的軟硬件產品不斷發(fā)展并出現多元化格局。 這時一些問題凸顯出來,比如,由于處理器( CPU)不斷升級導致不同的CPU間的軟件移植滯后,由于不同實時操作系統(tǒng)的應用程序接口(API)不同,導致應用程序的移植性差等。 為了改變這些狀況,汽車行業(yè)借鑒通信行業(yè)的做法,把汽車嵌入式系統(tǒng)、部件間通信、部件管理逐步規(guī)范化、標準化。從而出現了車規(guī)級操作系統(tǒng)及標準。當前主要的汽車行業(yè)操作系統(tǒng)有: ECU/TCU等底層控制單元:基于AUTOSAR OSEK/VDX的rtos; 儀表等需要簡單界面的人機交互單元:QNX,AGL 導航中控等強人機交互單元:Windows CE、Android 當然,還有其他一些大廠自行開發(fā)的操作系統(tǒng),而且上述的各類系統(tǒng)也是在相互滲透的,比如早期的導航不少也是用的QNX。本文只講述OSEK/VDX標準的實時操作系統(tǒng)。 OSEK/VDX標準 1993年德國汽車工業(yè)界提出了OSEK(德文:Offene Systeme and deren Schnittstellen fur dieElektronik im Kraftfahr-zeug)體系,其含義是汽車電子開放式系統(tǒng)及其接口。這個體系的最早倡導者有:寶馬、博世、戴姆勒克萊斯勒、歐寶、西門子、大眾和卡爾斯魯厄大學的工業(yè)信息技術研究所。法國的汽車制造商標致和雷諾于1994年加人了OSEK體系,并將法國汽車工業(yè)使用的汽車分布式運行系統(tǒng)(Vehicle Distributed eX-ecutivr, V DX)也納人這一體系,VDX的作用與OSEK相似。 在1995年召開的研討會上,眾多的廠商對OSEK和VDX的認識達成了共識,產生了OSEK/VDX規(guī)范(1997年發(fā)布)。它主要由四部分組成:操作系統(tǒng)規(guī)范(OSEK Operating System,OSEK OS)、通信規(guī)范(OSEK Communication,OSEK COM )、網絡管理規(guī)范( OSEK Net Management,OSEK NM)和OSEK實現語言(OSEK Implementation Language,OIL)。 從此之后,各嵌入式OS廠商都相繼推出了符合OSEK規(guī)范的產品,比較典型的有WINDRIVER公司的OSEKWorks,ETAS公司的RTA-OSEK,MOTOROLA的OSEKturbo和美國密西根大學的EMERALDS-OSEK等。隨著該規(guī)范應用的不斷深人,其結構和功能不斷完善和優(yōu)化,版本也不斷升級和擴展。 OSEK/VDX操作系統(tǒng)的特點 實時性 由于越來越多的微處理器被應用到汽車控制領域,如汽車剎車的防抱死系統(tǒng)、動力設備的安全控制等這些系統(tǒng)直接關系著人的生命安全,即使出現絲毫的差錯也會導致危及生命安全的嚴重后果,因此要求操作系統(tǒng)具有嚴格的實時性。OSEK操作系統(tǒng)通過靜態(tài)的系統(tǒng)配置、占先式調度策略、提供警報機制和優(yōu)化系統(tǒng)運行機制以提高中斷響應速度等手段來滿足用戶的實時需求。 可移植性 OSEK規(guī)范詳細規(guī)定了操作系統(tǒng)運行的各種機制,并在這些機制基礎上制定了標準的應用程序編程接口,使那些獨立編寫的代碼能夠很容易地整合起來,增強了應用程序的可移植性。OSEK還制定了標準的OIL,用戶只需更改OIL配置文件中與硬件相關部分,便可實現不同微處理器之間的應用程序移植。通過這些手段,減少了用于維護應用程序軟件和提高它的可移植性的花費,降低了應用程序的開發(fā)成本。 可擴展性 為了適用于廣泛的目標處理器,支持運行在廣泛硬件基礎上的實時程序,OSEK操作系統(tǒng)具備高度模塊化和可靈活配置的特性。它定義了不同的符合級別( Conformance Classes),并采用對不同應用程序有可靠接收能力的體系結構,從而增強了系統(tǒng)的可擴展性。OSEK操作系統(tǒng)可以在很少的硬件資源(RAM,ROM,CPC時間)環(huán)境下運行,即便在8位微處理器上也是如此。 OSEK/VDX操作系統(tǒng)的運行機制 進程(TASK)管理和調度 在OSEK操作系統(tǒng)中,進程管理能力相對有限,這是因為系統(tǒng)的進程設置在系統(tǒng)生成時已經定義好了,并目,系統(tǒng)中進程的數量保持不變,不允許動態(tài)創(chuàng)建和刪除進程。OSEK規(guī)范把進程分為基礎進程和擴展進程?;A進程狀態(tài)包括:就緒態(tài)、運行態(tài)和掛起態(tài),進程切換只發(fā)生在這三種狀態(tài)之間;擴展進程除了具有基礎進程的三種狀態(tài)外,還有等待態(tài),并支持事件機制。 基礎進程通常在開始運行后,只有當它被高優(yōu)先級進程占先或者是被中斷時,它才會停止,否則一直運行到進程結束。而擴展進程除了能被高優(yōu)先級的進程占先和被中斷外,還會因等待事件而停止運行,進人等待態(tài)。處于等待態(tài)的擴展進程只有當它所等待的事件中至少有一個發(fā)生才會被激活繼續(xù)運行。 處于就緒態(tài)的進程由調度程序調度運行,OSEK規(guī)范采用靜態(tài)優(yōu)先級調度策略。進程的優(yōu)先級在系統(tǒng)生成的時候進行靜態(tài)分配,高優(yōu)先級的進程先處理,低優(yōu)先級的進程后處理,具有相同優(yōu)先級的進程則進入一個先來先服務的隊列。此外進程可分為可被占先進程和不可被占先進程:對不可被占先的進程而言,一旦進程開始運行,就不會被占先,只有到達其調度點時才發(fā)生調度,程序設計員可以預知調度點;而對可被占先的進程而言,由于中斷可能激活更高優(yōu)先級的進程,所以任何時候都有可能進行調度,使用這兩種進程可使程序設計具有更高的靈活性。 OSEK操作系統(tǒng)不允許同一進程的多個并行調用,因為這需要動態(tài)改變進程的數量。當請求調用一個已經激活的進程時,該請求進人一個請求隊列,直到前一個激活進程運行終止(轉換為掛起態(tài)),第二個激活請求才執(zhí)行。 進程間通信及同步機制 OSEK提供了兩種同步機制,即對共享資源的互斥訪問機制和事件機制。 OSEK的資源可以是一段臨界區(qū)代碼、調度程序、共享內存或數據結構,也可以是共享硬件設備。系統(tǒng)在處理多個進程對共享資源的互斥訪問時,采用信號量對臨界區(qū)數據或資源加鎖。在某一時刻只能有一個進程訪問資源,但是用信號量機制可能會導致優(yōu)先級反轉,即當一個高優(yōu)先級的進程試圖訪問一個已經被較低優(yōu)先級的進程占用的資源時,則該高優(yōu)先級的進程必須等待,直到低優(yōu)先級的進程釋放該資源。這時如果有大量的介于前兩個進程優(yōu)先級之間的進程被激活,而且它們根本不使用該資源,那么,占據資源的低優(yōu)先級進程就會被占先,等待資源的高優(yōu)先級進程也不能執(zhí)行,而中間優(yōu)先級的進程要先于高優(yōu)先級的進程運行,這就是優(yōu)先級反轉。為了避免這種情況發(fā)生,OSEK操作系統(tǒng)采用了優(yōu)先級最高限度協(xié)議(Priority Ceiling Protocol ),即當一個進程占用了一個資源后,該進程的優(yōu)先級會臨時升高為該資源優(yōu)先級。其優(yōu)先級為可能使用該資源的所有進程優(yōu)先級的最高值。這樣,該進程只會被不使用該資源并且比該資源的優(yōu)先級高的進程占先,直到它釋放該資源為止。因此,當一個進程試圖占用一個資源的時候,不可能有任何其他進程正占用著該資源,也就不會有因試圖占用資源而進人等待態(tài)的進程。使用該協(xié)議同時解決了死鎖的問題,當兩個進程都已占用了一個資源,而且又試圖訪問對方所占有的資源時,它們無限期地相互等待下去就會發(fā)生死鎖。該協(xié)議中不存在等待進程,自然也就避免了死鎖。 此外,OSEK還提供了另一種同步機制,即事件機制。該機制的含義是,一個處于等待狀態(tài)的擴展進程,只有當它所等待的事件至少有一個發(fā)生,才能進入就緒態(tài),并且事件的發(fā)生會以信號的方式傳給該進程。事件機制既可用于多個進程的同步,同時也是進程內部通信的方法之一。雖然只有擴展進程才可以等待事件,但設置這些事件的卻可以是任何進程或中斷服務程序。有一點要注意,為了遵循占用子資源就不被阻斷的原則,必須避免一個占用了資源的進程因等待事件而進人等待狀態(tài)。 告警機制 汽車電子控制最典型的特性就是實時性,因此系統(tǒng)必須有基于時間或其他計數器的處理機制,來處理定時和循環(huán)進程。為此,OSEK提供了警報機制。警報或者基于系統(tǒng)時鐘,或者基于其他的某種計數器,當計數器到達警報設定值時被觸發(fā)。警報觸發(fā)后可以激活進程也可以為某一進程設置事件,或者干脆執(zhí)行一個警報回調程序,具體怎樣由用戶在系統(tǒng)生成時靜態(tài)定義,但警報值是動態(tài)設置的,可以是相對值或者是絕對值,也可以設為循環(huán)警報來激活周期性進程。 中斷 汽車控制系統(tǒng)要求對實時輸人作出快速反應。在OSEK操作系統(tǒng)中,由應用程序開發(fā)者編寫的中斷服務程序(ISR)與系統(tǒng)封裝在一起,這樣有利于保護進程和系統(tǒng)狀態(tài)。OSEK操作系統(tǒng)把中斷處理程序分為兩類:(1)中斷服務程序不會調用系統(tǒng)服務;(2)中斷服務程序可以調用部分系統(tǒng)功能,如激活進程、設置事件、設置警報等,因此,它可以激活更高優(yōu)先級的進程。OSEK操作系統(tǒng)的中斷管理提供了開/關全部中斷和開/關全部第三類中斷的系統(tǒng)調用。OSEK操作系統(tǒng)內核是一個可重入內核,因此,那些正在執(zhí)行內核代碼的進程(如正在執(zhí)行系統(tǒng)調用)可能被中斷,交出CPU的使用權,必要時都不允許等到內核代碼運行完,這有利于縮短由中斷啟動的更高優(yōu)先級進程的平均延時。OSEK操作系統(tǒng)還支持中斷的嵌套。 符合級別 由于汽車嵌入式領域的應用范圍很廣,所以不同的應用程序軟件可能對操作系統(tǒng)的要求有所不同,而且系統(tǒng)實現的硬件環(huán)境也存在很大的差異(如在處理器類型、存儲容量等方面的不同),這就要求操作系統(tǒng)具有靈活的配置能力。 OSEK規(guī)范把這些配置上的不同特點組織成四個級別,即四個符合級別:BCC1,BCC2,ECC1和ECC2。各符合級別在其提供的系統(tǒng)服務、進程類型和對硬件適應能力方面均有所不同,而且在它們之間存在著一定的兼容性。BCC1和BCC2只支持基礎進程,不支持事件機制;ECC1和ECC2支持基礎進程和擴展進程,并且支持事件機制;BCC1和ECC1支持每個優(yōu)先級只有一個進程,BCC2和ECC2支持每個優(yōu)先級可以有多個進程,每個進程可以有多個激活請求。開發(fā)人員可以根據需要選擇合適的符合級別來實現一個完全符合OSEK規(guī)范的操作系統(tǒng),也可以開發(fā)支持全部符合級別的系統(tǒng)并提供配置選項,供用戶選擇使用。 AUTOSAR標準 2003年行業(yè)內的幾大巨頭(包括BMW, Bosch, Continental, DaimlerChrysler, Volkswagen, Siemens VDO)聯(lián)合建立了AUTOSAR聯(lián)盟,目的是一起開發(fā)并建立一套真正的開放的汽車電子電器架構(也就是我們現在所說的AUTOSAR標準或者AUTOSAR架構,AUTOSAR的全稱是AUTomotive Open System ARchitecture),隨著多年的發(fā)展,越來越多的行業(yè)內的公司加入到了AUTOSAR聯(lián)盟中,這其中有OEM(汽車整車廠),Tier1(汽車零部件供應商),芯片制造商以及工具制造商,AUTOSAR構架/標準也成為了汽車E/E設計的發(fā)展方向。 AUTOSAR架構和標準的目標是: 滿足未來汽車的需求,例如可用性和安全性、軟件升級更新需求、可維護性等 增加軟件的靈活性和可擴展性來實現軟件的集成和整合 實現商用現成的跨產品線的軟件硬件 控制產品和流程的復雜度和風險 優(yōu)化成本 AUTOSAR架構的特點 模塊化和可配置性 定義了一套汽車ECU軟件構架,將不依賴硬件的軟件模塊和依賴硬件的軟件模塊分別封裝起來,從而可以讓ECU可以集成由不同供應商提供的軟件模塊,增加了功能的重用性,提高了軟件質量。軟件可以根據不同的ECU功能需求和資源情況進行靈活配置。 接口標準化 定義了一系列的標準API來實現軟件的分層化。 提出了RTE的概念 RTE全稱是Runtime Environment,采用RTE實現了ECU內部和ECU之間的節(jié)點通訊,RTE處于功能軟件模塊和基礎軟件模塊之間,使得軟件集成更加容易。 具有標準的測試規(guī)范 針對功能和通訊總線制定了標準的測試規(guī)范,測是規(guī)范涵蓋的范圍包括對于AUTOSAR的應用兼容性(例如RTE的需求,軟件服務行為需求和庫等)和總線兼容性(總線處理行為和總線協(xié)議等),它的目標是建立標準的測試規(guī)范從而減少測試工作量和成本。 AUTOSAR標準核心內容 ECU軟件構架; 軟件組件(software components); 虛擬功能總線(Virtual Functional Bus); AUTOSAR設計方法(Methodology)。 OSEK/VDX和AUTOSAR關系 AUTOSAR與OSEK二者都是汽車電子軟件的標準。OSEK/VDX是基于ECU開發(fā)的操作系統(tǒng)標準,AUTOSAR基于整體汽車電子開發(fā)的功能標準。AUTOSAR中規(guī)定的操作系統(tǒng)標準就是基于OSEK/VDX,通信和網絡管理雖然和OSEK有區(qū)別,但是是有繼承性的??梢哉J為,AUTOSAR是基于OSEK/VDX發(fā)展出來的,OSEK/VDX被AUTOSAR標準軟件架構所包含。 市場上符合OSEK/VDX規(guī)范的OS產品 FreeOSEK(https://github.com/ciaa/Firmware)和OpenOSEK(https://github.com/parai/OpenOSEK)是兩個開源的OSEK/VDX操作系統(tǒng),目前都在github上。 ProOSEK是德國的3soft公司推出的全世界最早的OSEK/VDX操作系統(tǒng)(1997),為BMW、VM/Audi、DaimlerChrysler提供了基于OSEK的軟件開發(fā)平臺。 Freescale公司開發(fā)的OSEKTurbo是目前市場上實現OSEK/VDX標準中,使用最為廣泛的實時操作系統(tǒng)之一,在業(yè)界居領先地位,完全滿足最新的OSEK/VDX開放系統(tǒng)的標準,支持8、16、32位微處理器,在穩(wěn)定性和軟件質量方面表現出色,當然現在屬于NXP。 Nucleus OSEK是Accelerated Technology Embedded System公司基于開源的Nucleus PLUS操作系統(tǒng)的基礎之上實現的,它實現了OSEK/VDX標準的V2.2R1版本,提供了完全的OSEK/VDX認證。 Embedded Office開發(fā)的OSEK Extension for uC/OS II基于開源的uC/OS II操作系統(tǒng),通過了BCC1、ECC1、CCCA、CCCB的官方認證。 OSEKWorks是Wind River公司在其VxWorks的基礎之上根據OSEK/VDX標準擴展開發(fā)的,具有VxWorks的優(yōu)良特性。 osCAN是德國的Vector公司開發(fā)的具有CANopen協(xié)議棧的OSEK操作系統(tǒng),可以結合Vector公司任意通信協(xié)議,支持多版本的CAN協(xié)議,具有多種特殊功能,例如運行過程中的堆棧管理,多種堆棧優(yōu)化方法,內部跟蹤、模板生成器、組件管理器等。 RTA-OSEK是LiveDevices公司開發(fā)的,是全球第一個完整實現OSEK所有一致類的RTOS。ERCOSEK是BOSCH公司在其發(fā)動機管理系統(tǒng)中使用的實時操作系統(tǒng),由ETAS公司開發(fā)。LiveDevices與ETAS在2007年合并。 R-OSEK是由韓國電子與電信研究院(ETRI)開發(fā)的OSEK/VDX標準的RTOS,ETRI從2006年投資了367萬美元用于開發(fā)ROSEK,并于2009年5月份通過了OSEK/VDX的認證。 DeltaOSEK是中國北京科銀京成技術有限公司為汽車電子的控制類應用所開發(fā)的、符合OSEK/VDX標準的嵌入式操作系統(tǒng),提供標準的OS及COM功能部件的應用編程接口。它的最新版本在MPC555/MPC5554的平臺上通過了OSEK/VDX測試集的全面測試,符合OSEK/VDX標準,于2009年3月獲得了OSEK/VDX認證機構的認可。 SmartOSEK OS是由浙江大學ESE工程中心開發(fā)的符合OSEK/VDX標準的嵌入式實時操作系統(tǒng),在2005年通過了國際OSEK/VDX組織的官方認證。SmartOSEK OS支持多種國際主流處理器,滿足不同的硬件需求,具有靜態(tài)配置、微內核和實時性等優(yōu)點,實現可搶占式內核以及多種實時調度機制,適用于實時性要求較高的汽車電子產品。 |
|