《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 優(yōu)先級(jí)反序算法在汽車電子控制平臺(tái)設(shè)計(jì)中的應(yīng)用

優(yōu)先級(jí)反序算法在汽車電子控制平臺(tái)設(shè)計(jì)中的應(yīng)用

2009-07-14
作者:冷 靜1,耿劍鋒1,宋雪樺1,

??? 摘 要: 為了實(shí)現(xiàn)汽車應(yīng)用軟件在不同開發(fā)平臺(tái)上的無縫連接,將μC/OS-II操作系統(tǒng)移植到飛思卡爾芯片MC9S12DP256B微控制器上,構(gòu)建了一個(gè)開放的微控制器硬件控制平臺(tái);同時(shí)與汽車業(yè)界提出的OSEK/VDX標(biāo)準(zhǔn)相匹配,采用優(yōu)先級(jí)反序算法設(shè)計(jì)了基于μC/OS-II微內(nèi)核結(jié)構(gòu)的汽車專用嵌入式操作系統(tǒng)。通過測(cè)試表明,系統(tǒng)為應(yīng)用程序提供了穩(wěn)定的運(yùn)行平臺(tái),優(yōu)化了汽車控制性能。
??? 關(guān)鍵詞: μC/OS-II微內(nèi)核;OSEK/VDX標(biāo)準(zhǔn);優(yōu)先級(jí);嵌入式

?

?? 隨著科技的進(jìn)步,人們對(duì)汽車的性能指標(biāo)要求越來越高,由此汽車電子化程度也在不斷提高,使得當(dāng)代汽車電控單元從硬件到軟件變得更加復(fù)雜,迫切需要汽車嵌入式操作系統(tǒng)開發(fā)平臺(tái)協(xié)助完成各種電控單元的設(shè)計(jì)及開發(fā)。μC/OS-II微內(nèi)核代碼簡(jiǎn)潔,實(shí)時(shí)性和專用性強(qiáng),作為汽車專用嵌入式操作系統(tǒng)的微內(nèi)核,移植到芯片MC9S12DP256B[1]微控制器上,構(gòu)建一個(gè)開放的汽車電子微控制器硬件控制平臺(tái), 在此硬件基礎(chǔ)上通過優(yōu)先級(jí)反序算法設(shè)計(jì)符合汽車業(yè)界OSEK/VDX規(guī)范標(biāo)準(zhǔn)的汽車電子嵌入式操作系統(tǒng),使得該操作系統(tǒng)在可移植性、可靠性以及擴(kuò)展性方面有很大的提高。
??? 本文針對(duì)μC/OS-II[2]微內(nèi)核設(shè)計(jì)符合OSEK/VDX標(biāo)準(zhǔn)的汽車電子嵌入式操作系統(tǒng),并進(jìn)行了功能測(cè)試,系統(tǒng)運(yùn)行穩(wěn)定。
1? OSEK/VDX規(guī)范的研究
??? 為了屏蔽不同電控單元(ECU)的接口特性,減少開發(fā)費(fèi)用和時(shí)間,實(shí)現(xiàn)軟件的可移植性、可擴(kuò)展性而提出的OSEK/VDX開放式系統(tǒng)及接口規(guī)范[3],主要包括4部分:(1)操作系統(tǒng)(OS)規(guī)范,該規(guī)范定義操作系統(tǒng)內(nèi)核的實(shí)現(xiàn)機(jī)制和應(yīng)用編程接口(API);(2)通信(COM)規(guī)范。實(shí)現(xiàn)各個(gè)電控單元間和某個(gè)電控單元內(nèi)的數(shù)據(jù)信息交換,即外部與內(nèi)部通信;(3)網(wǎng)絡(luò)管理(NM)規(guī)范。電控單元通過串行數(shù)據(jù)通信鏈連接成網(wǎng)絡(luò),網(wǎng)絡(luò)管理規(guī)范為保證通信網(wǎng)的安全性與可靠性,提供了確保網(wǎng)絡(luò)功能的接口函數(shù);(4)實(shí)現(xiàn)語(yǔ)言(OIL)。根據(jù)應(yīng)用軟件的實(shí)際需要配置操作系統(tǒng)及通信機(jī)制,以縮減最終生成可執(zhí)行文件的體積。操作系統(tǒng)、通信管理和網(wǎng)絡(luò)管理是3個(gè)可以獨(dú)立存在的模塊,三者之間關(guān)系如圖1所示。


