專利名稱:Aadl模型的自動(dòng)代碼生成方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種自動(dòng)代碼生成方法,具體來(lái)講,涉及一種將AADL模型所描述的性 能關(guān)鍵的實(shí)時(shí)系統(tǒng)軟硬件體系結(jié)構(gòu)映射成平臺(tái)相關(guān)的C代碼的方法,以便進(jìn)行分析和設(shè) 計(jì)。
背景技術(shù):
AADL是一種支持對(duì)系統(tǒng)體系結(jié)構(gòu)進(jìn)行早期分析的建模語(yǔ)言,既是一種圖形化也是 一種字符化的語(yǔ)言。它能夠用來(lái)設(shè)計(jì)和分析性能關(guān)鍵的實(shí)時(shí)系統(tǒng)的軟硬件體系結(jié)構(gòu),描述 組件之間的功能接口以及組件的時(shí)間需求。它也能夠描述組件之間的交互關(guān)系,如數(shù)據(jù)輸 入輸出、軟件組件和硬件組件之間的綁定關(guān)系等。AADL可以和支持自動(dòng)生成源代碼的分析 工具結(jié)合使用來(lái)一體化系統(tǒng)組件和創(chuàng)建系統(tǒng)執(zhí)行。因此設(shè)計(jì)者可能從各個(gè)方面對(duì)模型進(jìn)行 分析和評(píng)估。下面分三個(gè)方面簡(jiǎn)要介紹AADL模型元素
1、組件 組件是AADL的主要建模單位。AADL中包含軟件組件、執(zhí)行平臺(tái)組件和組合組件三 大類型。 1. 1、軟件組件包含數(shù)據(jù)、子程序、線程、進(jìn)程等部分。 數(shù)據(jù)組件表示源代碼中的靜態(tài)數(shù)據(jù)。這個(gè)數(shù)據(jù)可以被進(jìn)程和線程共享。線程和進(jìn) 程通過(guò)要求訪問(wèn)外部數(shù)據(jù)組件的標(biāo)志來(lái)實(shí)現(xiàn)共享數(shù)據(jù)。并發(fā)的數(shù)據(jù)訪問(wèn)由屬性指定的相應(yīng) 的并發(fā)控制協(xié)議來(lái)管理。 子程序組件為連續(xù)執(zhí)行的源代碼建模,可以在線程和子程序中被調(diào)用。子程序還
可以請(qǐng)求訪問(wèn)數(shù)據(jù)組件。 線程組件為并發(fā)執(zhí)行單元建模。 進(jìn)程組件通過(guò)包含源代碼程序的虛擬地址空間來(lái)給空間建模。 1.2、執(zhí)行平臺(tái)組件表示可以調(diào)度線程,可以在運(yùn)行時(shí)加強(qiáng)指定地址保護(hù),可以保
存源代碼和數(shù)據(jù),可以與外部環(huán)境連接。它一般包含處理器、外設(shè)、存儲(chǔ)器、總線等組件。 處理器組件是負(fù)責(zé)調(diào)度和執(zhí)行線程的硬件和軟件的一個(gè)抽象。換句話說(shuō),一個(gè)處
理器可以包含操作系統(tǒng)提供的功能。作為選擇,操作系統(tǒng)可以像應(yīng)用組件一樣被建模。處
理器能包含存儲(chǔ)器,也可以請(qǐng)求訪問(wèn)總線。處理器支持不同的調(diào)度協(xié)議。線程需要綁定到
處理器進(jìn)行調(diào)度和執(zhí)行。 外設(shè)組件為有外部環(huán)境接口的物理設(shè)備建模。 存儲(chǔ)器組件為隨機(jī)訪問(wèn)物理存儲(chǔ)器建模,如RAM或ROM。源代碼的二進(jìn)制映射和存 儲(chǔ)器相綁定。 總線組件為處理器,存儲(chǔ)器和外設(shè)之間的控制和數(shù)據(jù)交換的通信通道建模。
1. 3、組合組件為軟件組件和執(zhí)行平臺(tái)組件的結(jié)構(gòu)化組合建模。
模式。AADL系統(tǒng)模型結(jié)構(gòu)的動(dòng)態(tài)變化通過(guò)定義模式來(lái)實(shí)現(xiàn),模式具有觸發(fā)事件以 及可以在每個(gè)模式下分別定義系統(tǒng)結(jié)構(gòu)。模式的切換能改變活動(dòng)組件和連接的集合,如果
3線程不屬于當(dāng)前模式,則不能被處理器組件的調(diào)度器選擇執(zhí)行,如果關(guān)聯(lián)不屬于當(dāng)前模型, 則也不能被使用。 接口和交互。AADL系統(tǒng)模型中定義了表示狀態(tài)數(shù)據(jù)躍遷的連接點(diǎn)的數(shù)據(jù)端口, 控制線程調(diào)度和模式轉(zhuǎn)換的連接點(diǎn)的事件端口,同步調(diào)度/返回的連接點(diǎn),共享數(shù)據(jù)提供 和請(qǐng)求訪問(wèn),以及在運(yùn)行時(shí)在單個(gè)組件之間控制流和數(shù)據(jù)流模式來(lái)滿足體系模型的交互操 作。 隨著嵌入式系統(tǒng)在安全關(guān)鍵領(lǐng)域的廣泛應(yīng)用,必須采用現(xiàn)代軟件工程的技術(shù)進(jìn)一 步提高AADL模型的可信性,以保證人們的生命安全。AADL模型的自動(dòng)代碼生成技術(shù),在提 高代碼質(zhì)量,緩解軟件危機(jī)是一個(gè)不可缺少的手段。而AADL模型是為滿足性能關(guān)鍵實(shí)時(shí)系 統(tǒng)的需求而提出的,需求包括嵌入式實(shí)時(shí)系統(tǒng)如航空電子工學(xué),汽車電子,或機(jī)器人技術(shù)系 統(tǒng)。這個(gè)語(yǔ)言描述性能關(guān)鍵的重要方面,如時(shí)間要求、失效和錯(cuò)誤行為、時(shí)空分區(qū)、防危和驗(yàn) 證等屬性。這樣就允許系統(tǒng)設(shè)計(jì)者對(duì)組成系統(tǒng)的組件以及系統(tǒng)的可調(diào)度性、吞吐量、防危性 等進(jìn)行分析。從這些分析中,設(shè)計(jì)者能夠評(píng)估體系架構(gòu)的合理性及變化。基于AADL模型潛 在的巨大的應(yīng)用價(jià)值,所以研究AADL模型的自動(dòng)代碼生成技術(shù),緩解軟件危機(jī)很有價(jià)值。 國(guó)外也只有少數(shù)的工具支持AADL的代碼生成,如ocarina支持生成li皿x格式的C代碼和 Ada代碼,但與嵌入式系統(tǒng)結(jié)合的不緊密,由于基于命令行方式,界面也不友好。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種方便可行的AADL模型的自動(dòng) 代碼生成方法。 為實(shí)現(xiàn)上述目的,本發(fā)明AADL模型的自動(dòng)代碼生成方法,包括以下步驟
步驟1 :解析AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,生成交互類對(duì)象
以AADL模型的實(shí)現(xiàn)文件和實(shí)例文件作為輸入,從中提取每種組件的信息,存儲(chǔ)在 AADL交互類對(duì)象中; 步驟2,調(diào)用Drools規(guī)則引擎,生成C代碼 當(dāng)生成交互類對(duì)象后,根據(jù)交互類對(duì)象不同的模型形態(tài),使用Drools規(guī)則引擎觸 發(fā)對(duì)應(yīng)的1/0操作;1/0操作根據(jù)AADL標(biāo)準(zhǔn)SAE AS5506/1的附件中的規(guī)定以及標(biāo)準(zhǔn)C代 碼規(guī)范的要求,生成滿足其規(guī)范的層次結(jié)構(gòu)和對(duì)應(yīng)格式的C代碼。
本發(fā)明的發(fā)明目的是這樣實(shí)現(xiàn)的 本發(fā)明AADL模型的自動(dòng)代碼生成方法,通過(guò)讀入AADL模型的實(shí)現(xiàn)文件和實(shí)例文 件,經(jīng)過(guò)上述兩個(gè)步驟的處理,能生成滿足AADL標(biāo)準(zhǔn)SAE AS5506/1的附件中的規(guī)定以及標(biāo) 準(zhǔn)C代碼規(guī)范的代碼,實(shí)現(xiàn)將體系結(jié)構(gòu)分析設(shè)計(jì)的描述性框架語(yǔ)言與可執(zhí)行平臺(tái)語(yǔ)言之間 的轉(zhuǎn)換。
圖1是本發(fā)明AADL模型的自動(dòng)代碼生成方法一種具體實(shí)施方式
的結(jié)構(gòu)圖;
圖2是圖1所示結(jié)構(gòu)下的內(nèi)部流程圖; 圖3是圖1所示模型解析步驟中AADL schema文件生成框架類的示意圖;
圖4是圖1所示系統(tǒng)組件交互類對(duì)象解析示意 圖5是本發(fā)明調(diào)用Drools規(guī)則中的線程規(guī)則一種具體實(shí)施方式
下的邏輯圖;
圖6是AADL模型的線程組件對(duì)應(yīng)的C代碼生成具體實(shí)例過(guò)程圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式
進(jìn)行描述,以便更好地理解本發(fā)明。需要 特別提醒注意的是,在以下的描述中,當(dāng)已知功能和設(shè)計(jì)的詳細(xì)描述也許會(huì)淡化本發(fā)明的 主要內(nèi)容時(shí),這些描述在這里將被忽略。 圖1是本發(fā)明AADL模型的自動(dòng)代碼生成方法一種具體實(shí)施方式
的結(jié)構(gòu)圖。在本 實(shí)施例中,如圖1所示,AADL模型的自動(dòng)代碼生成方法融入并體現(xiàn)在解析AADL模型的實(shí)現(xiàn) 文件和實(shí)例文件、生成交互類對(duì)象步驟和調(diào)用Drools規(guī)則引擎、生成C代碼步驟。其中,在 步驟1中,輸入是AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,經(jīng)過(guò)AADL Schema文件解析生成交互 類對(duì)象,存儲(chǔ)到AADL模型信息的交互類對(duì)象列表中;步驟2輸入是步驟1的輸出,通過(guò)對(duì)應(yīng) 的規(guī)則文件*. drl,調(diào)用Drools規(guī)則引擎,觸發(fā)相應(yīng)的1/0操作,生成文件、打開(kāi)文件、修改 文件以及關(guān)閉文件,最終輸出C代碼。
圖2是圖1所示結(jié)構(gòu)下的內(nèi)部流程圖。 下面結(jié)合圖2對(duì)本發(fā)明的兩個(gè)步驟的具體實(shí)施方式
進(jìn)行更為詳細(xì)的描述。 步驟1 :解析AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,生成交互類對(duì)象 0SATE是本實(shí)施例的開(kāi)發(fā)平臺(tái),它的優(yōu)點(diǎn)是界面友好,編輯和解析AADL模型效率
高等。它在本實(shí)施例的主要作用就是解析AADL模型,生成其實(shí)現(xiàn)文件和實(shí)例文件。 如圖2的解析步驟所示,輸入AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,分別解析AADL模
型的系統(tǒng)組件、進(jìn)程組件、…、執(zhí)行平臺(tái)組件和數(shù)據(jù)組件,然后把組件的信息存儲(chǔ)在各組件
對(duì)應(yīng)的交互類對(duì)象里,即系統(tǒng)組件對(duì)象,進(jìn)程組件對(duì)象、…、執(zhí)行平臺(tái)組件對(duì)象和數(shù)據(jù)組件對(duì)象。 下面說(shuō)明該步驟用到的一些基本概念 所謂AADL模型的實(shí)現(xiàn)文件,是指AADL模型使用XML格式存儲(chǔ)AADL模型的各種 信息,AADL模型的實(shí)現(xiàn)文件就是AADL模型的對(duì)應(yīng)的XML文件。 所謂AADL模型的實(shí)例文件,是AADL模型的一個(gè)具體系統(tǒng)的表示,不像AADL模型 代表抽象的,一般化的系統(tǒng)。它也是用XML文件存儲(chǔ)的。 所謂交互類和交互類對(duì)象,是指由于步驟2中的Drools規(guī)則引擎工具是以實(shí)例 對(duì)象作為輸入,因此需要設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)用于保存解析出來(lái)的模型信息,包括組件種類、組件 類型名、組件實(shí)例名、子組件列表、特征列表以及屬性列表等相應(yīng)的數(shù)據(jù)結(jié)構(gòu),我們統(tǒng)稱為 交互類,其實(shí)例對(duì)象稱為交互類對(duì)象。在本實(shí)施例中涉及的交互類對(duì)象有系統(tǒng)組件對(duì)象, 進(jìn)程組件對(duì)象、…、執(zhí)行平臺(tái)組件對(duì)象和數(shù)據(jù)組件對(duì)象。 交互類對(duì)象列表是系統(tǒng)中各個(gè)交互類形成的一個(gè)遞歸調(diào)用的數(shù)據(jù)結(jié)構(gòu),內(nèi)建層次 關(guān)系,以綜合一個(gè)具體系統(tǒng)內(nèi)部的表示。
在本實(shí)施例中,使用的交互類如下 組件類型類Component是描述組件的具體類型,如是系統(tǒng)組件、進(jìn)程組件,還是執(zhí) 行平臺(tái)組件等。 組件實(shí)例類Componentlnstance是模型解析中使用的最廣泛的數(shù)據(jù)結(jié)構(gòu),通過(guò)它
5可以保存每一種組件的信息,它實(shí)例化的對(duì)象有系統(tǒng)組件對(duì)象,進(jìn)程組件對(duì)象,線程組件對(duì) 象等。 組件特征類Feature是描述組件的特征。
組件關(guān)聯(lián)類Connection是描述組件之間的關(guān)聯(lián)。
組件屬性類Property是描述組件的屬性。
數(shù)據(jù)組件類DataType是描述數(shù)據(jù)組件。 圖3是圖1模型解析步驟中AADL schema文件生成框架類的示意圖 AADL模型的實(shí)現(xiàn)文件和實(shí)例文件是XML文件。目前XML文件的解析器有Dom、Sax、
Ja鄧、XMLBeans等,前三種方法只能靜態(tài)調(diào)用解析器提供的API對(duì)XML文件進(jìn)行解析,而
XMLBeans能夠以類的方式,提供訪問(wèn)XML文件一系列相關(guān)的Java Classes,從而XML文件
節(jié)點(diǎn)信息能以對(duì)象的方式存放于內(nèi)存,方便規(guī)則應(yīng)用步驟使用?;谝陨显?,在本實(shí)施例
中,選擇XMLBeans作為解析AADL的XML文件的解析器。 每個(gè)XML文件都對(duì)應(yīng)特定的XML Schema文件,XML Schema文件是一個(gè)XML的約束 文件,是為了對(duì)數(shù)據(jù)進(jìn)行定義和約束。它定義了 XML文件的結(jié)構(gòu)和元素以及對(duì)結(jié)構(gòu)和元素 的約束。實(shí)現(xiàn)文件和實(shí)例文件是AADL模型的XML文件,AADL模型轉(zhuǎn)換生成的實(shí)現(xiàn)文件和實(shí) 例文件具有相同的框架格式,該格式文件AADL XML Schema (04/10/2006)來(lái)自AADL官方網(wǎng) 站,共有七個(gè)AADLXML Schema文件,分另U是Component, xsd、 Instance, xsd、 Feature, xsd、 Connection. xsd、Property. xsd、Core. xsd、Flow. xsd。 XMLBeans需要通過(guò)AADLKML Schema 文件知道對(duì)應(yīng)XML文件的結(jié)構(gòu)以及約束,比如數(shù)據(jù)類型等。利用這些AADL XML Schema文 件,XMLBeans將會(huì)產(chǎn)生一系列相關(guān)的Java Classes,分別存儲(chǔ)在aadl. compo體t、 aadl. instance...等包(package)里來(lái)實(shí)現(xiàn)對(duì)XML的操作,最后將所產(chǎn)生的Java Classes打包 成Schema, jar供AADL組件接口類解析實(shí)現(xiàn)文件和實(shí)例文件使用。Schema, jar文件中封裝 的方法是由AADL框架格式文件(xsd)通過(guò)XMLBeans自動(dòng)生成的。
圖4是圖1所示系統(tǒng)組件交互類對(duì)象解析示意圖 使用上面所產(chǎn)生的Schema, jar文件,結(jié)合工具XMLBeans和Dom4J的解析XML 文件的方法,來(lái)解析AADL模型所對(duì)應(yīng)的模型實(shí)現(xiàn)文件和系統(tǒng)實(shí)例文件,提取交互類對(duì) 象信息。首先利用Schema, jar文件中的Factory方法導(dǎo)入實(shí)現(xiàn)文件和實(shí)例文件,利用 getSystemlnstance ()獲得系統(tǒng)結(jié)點(diǎn),從而將解析得到的系統(tǒng)類型名、實(shí)例名存放到系統(tǒng)組 件對(duì)象的相應(yīng)的成員變量中;再利用getSubComponentlnstance()方法獲得系統(tǒng)下所有的 子組件,根據(jù)子組件的類型,對(duì)應(yīng)生成系統(tǒng)組件對(duì)象下的成員,分別有進(jìn)程組件對(duì)象,執(zhí)行 平臺(tái)組件對(duì)象和數(shù)據(jù)組件對(duì)象;然后利用getFeaturelnstance()方獲得系統(tǒng)的特征,對(duì)應(yīng) 生成系統(tǒng)組件對(duì)象下的特征成員,最后利用getPropertiesInstance(),獲得系統(tǒng)的屬性, 對(duì)應(yīng)生成系統(tǒng)組件對(duì)象下的屬性成員。 獲得系統(tǒng)組件對(duì)象后,通過(guò)查詢系統(tǒng)組件對(duì)象的子組件種類并結(jié)合實(shí)現(xiàn)文件從而 生成進(jìn)程組件對(duì)象;接著獲得進(jìn)程組件對(duì)象后,通過(guò)查詢進(jìn)程組件的對(duì)象的子組件種類并 結(jié)合實(shí)現(xiàn)文件從而生成線程組件對(duì)象;以此類推,然后再獲得線程組件對(duì)象,通過(guò)查詢系 統(tǒng)、進(jìn)程、線程的對(duì)象的子組件種類并結(jié)合實(shí)現(xiàn)文件從而生成數(shù)據(jù)組件對(duì)象,最后獲得執(zhí)行 平臺(tái)組件對(duì)象。 執(zhí)行該步驟后,將生成的交互類對(duì)象,供步驟2使用。
步驟2 :調(diào)用Drools規(guī)則引擎,生成C代碼。 在本實(shí)施例中,如圖2的調(diào)用Drools規(guī)則步驟所示輸入的是步驟1生成的交互
類對(duì)象,通過(guò)由Drools規(guī)則引擎匹配系統(tǒng)規(guī)則,進(jìn)程規(guī)則,…,執(zhí)行平臺(tái)組件規(guī)則和數(shù)據(jù)規(guī)
則,生成與平臺(tái)相關(guān)的C代碼。 在此,說(shuō)明該步驟用到的一些基本概念。 所謂Drools規(guī)則引擎,是一種嵌入在Java程序中的組件,它的任務(wù)是把當(dāng)前提交 給引擎的Java數(shù)據(jù)對(duì)象與加載在引擎中的業(yè)務(wù)規(guī)則進(jìn)行測(cè)試和比對(duì),激活那些符合當(dāng)前 數(shù)據(jù)狀態(tài)下的業(yè)務(wù)規(guī)則,根據(jù)業(yè)務(wù)規(guī)則中聲明的執(zhí)行邏輯,觸發(fā)應(yīng)用程序中對(duì)應(yīng)的操作。
如果通過(guò)交互類對(duì)象實(shí)現(xiàn)條件分支判斷(如if-else)會(huì)出現(xiàn)一些不足之處,如嵌 套結(jié)構(gòu)較深、邏輯結(jié)構(gòu)不清晰、編寫代碼效率低、結(jié)構(gòu)凌亂以致不利于擴(kuò)展和維護(hù)等。
為了解決這一問(wèn)題,本發(fā)明使用規(guī)則引擎技術(shù),其優(yōu)勢(shì)在于規(guī)則引擎中業(yè)務(wù)邏輯 比較清晰、規(guī)則與規(guī)則之間相互獨(dú)立、后期直接添加轉(zhuǎn)換規(guī)則較易、規(guī)則的修改不會(huì)對(duì)其他 的規(guī)則造成影響。 在本實(shí)施例中,該步驟的具體過(guò)程是根據(jù)輸入的交互類對(duì)象,它們會(huì)分別觸發(fā)到 各類的Drools規(guī)則,而規(guī)則引擎在被觸發(fā)之后,就像數(shù)據(jù)結(jié)構(gòu)中,已知其中一個(gè)根節(jié)點(diǎn),而 解析整棵樹(shù)一樣,會(huì)遞歸的調(diào)用在本規(guī)則之下的子規(guī)則,同時(shí),在調(diào)用規(guī)則中,結(jié)合交互類 的各種數(shù)據(jù),觸發(fā)各組件的代碼生成操作。把AADL模型中組件的屬性,通過(guò)文件讀寫的1/ 0操作等等,生成目標(biāo)環(huán)境中對(duì)應(yīng)的正確的C代碼。在這種邏輯下,就可以使代碼生成工作 井然有序的進(jìn)行。規(guī)則主要包括系統(tǒng)規(guī)則,進(jìn)程規(guī)則,線程規(guī)則和子程序規(guī)則等,下面以線 程規(guī)則為例來(lái)詳細(xì)描述 如圖5所示,線程規(guī)則是由系統(tǒng)規(guī)則和進(jìn)程規(guī)則觸發(fā)的。系統(tǒng)總規(guī)則,是應(yīng)用規(guī)則 的起點(diǎn)。從系統(tǒng)總規(guī)則開(kāi)始進(jìn)行遞歸式的規(guī)則匹配。系統(tǒng)總規(guī)則的主要作用是匹配AADL模 型中的系統(tǒng)組件,并能觸發(fā)進(jìn)程規(guī)則。進(jìn)程規(guī)則的主要功能是匹配AADL模型的進(jìn)程組件, 并能觸發(fā)線程規(guī)則。進(jìn)程中的線程組件,對(duì)應(yīng)線程規(guī)則,每個(gè)線程也將被視為一個(gè)在進(jìn)程中 創(chuàng)建的任務(wù),每個(gè)線程對(duì)應(yīng)生成threadname. c和threadname. h、theadname_port. h三個(gè)文 件。對(duì)于線程的子數(shù)據(jù)組件,則應(yīng)用線程子數(shù)據(jù)規(guī)則,在線程對(duì)應(yīng)的C代碼(如threadname. c)中定義數(shù)據(jù)變量。對(duì)于線程的特征,應(yīng)用線程特征規(guī)則,如果線程特征是事件數(shù)據(jù)端口, 則將在threadname—port. h文件中定義一個(gè)事件數(shù)據(jù)端口的結(jié)構(gòu)體,結(jié)構(gòu)體的第一部分是 指向某種數(shù)據(jù)類型的指針,第二部分是一個(gè)事件類型的變量。對(duì)于線程的關(guān)聯(lián),應(yīng)用線程關(guān) 聯(lián)規(guī)則,主要是對(duì)線程和子程序之間的參數(shù)進(jìn)行定義。對(duì)于線程子程序,應(yīng)用線程子程序規(guī) 則,其作用是將"#includesubprogramname. h〃這句代碼力口入至lj threadname. h文件中。對(duì) 于線程的不同調(diào)度屬性,還將應(yīng)用線程周期規(guī)則,對(duì)于周期性線程和非周期性線程,將產(chǎn)生 不同的代碼。應(yīng)用線程規(guī)則結(jié)束后,就會(huì)產(chǎn)生threadname. c禾P threadname. h、theadname_ port. h等C代碼文件。 針對(duì)整體方法的應(yīng)用,我們通過(guò)一個(gè)線程組件的實(shí)例,整個(gè)代碼生成過(guò)程如圖6 所示,從AADL模型到C代碼生成與文件生成及文件內(nèi)容一一對(duì)應(yīng)。 1. AADL模型的創(chuàng)建,這里以其中對(duì)線程的建模為例,圖中顯示了對(duì)Print—Sample 線程組件(thread)的建模。此線程調(diào)用了 callsub4這個(gè)子程序,并且聲明了一個(gè)參數(shù)級(jí) (parameter)的線程關(guān)聯(lián);
7
2.利用OSATE工具,把AADL模型解析為對(duì)應(yīng)的實(shí)現(xiàn)文件和實(shí)例文件(后綴名為 *. aaxl),圖6顯示了實(shí)現(xiàn)文件中的線程組件(實(shí)例文件圖略); 3.對(duì)上述的實(shí)現(xiàn)文件和實(shí)例文件進(jìn)行解析,解析過(guò)程利用到了 Schema文件的方 法,如getSubcomponent2(),結(jié)合交互類的操作,最終返回一系列的交互類對(duì)象,圖6顯示 了解析線程組件的代碼,并最后返回一個(gè)thread交互類對(duì)象; 4.交互類對(duì)象全部產(chǎn)生之后,傳入到規(guī)則引擎之中,開(kāi)始進(jìn)行Drools規(guī)則的觸
發(fā),圖6以線程Drools規(guī)則文件中的"thread creat subprogram file"這部分規(guī)則進(jìn)行
說(shuō)明,顯示了 Drools規(guī)則具體的代碼,并根據(jù)線程調(diào)用的子程序進(jìn)行文件操作; 5.當(dāng)所有的交互類對(duì)象都已經(jīng)遞歸地觸發(fā)完畢Drools規(guī)則后,就生成了最終的
完整代碼。如圖6所示,Print—Sample線程生成了對(duì)應(yīng)的C代碼,其中包括線程關(guān)聯(lián),線程
調(diào)用子程序等相關(guān)建模信息。 盡管上面對(duì)本發(fā)明說(shuō)明性的具體實(shí)施方式
進(jìn)行了描述,以便于本技術(shù)領(lǐng)的技術(shù)人 員理解本發(fā)明,但應(yīng)該清楚,本發(fā)明不限于具體實(shí)施方式
的范圍,對(duì)本技術(shù)領(lǐng)域的普通技術(shù)
人員來(lái)講,只要各種變化在所附的權(quán)利要求限定和確定的本發(fā)明的精神和范圍內(nèi),這些變 化是顯而易見(jiàn)的,一切利用本發(fā)明構(gòu)思的發(fā)明創(chuàng)造均在保護(hù)之列。
8
權(quán)利要求
一種AADL模型的自動(dòng)代碼生成方法,包括以下步驟步驟1解析AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,生成交互類對(duì)象以AADL模型的實(shí)現(xiàn)文件和實(shí)例文件作為輸入,從中提取每種組件的信息,存儲(chǔ)在AADL交互類對(duì)象中;步驟2,調(diào)用Drools規(guī)則引擎,生成C代碼當(dāng)生成交互類對(duì)象后,根據(jù)交互類對(duì)象不同的模型形態(tài),使用Drools規(guī)則引擎觸發(fā)對(duì)應(yīng)的I/O操作;I/O操作根據(jù)AADL標(biāo)準(zhǔn)SAE AS5506/1的附件中的規(guī)定以及標(biāo)準(zhǔn)C代碼規(guī)范的要求,生成滿足其規(guī)范的層次結(jié)構(gòu)和對(duì)應(yīng)格式的C代碼。
2. 根據(jù)權(quán)利要求1所述的AADL模型的自動(dòng)代碼生成方法,其特征在于,所述的以AADL 模型的實(shí)現(xiàn)文件和實(shí)例文件作為輸入,從中提取每種組件的信息,存儲(chǔ)在AADL交互類對(duì)象 中為選擇XMLBeans作為解析AADL的XML Schema文件的解析器,產(chǎn)生一系列相關(guān)的Java Classes,分別存儲(chǔ)在相應(yīng)的包里來(lái)實(shí)現(xiàn)對(duì)XML的操作,最后將所產(chǎn)生的Java Classes打包 成Schema, jar供AADL組件接口類解析實(shí)現(xiàn)文件和實(shí)例文件使用;Schema. jar文件中封裝 的方法是由AADL框架格式文件通過(guò)XMLBeans自動(dòng)生成的;使用Schema, jar文件,結(jié)合工具XMLBeans和Dom4J的解析XML文件的方法,來(lái)解析 AADL模型所對(duì)應(yīng)的模型實(shí)現(xiàn)文件和系統(tǒng)實(shí)例文件,從中提取每種組件的信息,存儲(chǔ)在AADL 交互類對(duì)象中。
全文摘要
本發(fā)明公開(kāi)了一種AADL模型的自動(dòng)代碼生成方法,包括解析AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,從中提取每種組件的信息,存儲(chǔ)在AADL交互類對(duì)象中;當(dāng)生成交互類對(duì)象后,根據(jù)交互類對(duì)象不同的模型形態(tài),使用Drools規(guī)則引擎觸發(fā)對(duì)應(yīng)的I/O操作;I/O操作根據(jù)AADL標(biāo)準(zhǔn)SAE AS5506/1的附件中的規(guī)定以及標(biāo)準(zhǔn)C代碼規(guī)范的要求,生成滿足其規(guī)范的層次結(jié)構(gòu)和對(duì)應(yīng)格式的C代碼。本發(fā)明AADL模型的自動(dòng)代碼生成方法,通過(guò)讀入AADL模型的實(shí)現(xiàn)文件和實(shí)例文件,經(jīng)過(guò)上述兩個(gè)步驟的處理,能生成滿足AADL標(biāo)準(zhǔn)SAE AS5506/1的附件中的規(guī)定以及標(biāo)準(zhǔn)C代碼規(guī)范的代碼,實(shí)現(xiàn)將體系結(jié)構(gòu)分析設(shè)計(jì)的描述性框架語(yǔ)言與可執(zhí)行平臺(tái)語(yǔ)言之間的轉(zhuǎn)換。
文檔編號(hào)G06F9/44GK101739258SQ201010028079
公開(kāi)日2010年6月16日 申請(qǐng)日期2010年1月13日 優(yōu)先權(quán)日2010年1月13日
發(fā)明者于淼, 唐沁洋, 桂盛霖, 羅蕾, 龔榮 申請(qǐng)人:電子科技大學(xué)