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