??? OSEK OS是針對(duì)汽車應(yīng)用特點(diǎn)而專門制定的一個(gè)小型RTOS規(guī)范,具有以下特點(diǎn):
??? (1)可移植性,所有API都是標(biāo)準(zhǔn)化的并且在功能上都有明確的定義。
  (2)可擴(kuò)展性,OSEK OS要求通用于各種類型的ECU,因此一方面系統(tǒng)要高度地模塊化, 同時(shí)能進(jìn)行靈活的配置。
  (3)汽車應(yīng)用需要的可靠性、實(shí)用性等。由于采用微內(nèi)核結(jié)構(gòu),其微內(nèi)核部分代碼數(shù)量小, 各個(gè)部分之間關(guān)系不是很復(fù)雜, 可以保證代碼的正確性。當(dāng)增加操作系統(tǒng)功能時(shí), 只需在核外調(diào)試和運(yùn)行, 不會(huì)危及到微核, 整個(gè)系統(tǒng)的安全系數(shù)也比較高。
2?符合OSEK/VDX規(guī)范的優(yōu)先級(jí)反序算法
  OSEK OS與μC/OS-II內(nèi)核在優(yōu)先級(jí)順序上采取不同使用方法。在μC/OS-II內(nèi)核的64個(gè)優(yōu)先級(jí)中,數(shù)字越小表明級(jí)別越高。而OSEK標(biāo)準(zhǔn)相反,要求數(shù)字越大級(jí)別越高。為了實(shí)現(xiàn)符合OSEK汽車電子國(guó)際標(biāo)準(zhǔn)的汽車嵌入式系統(tǒng),本文針對(duì)μC/OS-II內(nèi)核,設(shè)計(jì)了符合OSEK OS標(biāo)準(zhǔn)中關(guān)于優(yōu)先級(jí)的要求。
??? 運(yùn)行最高優(yōu)先級(jí)任務(wù)的實(shí)現(xiàn)步驟[4]:首先使已經(jīng)創(chuàng)建的任務(wù)進(jìn)入就緒表,然后查詢就緒表中優(yōu)先級(jí)最高的任務(wù),最后通過調(diào)度函數(shù)運(yùn)行該最高優(yōu)先級(jí)任務(wù)。在μC/OS-II操作系統(tǒng)中,定義了2個(gè)數(shù)組OSMapTbl[ ]和OSUnMapTbl[ ]以及1張就緒表。就緒表中有2個(gè)變量:OSRdyTbl[ ]和OSRdyGrp。在OSRdyGrp中,任務(wù)按優(yōu)先級(jí)分組,由于μC/OS-II操作系統(tǒng)的優(yōu)先級(jí)定義為64級(jí),所以8個(gè)任務(wù)定為一組。OSRdyGrp中的每一位表示8組任務(wù)中每一組是否有進(jìn)入就緒態(tài)的任務(wù)。任務(wù)進(jìn)入就緒態(tài)時(shí),OSRdyTbl[ ]中的相應(yīng)元素的相應(yīng)位置為1。OSRdyGrp和OSRdyTbl[ ]之間的關(guān)系為:當(dāng)OSRdyTbl[i](0≤i≤7)中的任何1位是1時(shí),OSRdyGrp的第i位置1。任務(wù)優(yōu)先級(jí)prio的低3位確定任務(wù)在就緒表OSRdyTbl[ ]中的位置,緊接著的3位表示任務(wù)占據(jù)OSRdyGrp的第幾位。
  在μC/OS-II中,使任務(wù)進(jìn)入就緒態(tài)的方法是:
