一種aadl到c語(yǔ)言的代碼自動(dòng)生成方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件開發(fā)工具,特別涉及一種AADL到C語(yǔ)言的代碼自動(dòng)生成方法。
【背景技術(shù)】
[0002] 基于模型的軟件開發(fā)是繼面向?qū)ο蠹夹g(shù)后,又一次軟件設(shè)計(jì)理念和方法的跨越。 基于模型的軟件開發(fā)思想是:將"模型"作為軟件設(shè)計(jì)和開發(fā)的核心要素,通過(guò)模型清晰地 刻畫軟件系統(tǒng)的功能、性能和安全性等關(guān)鍵特征,準(zhǔn)確描述系統(tǒng)的解決方案;通過(guò)形式化方 法對(duì)系統(tǒng)模型加以驗(yàn)證,以確保軟件設(shè)計(jì)的正確性;通過(guò)模型驅(qū)動(dòng)方法生成代碼,以保證軟 件設(shè)計(jì)與實(shí)現(xiàn)的一致性。
[0003] 2004年,美國(guó)汽車工程師協(xié)會(huì)SAE (society of automotive engineers)基于15 年的研宄和工業(yè)實(shí)踐,提出嵌入式實(shí)時(shí)系統(tǒng)體系結(jié)構(gòu)分析與設(shè)計(jì)語(yǔ)言AADL(architecture analysis&design language),提供了一種標(biāo)準(zhǔn)而又足夠精確的方式設(shè)計(jì)與分析嵌入式實(shí) 時(shí)系統(tǒng)的軟、硬件體系結(jié)構(gòu)及功能與非功能性質(zhì)。但是基于AADL進(jìn)行嵌入式系統(tǒng)代碼自動(dòng) 生成非常具有挑戰(zhàn)性,因?yàn)樯傻拇a要運(yùn)行在不同的目標(biāo)平臺(tái),滿足各平臺(tái)有不同的特 征,如軟硬件體系結(jié)構(gòu)、編程接口等。模型較為抽象地表達(dá)了在特定平臺(tái)上各要素的組織方 式和特征,易于理解和驗(yàn)證,但與實(shí)現(xiàn)之間有語(yǔ)義鴻溝,給代碼生成增加了負(fù)擔(dān),而且建模 語(yǔ)言的抽象語(yǔ)義不一定能夠與目標(biāo)平臺(tái)匹配。
[0004] AADL模型到代碼的自動(dòng)生成,能夠有助于提高嵌入式實(shí)時(shí)系統(tǒng)的軟件開發(fā)的自動(dòng) 化水平,縮短軟件開發(fā)周期,減少人工寫代碼的工作量和編碼過(guò)程中出錯(cuò)的可能性。目前歐 美模型驅(qū)動(dòng)軟件開發(fā)環(huán)境的代碼自動(dòng)生成主要支持Ada語(yǔ)言、Java語(yǔ)言的代碼生成,面向 符合ANRINC 653規(guī)范的P0K操作系統(tǒng)、汽車行業(yè)標(biāo)準(zhǔn)的0SEK操作系統(tǒng),各領(lǐng)域在使用AADL 進(jìn)行代碼生成時(shí),需根據(jù)自身平臺(tái)的運(yùn)行時(shí)環(huán)境進(jìn)行代碼生成工具開發(fā)。我國(guó)航天領(lǐng)域廣 泛采用SZ0S等嵌入式實(shí)時(shí)操作系統(tǒng),但是尚未出現(xiàn)AADL到SZ0S等特定運(yùn)行時(shí)環(huán)境的C語(yǔ) 言的代碼自動(dòng)生成方法。
【發(fā)明內(nèi)容】
[0005] 發(fā)明目的:本發(fā)明針對(duì)上述現(xiàn)有技術(shù)存在的問(wèn)題做出改進(jìn),即本發(fā)明公開了一種 AADL到C語(yǔ)言的代碼自動(dòng)生成方法,使用該方法可以面向特定運(yùn)行時(shí)環(huán)境實(shí)現(xiàn)AADL到C語(yǔ) 言的代碼自動(dòng)生成。
[0006] 技術(shù)方案:一種AADL到C語(yǔ)言的代碼自動(dòng)生成方法,包括以下步驟:
[0007] 1)根據(jù)AADL元模型的語(yǔ)義、目標(biāo)運(yùn)行環(huán)境的語(yǔ)義和C語(yǔ)言語(yǔ)法語(yǔ)義定義AADL元 模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則;
[0008] 2)根據(jù)AADL模型能夠獲取的所使用的元模型及其語(yǔ)義、步驟1)得到的AADL元模 型到C語(yǔ)言的轉(zhuǎn)換規(guī)則制定代碼自動(dòng)生成模板;
[0009] 3)根據(jù)步驟2)得到的代碼自動(dòng)生成模板編寫模板轉(zhuǎn)換引擎;
[0010] 4)輸入AADL模型后,自動(dòng)對(duì)輸入的AADL模型解析,提取AADL元模型信息,按照步 驟2)中的代碼自動(dòng)生成模板,通過(guò)步驟3)得到的模板轉(zhuǎn)換引擎將AADL元模型信息生成C語(yǔ)言代碼。
[0011] 進(jìn)一步地,步驟1)中AADL元模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則包括:
[0012] 11)4401數(shù)據(jù)類型8&%_17口6生成(:語(yǔ)言程序中的*.11頭文件;
[0013] 12)系統(tǒng)構(gòu)件不對(duì)應(yīng)具體的可執(zhí)行代碼,僅將系統(tǒng)構(gòu)件的功能接口轉(zhuǎn)換為函數(shù)的 輸入?yún)?shù)和輸出參數(shù),且將所定義的數(shù)據(jù)構(gòu)件轉(zhuǎn)換為C語(yǔ)言程序中的變量定義,系統(tǒng)構(gòu)件 的名稱作命名空間使用;
[0014] 13)線程構(gòu)件、線程組構(gòu)件以及子程序構(gòu)件對(duì)應(yīng)具體的可執(zhí)行代碼,線程構(gòu)件、線 程組構(gòu)件以及子程序構(gòu)件均轉(zhuǎn)換為C語(yǔ)言程序中的函數(shù)定義;線程構(gòu)件的功能接口轉(zhuǎn)換為 函數(shù)的輸入?yún)?shù)和輸出參數(shù),線程組構(gòu)件的功能接口轉(zhuǎn)換為函數(shù)的輸入?yún)?shù)和輸出參數(shù), 子程序構(gòu)件的功能接口轉(zhuǎn)換為函數(shù)的輸入?yún)?shù)和輸出參數(shù),子程序構(gòu)件定義中的數(shù)據(jù)構(gòu)件 轉(zhuǎn)換為局部變量定義;
[0015] 14)處理器構(gòu)件中定義調(diào)度算法,調(diào)度算法轉(zhuǎn)換為C語(yǔ)言程序中的函數(shù)定義;
[0016] 15)進(jìn)程構(gòu)件轉(zhuǎn)換為C語(yǔ)言程序中的主函數(shù),進(jìn)程構(gòu)件所包含的子構(gòu)件之間的連 接關(guān)系轉(zhuǎn)換為源端函數(shù)和目標(biāo)端函數(shù),并將進(jìn)程構(gòu)件所包含的子構(gòu)件之間的連接名稱轉(zhuǎn)換 為變量定義,用于源端函數(shù)和目標(biāo)端函數(shù)之間的數(shù)據(jù)傳遞;
[0017] 16)對(duì)于系統(tǒng)調(diào)用,需在AADL模型中進(jìn)行定義。
[0018] 有益效果:本發(fā)明公開的一種AADL到C語(yǔ)言的代碼自動(dòng)生成方法具有以下有益效 果:
[0019] 1、詳細(xì)描述了代碼自動(dòng)生成的實(shí)施步驟,為特定運(yùn)行時(shí)環(huán)境實(shí)現(xiàn)AADL到C語(yǔ)言代 碼自動(dòng)生成提供解決方案;
[0020] 2、定義了AADL模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則,有效解決AADL與C語(yǔ)言語(yǔ)義映射;
[0021] 3、使用Xtend語(yǔ)言定義模板,并通過(guò)封裝等方式提供靈活的模板操作;
[0022] 4、通過(guò)模板引擎提高代碼轉(zhuǎn)換效率。
【附圖說(shuō)明】
[0023] 圖1為本發(fā)明公開的一種AADL到C語(yǔ)言的代碼自動(dòng)生成方法的流程圖。
【具體實(shí)施方式】:
[0024] 下面對(duì)本發(fā)明的【具體實(shí)施方式】詳細(xì)說(shuō)明。
[0025] 如圖1所示,一種AADL到C語(yǔ)言的代碼自動(dòng)生成方法,包括以下步驟:
[0026] 1)根據(jù)AADL元模型的語(yǔ)義、目標(biāo)運(yùn)行環(huán)境的語(yǔ)義和C語(yǔ)言語(yǔ)法語(yǔ)義定義AADL元 模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則;
[0027] 2)根據(jù)AADL模型能夠獲取的所使用的元模型及其語(yǔ)義、步驟1)得到的AADL元模 型到C語(yǔ)言的轉(zhuǎn)換規(guī)則制定代碼自動(dòng)生成模板;
[0028] 3)根據(jù)步驟2)得到的代碼自動(dòng)生成模板編寫模板轉(zhuǎn)換引擎;
[0029] 4)輸入AADL模型后,自動(dòng)對(duì)輸入的AADL模型解析,提取AADL元模型信息,按照步 驟2)中的代碼自動(dòng)生成模板,通過(guò)步驟3)得到的模板轉(zhuǎn)換引擎將AADL元模型信息生成C 語(yǔ)言代碼。
[0030] 下面對(duì)AADL元模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則、AADL元模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則制定 代碼自動(dòng)生成模板、模板轉(zhuǎn)換引擎、模板解析分別進(jìn)行說(shuō)明:
[0031] 關(guān)于步驟1)中AADL元模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則的說(shuō)明:
[0032] 生成運(yùn)行于特定運(yùn)行環(huán)境的C語(yǔ)言應(yīng)用程序代碼時(shí),軟件體系結(jié)構(gòu)模型生成應(yīng)用 軟件代碼框架,運(yùn)行時(shí)模型則主要考慮調(diào)度算法,并生成相應(yīng)的調(diào)度程序。
[0033] AADL語(yǔ)言通過(guò)自頂向下的方式對(duì)系統(tǒng)進(jìn)行建模,一般可以分為四個(gè)層次:最高層 為系統(tǒng)構(gòu)件,對(duì)應(yīng)一個(gè)系統(tǒng)或子系統(tǒng);一個(gè)系統(tǒng)構(gòu)件包括多個(gè)進(jìn)程構(gòu)件及連接(用于表達(dá) 任務(wù)執(zhí)行的虛擬地址空間)、處理器構(gòu)件(用于表達(dá)調(diào)度)以及其它硬件構(gòu)件(如外設(shè)構(gòu) 件、存儲(chǔ)構(gòu)件、總線構(gòu)件等);一個(gè)進(jìn)程構(gòu)件代表任務(wù)的虛擬地址空間,可以執(zhí)行多個(gè)線程 構(gòu)件或線程組構(gòu)件及連接(用于表達(dá)任務(wù)及任務(wù)之間的通信),一個(gè)線程可以訪問(wèn)子程序 構(gòu)件,多個(gè)線程可以共享訪問(wèn)一個(gè)數(shù)據(jù)構(gòu)件;線程構(gòu)件、子程序構(gòu)件的內(nèi)部行為可以用行為 附件來(lái)表達(dá),用戶也可以直接給出源代碼。
[0034] AADL元模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則如下:
[0035] 步驟1)中AADL元模型到C語(yǔ)言的轉(zhuǎn)換規(guī)則包括:
[0036] 11)AADL數(shù)據(jù)類型Base_Type生成C語(yǔ)言程序中的h頭文件;
[0037] 12)系統(tǒng)構(gòu)件不對(duì)應(yīng)具體的可執(zhí)行代碼,僅將系統(tǒng)構(gòu)件的功能接口轉(zhuǎn)換為函數(shù)的 輸入?yún)?shù)和輸出參數(shù),且將所定義的數(shù)據(jù)構(gòu)件轉(zhuǎn)換為C語(yǔ)言程序中的變量定義,系統(tǒng)構(gòu)件 的名稱作命名空間使用;
[0038] 13)線程構(gòu)件、線程組構(gòu)件以及子程序構(gòu)件對(duì)應(yīng)具體的可執(zhí)行代碼,線程構(gòu)件、線 程組構(gòu)