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