??? OSRdyGrp|=OSMapTbl[prio>>3];
??? OSRdyTbl[prio>>3]|=OSMapTbl[prio&0 x 07]
??? 其中,(prio>>3)表示優(yōu)先級(jí)在變量OSRdyGrp中的位置;(prio&0x07)表示優(yōu)先級(jí)在變量OSRdyTbl[ ]中的位置。|=表示將OSMapTbl[ ]的值與OSRdyGrp按位“或”,該方法中,第1句的含義是使就緒表變量OSRdyGrp置位, 第2句則使就緒表變量OSRdyTbl[ ]置位。
??? 任務(wù)進(jìn)入就緒態(tài)以后,操作系統(tǒng)根據(jù)應(yīng)用程序,通過調(diào)度函數(shù)調(diào)用已經(jīng)就緒的任務(wù)。由于CPU的使用權(quán)只能被一個(gè)任務(wù)占有,此時(shí)需要找出就緒表中優(yōu)先級(jí)最高的任務(wù)投入運(yùn)行,這一過程由如下代碼表示:
??? y=OSUnMapTbl[OSRdyGrp];
??? x=OSUnMapTbl[OSRdyTbl[y]];
??? prio=(y<<3)+x;
  OSUnMapTbl[ ]表用來查找已經(jīng)就緒的優(yōu)先級(jí)最高的任務(wù)。利用此表,可以不用遍歷所有就緒的任務(wù)而直接找到就緒了的最高優(yōu)先級(jí)任務(wù),節(jié)省系統(tǒng)調(diào)度時(shí)間,提高CPU利用率,增強(qiáng)內(nèi)核實(shí)時(shí)性。在該代碼段中,第1句表示找出就緒任務(wù)中最高優(yōu)先級(jí)所處變量OSRdyGrp中的位置碼y, 第2句則找出了該優(yōu)先級(jí)在變量OSRdyTbl[ ]中的位置碼x,第3句根據(jù)y與x求出就緒表中任務(wù)的最高優(yōu)先級(jí)。
  當(dāng)任務(wù)運(yùn)行完畢(即任務(wù)進(jìn)入掛起、等待狀態(tài)時(shí))或者任務(wù)被刪除,需要將任務(wù)從就緒表中刪除。具體實(shí)現(xiàn)方法:
??? if((OSRdyTbl[prio>>3]&~OSMapTbl[prio&0x07])==0)
??? OSRdyGrp &=~OSMapTbl[prio>>3]
??? 針對(duì)以上μC/OS-II操作系統(tǒng)對(duì)優(yōu)先級(jí)使用的描述,本文提出了一種將優(yōu)先級(jí)反序的方法,用來與OSEK/VDX的操作系統(tǒng)規(guī)范相對(duì)應(yīng)。
??? 首先,將就緒表中的內(nèi)容反序,OSMapTbl[ ]的值保持不變,結(jié)果如圖2所示。


??? 同時(shí)把任務(wù)進(jìn)入就緒態(tài)的方法修改為:
??? OSRdyGrp|=OSMapTbl[(~prio)&0 x 3 F>>3];
??? OSRdyTbl[(OSMapTbl)>>3]|=OSMapTbl[((~prio)&0 x 3 F)& 0 x 07];
  其次,在OSUnMapTbl[ ]的值維持原狀的基礎(chǔ)上,把找出就緒態(tài)中優(yōu)先級(jí)最高任務(wù)的方法做如下改動(dòng):
??? y=OSUnMapTbl[OSRdyGrp];
??? x=OSUnMapTbl[OSRdy[y]];
??? prio=((7-y)<<3)+x;
  最后,任務(wù)退出就緒狀態(tài)所用的方法也需要改變:
