舒 適,李銀國,蔣建春
(1.重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院,重慶 400065;2.重慶高校汽車電子與嵌入式系統(tǒng)工程研究中心,重慶 400065)
隨著汽車電子行業(yè)的飛速發(fā)展,各種電子控制單元ECU(Electronic Control Unit)硬件層出不窮,過去針對ECU 的軟件開發(fā)過于依賴系統(tǒng)硬件,嚴重影響了開發(fā)效率。為了提高軟件的復(fù)用率,全球汽車制造商、零部件供應(yīng)商及其他電子、半導(dǎo)體和軟件系統(tǒng)公司共同制定了AUTOSAR(AUTomotive Open System ARchitecture)[1]規(guī)范,它定義了一套支持分布式、功能驅(qū)動的汽車電子軟件開發(fā)方法以及ECU 上的軟件架構(gòu)標準化配置方案?;贏UTOSAR 規(guī)范的配置分為應(yīng)用組件配置、系統(tǒng)配置和ECU 配置[2]。應(yīng)用組件配置需要定義好組件間的通信接口并提供組件的描述文件[3],系統(tǒng)配置主要是在整個系統(tǒng)層面上對運行時環(huán)境RTE(Real-Time Enviroment)層進行設(shè)計[4];ECU 配置關(guān)注當前ECU 軟件架構(gòu)中各個模塊的配置及代碼生成[5]。目前還沒有針對ECU配置中驅(qū)動各模塊結(jié)構(gòu)體初始化的圖形配置工具,其難點在于各種結(jié)構(gòu)體嵌套使映射出的軟件界面元素規(guī)則復(fù)雜化,且擴展芯片各模塊結(jié)構(gòu)體的未知性,使得配置工具不易兼容。本文基于AUTOSAR 規(guī)范,采用模型驅(qū)動體系結(jié)構(gòu)MDA(Model Driven Architecture)[6]的開發(fā)方式,提出了一種驅(qū)動配置界面潛在規(guī)則的挖掘方法,該方法對模型的潛在規(guī)則進行挖掘、回溯驗證,把驅(qū)動模塊配置及初始化細節(jié)映射到界面上,方便用戶對驅(qū)動進行配置。最后,基于上述理論,開發(fā)了相應(yīng)的驅(qū)動可視化配置軟件。
MDA 方法的思想是使業(yè)務(wù)邏輯和具體實現(xiàn)分離,更好地達到軟件復(fù)用的目的。MDA 主要流程[7]如圖1所示,其中,PIM(Platform Independent Model)為平臺無關(guān)模型,PSM(Platform Specific Model)為平臺相關(guān)模型。驅(qū)動配置中的PIM模板是用XML 語言描述的ECU 配置項信息,由PIM 規(guī)則組成,PIM 規(guī)則為XML語言中結(jié)點的包含和并列關(guān)系以及這兩種關(guān)系的各種組合。
Figure 1 MDA-based embedded software development process圖1 基于MDA 的嵌入式軟件開發(fā)過程
驅(qū)動配置軟件是將含有驅(qū)動各模塊配置項信息的PIM 模板作為輸入,映射成圖形界面元素;圖形界面元素為軟件界面中的一條記錄,它代表XML中的一個結(jié)點;在圖形界面中對每條記錄的信息進行配置,然后保存回PIM,再將PIM與PSM 結(jié)合生成配置文件。整個過程的難點在于如何使PIM 規(guī)則能適用于不同ECU 芯片。這是一個分析問題域、設(shè)計和預(yù)測問題域規(guī)則以滿足各種情況的過程。PIM 規(guī)則需要從以下幾個方面考慮:
(1)簡便性:用戶易于使用;
(2)完備性:覆蓋問題域中的所有現(xiàn)有行為;
(3)預(yù)測性:基于當前行為挖掘未來可能的行為;
(4)正確性:驗證規(guī)則是否符合問題域邏輯。
PIM 規(guī)則的挖掘流程可分為四個步驟:分析問題域行為、轉(zhuǎn)換自然語言、建立森林、潛在規(guī)則挖掘。如圖2所示。
Figure 2 PIM modeling process圖2 PIM 建模流程
步驟1 在問題領(lǐng)域中通過分析了解用戶需求,用自然語言列舉出問題域中的行為。
步驟2 把步驟1中的自然語言抽象出來,根據(jù)下面的定義1和定義2進行轉(zhuǎn)換:
定義1 a 包含b=(a(b));
定義2 a 并列b=(a,b)。
步驟3 將步驟2中的表達式根據(jù)下面的定義3和定義4轉(zhuǎn)換成森林:
定義3 (a(b))={a,b|a,b分別為樹的父、子結(jié)點};
定義4 (a,b)={a,b|a,b為樹的兄弟結(jié)點}。
步驟4 對步驟3中的森林橫向挖掘和縱向挖掘,再回溯到步驟1中驗證是否符合邏輯,若符合就保留,不符合或者重復(fù),則去掉。
在基于AUTOSAR 的嵌入式系統(tǒng)底層驅(qū)動配置中,問題域的行為主要是與驅(qū)動資源庫各模塊的內(nèi)部實現(xiàn)相關(guān),包括頭文件和初始化結(jié)構(gòu)體。下面以實際開發(fā)的項目為例,列舉出驅(qū)動配置問題域中的所有現(xiàn)有行為,每條自然語言描述一種實際的行為:
(1)頭文件中宏定義和結(jié)構(gòu)體部分屬性初始化,用戶可以輸入值對其賦值。
(2)頭文件中開關(guān)函數(shù)和結(jié)構(gòu)體部分屬性的枚舉,用戶可以從多個備選中任選其一對其賦值。
(3)頭文件中的通道選擇,用戶可以從多個備選中任選一個或多個。
(4)結(jié)構(gòu)體初始化中,結(jié)構(gòu)體嵌套子結(jié)構(gòu)體,內(nèi)層子結(jié)構(gòu)體為一個整體組合,組合中包含不同的屬性,用戶在外層輸入數(shù)字代表內(nèi)層組合的重復(fù)次數(shù)。
(5)結(jié)構(gòu)體初始化中,結(jié)構(gòu)體嵌套子結(jié)構(gòu)體,內(nèi)層結(jié)構(gòu)體屬性和外層相同,根據(jù)外層的選擇,內(nèi)層出現(xiàn)相應(yīng)的某個屬性,每次有且僅有一個被選中。
(6)結(jié)構(gòu)體初始化中,結(jié)構(gòu)體嵌套子結(jié)構(gòu)體,內(nèi)層結(jié)構(gòu)體屬性和外層相同,內(nèi)層中列出子結(jié)構(gòu)體的屬性,可以任選一個或多個。
從各種芯片的驅(qū)動資源庫分析可知,其基本界面元素只有編輯框(Edit1,Edit2)、下拉框(Combo)和列表框(List),其它各種復(fù)雜的界面行為都是這幾種基本界面元素的組合,因此用這幾種基本界面元素可以表示各種界面行為。將3.2節(jié)問題域中的六條自然語言用界面元素符號分別表示如下:
(1)Edit1。
(2)Combo。
(3)List。
(4)Edit2,包含Edit1、Combo、List、Edit2,內(nèi)層并列。
(5)Combo包含Combo。
(6)List包含List。
分別令Edit1、Combo、List、Edit2 為樹結(jié)點a、b、c、e,那么,自然語言抽象如下:
(1)(a)。
(2)(b)。
(3)(c)。
(4)(e(a,b,c,e))。
(5)(b(b))。
(6)(c(c))。
根據(jù)3.3節(jié)抽象出的表達式,建立如圖3所示的森林。
問題域中用自然語言列舉了全部現(xiàn)有行為,再將自然語言轉(zhuǎn)換為相應(yīng)表達式,因此在其基礎(chǔ)上建立的森林覆蓋了現(xiàn)有問題域中的所有行為,再針對森林進行潛在規(guī)則的挖掘。
Figure 3 Interface actions of forests圖3 界面行為森林
樹拼接是對森林中任何兩棵樹的根結(jié)點進行試探性拼接,符合邏輯的保留,不符合的則去掉。樹拼接的潛在規(guī)則挖掘包括橫向挖掘和縱向挖掘。
(1)橫向挖掘。
例如,選擇的樹為a 和b,把b 作為a 的子結(jié)點,返回問題域,由于a 在問題域中代表的是Edit1,只接收輸入值,不可能在其下出現(xiàn)包含子結(jié)點的情況,所以去掉這種分支。若把a作為b 的子結(jié)點,返回問題域,b代表的是Combo,可以包含它本身。若包含其他類型的界面元素,如Edit1、List、Edit2,在一個結(jié)構(gòu)體下嵌套另一子結(jié)構(gòu)體,子結(jié)構(gòu)體有多個不同類型的屬性,只能選其中之一,是符合問題域邏輯的,所以保留這個分支。圖3經(jīng)過橫向挖掘后,得到的森林T 如圖4所示。
Figure 4 Horizontal mining forest圖4 橫向挖掘后的森林
(2)縱向挖掘。
在森林T 中,如果一棵樹t1的根結(jié)點與森林T 中任何(包括t1)一棵樹t2的子結(jié)點同類型,那么用樹t1取代t2的子結(jié)點,且這個過程可遞歸。對于取代拼接的每一種情況,回溯到問題域中驗證是否符合邏輯,符合則保留,不符合則去掉。
例如,在圖4d 中,根結(jié)點e與子結(jié)點e 同類型,所以可用e樹取代結(jié)點e,虛線表示多層遞歸,返回到問題域中驗證,e代表Edit2,可包含Edit1、Combo、List、Edit2,且中間過程可以一直遞歸下去,所以符合問題域邏輯,保留該分支,如圖5 所示。
Figure 5 Vertical expansion figure 4d圖5 縱向擴展圖4d
按此方法,圖4經(jīng)縱向挖掘后最終得到的森林如圖6所示。
Figure 6 Vertical excavation forest圖6 縱向挖掘后的森林
最終的森林包含了問題域的現(xiàn)有行為和擴展行為,依此為PIM 的規(guī)則建立PIM 模型,可解析映射出盡可能多的界面行為。
以實際項目為例,加入STM8 芯片和XC167芯片到驅(qū)動配置軟件中,只需要編寫描述各自相關(guān)配置項信息的PIM 模板,其中有下面四種類型的界面行為。為方便閱讀,以下的XML 省略掉了結(jié)點的某些屬性。編寫完P(guān)IM 模板,將其導(dǎo)入到配置軟件中,通過解析即可映射出相應(yīng)的界面元素,XML結(jié)點映射界面記錄,XML 中結(jié)點間的包含、并列及各種組合關(guān)系也在界面的各條記錄中體現(xiàn)。
(1)Edit1,接收用戶輸入值。
如圖7a所示,屬性名縱列的Name1 為XML模板的EditItem 中name值的映射,屬性值縱列的1為EditItem 中value值的映射。
(2)Combo,可包含用戶輸入型Edit1、枚舉型Combo、列表型List和綜合型Edit2。ComboItem的value值只能是其子結(jié)點中的某一個。
如圖7b所示,屬性名縱列中LIN_CHNEL映射XML模板第一級ComboItem 的name值,屬性值縱列中STD_ON[]映射第一級ComboItem 的value值。而LIN_CHNEL 的子結(jié)點STD_ON[]映射第二級ListItem 的name值。子結(jié)點LIN_UART 遞歸映射第三級EditItem 的name值,LIN_UART 映射value值。
(3)List,可包含用戶輸入型Edit1、枚舉型Combo、列表型List和綜合型Edit2。ListItem 的子結(jié)點有selected屬性,表示是否選中該結(jié)點。
Figure 7 Configuration software graphical interface screenshots圖7 配置軟件圖形界面截圖
如圖7b所示,屬性名縱列中ADC_ATDx[]映射XML模板第一級ListItem 的name值,而它下面包含子結(jié)點ADC_CT、ADC_HT、ADC_ATD0[]和ADC_ATD1[]為XML 模板第二級結(jié)點,前兩項為第二級EditItem 的name值映射,后兩項為第二級ListItem 的name值映射,而ADC_ATD0[]和ADC_ATD1[]下的子結(jié)點又分別遞歸映射第三級EditItem 的name和value值。
(4)Edit2,EditArray 下包含Base結(jié)點,Base只起邊界限定作用,不代表具體行為。Base下的所有子結(jié)點是需要重復(fù)地組合,組合中有用戶輸入型Edit1、枚舉型Combo、列表型List和綜合型Edit2。重復(fù)的次數(shù)由用戶輸入值控制。
如圖7a所示,屬性名縱列中Name2映射第一級EditArray的name值,屬性值縱列中四映射其value值。值4表示其下有4組并列,分別用base0~base3 標識邊界,這里只用base0 一組為例,base0為第二級Base結(jié)點的name值映射,起邊界作用。SpiBufferNumber[0]、SpiChannelTyp[0]、whatever[0]和SpiJobAssignment[0]為base0 下的三級結(jié)點,前兩項為第三級EditItem 各項值的映射,第三項為第三級ListItem 各項值映射,第四項為第三級EditArray遞歸映射。Whatever[0]下的子結(jié)點Name3、Name4和Name5為第四級EditItem 遞歸映射的name 屬性值。SpiJobAssignment[0]的值為3,說明其下子結(jié)點有三組,分別用base00~base02標識,這里以base00為例,base00為SpiJobAssignment[0]下的第五級Base遞歸映射,而ChannelAssignment[0]為base00下的第六級EditItem 遞歸映射。
圖7a 和圖7b 為不同芯片驅(qū)動相關(guān)模塊的XML模板映射界面截圖,從圖中可知,該方法能完整地將含有配置信息的XML 模板映射到圖形界面,且保持XML 模板中結(jié)點間的父子和兄弟關(guān)系。
通過對嵌入式系統(tǒng)底層驅(qū)動的PIM 潛在規(guī)則進行挖掘,使驅(qū)動配置軟件在設(shè)計時以更全面的PIM 模型為基礎(chǔ)。實際應(yīng)用證明了在面對不同芯片時,該軟件能很好地兼容,大大降低了二次開發(fā)的成本。
[1]Autosar_Specification 4.0 SW_Architecture[EB/OL].[2009-01-01].http://www.autosar.org/.
[2]Xu Xin-peng,Wang Xiang,Lu Jian-hua,et al.Based on the AUTOSAR methodology of application component configuration[J].Computer Engineering,2010,36(18):240-242.(in Chinese)
[3]Jo H C,Piao S,Jin S H,et al.Software development tool design for automotive applications[C]∥Proc of 2009ICROSSICE International Joint Conference,2009:5645-5648.
[4]Jo H C,Piao S,Cho S R,et al.RTE template structure for AUTOSAR based embedded software platform[C]∥Proc of 2008IEEE/ASME International Conference on Mechtronic and Embedded Systems and Applications,2008:233-237.
[5]AUTOSAR GbR.AUTOSAR specification of ECU configuration R3.0[EB/OL].[2008-01-01].http://www.autosar.org/.
[6]Miller J,Mukerji J.MDA guide version 1.0.1[EB/OL].[2003-01-01].http://www.omg.com/mda/.
[7]Yuan Feng.MDA dreams and reality-rescue sisyphus[J].Software World,2007(14):4.(in Chinese)
附中文參考文獻:
[2]徐鑫朋,王翔,陸建華,等.基于AUTOSAR 方法論的應(yīng)用組件配置[J].計算機工程,2010,36(18):240-242.
[7]袁峰.MDA 的夢想與現(xiàn)實——解救西西弗斯[J].軟件世界,2007(14):4.