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

優(yōu)先級反序算法在汽車電子控制平臺設計中的應用

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

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

?

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


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


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

?

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

?

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

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

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