??? if((OSRdyTbl[((~prio)&0 x 3 F)>>3]&=~OSMapTbl[((~prio)& 0 x 3 F)& 0 x 0 7])==0)
??? OSRdyGrp&=~OSMapTbl[((~prio)& 0 x 3 F)>>3]
3? 測(cè)試
??? 為了驗(yàn)證系統(tǒng)的可靠性,使用以MC9S12DP256B芯片為主的電控單元開發(fā)板、背景調(diào)試模式的BDM調(diào)試器[5]和示波器對(duì)上面算法的修改做了測(cè)試,利用Codewarrior編譯器將操作系統(tǒng)下載到開發(fā)板上。測(cè)試實(shí)驗(yàn)環(huán)境如圖3所示。

?

3.1? 測(cè)試方案
??? 首先在主函數(shù)中創(chuàng)建一個(gè)優(yōu)先級(jí)為60的MainTask任務(wù),然后調(diào)用OSStart()函數(shù)使操作系統(tǒng)開始運(yùn)行。在MainTask里,先對(duì)時(shí)鐘進(jìn)行初始化,并創(chuàng)建2個(gè)優(yōu)先級(jí)分別為55和50的任務(wù)Taska和Taskb,在Taska中設(shè)置PORTB_BIT0=1、PORTB_BIT0=0,并持續(xù)50萬個(gè)計(jì)數(shù)值。Taskb中設(shè)置PORTB_BIT1=1。在MainTask任務(wù)循環(huán)里,先設(shè)置PORTB_BIT2=1,再通過OSTimeGet()函數(shù)為自己設(shè)置計(jì)數(shù)器,當(dāng)計(jì)數(shù)器達(dá)到預(yù)定值時(shí),將自己掛起。
3.2? 測(cè)試結(jié)果
??? 通過觀察開發(fā)板上相對(duì)于PORTB口的指示燈,發(fā)現(xiàn)2燈(對(duì)應(yīng)PORTB_BIT2位)先滅(開發(fā)板上端口置1表示燈滅,因?yàn)殒i存處于一直滅掉狀態(tài)),之后0燈(對(duì)應(yīng)PORTB_BIT0位)滅亮交替,而1燈(對(duì)應(yīng)PORTB_BIT1位)一直沒有變化(沒有執(zhí)行到該任務(wù),優(yōu)先級(jí)最低)。測(cè)試結(jié)果如圖4所示。圖中示波器1通道表示Taska對(duì)應(yīng)的輸出口PORTB_BIT0,保持高電平的2μs是執(zhí)行PORTB_BIT0=1這一語(yǔ)句所用的時(shí)間,保持低電平的3.6 μs是執(zhí)行持續(xù)50萬個(gè)計(jì)數(shù)值得PORTB_BIT0=0語(yǔ)句;示波器2通道表示MainTask對(duì)應(yīng)的輸出口PORTB_BIT2。測(cè)試結(jié)果的波形顯示與端口燈的顯示情況完全符合,說明優(yōu)先級(jí)反序算法是正確的。

?

??? 本文實(shí)現(xiàn)了優(yōu)先級(jí)符合OSEK/VDX標(biāo)準(zhǔn)的汽車電子嵌入式操作系統(tǒng)設(shè)計(jì),實(shí)際測(cè)試表明,該系統(tǒng)運(yùn)行穩(wěn)定,能夠?yàn)閼?yīng)用程序提供良好的運(yùn)行環(huán)境,適應(yīng)于要求反應(yīng)可靠的汽車控制系統(tǒng),具有良好的應(yīng)用前景。

參考文獻(xiàn)
[1] 楊國(guó)田,白焰.Motorola 68HC12系列微控制器原理、應(yīng)用與開發(fā)技術(shù)[M].北京:中國(guó)電力出版社,2003.
[2] LABROSSE J J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ(第2版)[M].邵貝貝,譯.北京:北京航空航天大學(xué)出版社,2003.
[3] 國(guó)際標(biāo)準(zhǔn)化組織汽車委員會(huì).OSEK/VDX specifications.ISO 17356-2-2005,汽車電子開放式系統(tǒng)及接口規(guī)范[S].2005.
[4] 任哲. 嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II原理及應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,2005.
[5] 姚冉中,潘宏俠. μC/OS-II在TMS320F2812上的移植和研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,140(2):162-163.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。