專利名稱:層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng)轉(zhuǎn)換方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式領(lǐng)域基于模型的軟件開(kāi)發(fā)方法中的自動(dòng)代碼生成技術(shù), 尤其是涉及一種由層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng)轉(zhuǎn)換方法。
技術(shù)背景隨著嵌入式技術(shù)的不斷發(fā)展,傳統(tǒng)的基于手工編寫代碼的開(kāi)發(fā)方法存在容 易出錯(cuò)、開(kāi)發(fā)效率低等許多不足,已經(jīng)無(wú)法滿足嵌入式軟件開(kāi)發(fā)的需要?;?模型的軟件開(kāi)發(fā)方法是嵌入式領(lǐng)域一種新的軟件開(kāi)發(fā)方法。該方法通過(guò)抽象出 軟件系統(tǒng)的關(guān)鍵問(wèn)題并用模型加以描述,表達(dá)出系統(tǒng)的解決方案,然后通過(guò)采 用形式化的工具對(duì)系統(tǒng)模型進(jìn)行驗(yàn)證,以保證系統(tǒng)設(shè)計(jì)的正確性。在保證系統(tǒng) 正確性的基礎(chǔ)上,就可以根據(jù)模型自動(dòng)生成代碼、自動(dòng)生成文檔等,甚至自動(dòng) 生成測(cè)試案例。基于模型的設(shè)計(jì)思想從根本上解決了軟件設(shè)計(jì)的正確性保證問(wèn) 題,從而大大提高了軟件開(kāi)發(fā)效率和質(zhì)量。在基于模型的軟件開(kāi)發(fā)方法中,對(duì)系統(tǒng)的描述方法非常重要。C語(yǔ)言本身結(jié) 構(gòu)單一,無(wú)法很好描述一個(gè)系統(tǒng),所以一般會(huì)用更高級(jí)的模型來(lái)描述軟件系統(tǒng)。 SmartC語(yǔ)言是浙江大學(xué)嵌入式系統(tǒng)工程實(shí)驗(yàn)室自主開(kāi)發(fā)的面向汽車電子領(lǐng)域的 系統(tǒng)表述語(yǔ)言,用于解決嵌入式系統(tǒng)結(jié)構(gòu)的描述問(wèn)題。SmartC語(yǔ)言的核心是其 層次化結(jié)構(gòu)模型,系統(tǒng)結(jié)構(gòu)從上到下分為四個(gè)層次,分別是系統(tǒng)層(Application)、 模塊層(Module)、任務(wù)層(Task)、以及組件層(Component)。在SmartC層次 化結(jié)構(gòu)模型中,各個(gè)層次功能明確,系統(tǒng)層關(guān)注系統(tǒng)結(jié)構(gòu),不涉及模塊的具體 實(shí)現(xiàn);模塊層則關(guān)注對(duì)該模塊的具體實(shí)現(xiàn),主要利用操作系統(tǒng)提供的功能(比 如任務(wù)、Alarm、事件等)來(lái)實(shí)現(xiàn)某一功能;任務(wù)層則關(guān)注任務(wù)的具體執(zhí)行流程 的實(shí)現(xiàn);組件層則關(guān)注具體算法的實(shí)現(xiàn)。SmartC語(yǔ)言通過(guò)把系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)分 為層次化的描述,使得系統(tǒng)結(jié)構(gòu)變得更加清晰和合理,增強(qiáng)了對(duì)系統(tǒng)結(jié)構(gòu)的表 現(xiàn)力。SmartC語(yǔ)言能夠很方便的描述一個(gè)嵌入式系統(tǒng),但是SmartC語(yǔ)言描述的系 統(tǒng)是層次化的,而C代碼則是扁平的結(jié)構(gòu),所以兩者之間的轉(zhuǎn)換需要解決一些 問(wèn)題,主要有以下三個(gè)方面1) 如何用扁平結(jié)構(gòu)的C語(yǔ)言程序框架去描述層次化的系統(tǒng)結(jié)構(gòu)。2) 層次化結(jié)構(gòu)帶來(lái)的名字沖突問(wèn)題。3)層次化結(jié)構(gòu)中上下層數(shù)據(jù)的傳遞問(wèn)題。所以,如果能發(fā)明一種較為通用的從層次化語(yǔ)言轉(zhuǎn)化到扁平的C語(yǔ)言的方 法,將對(duì)嵌入式軟件開(kāi)發(fā)工具的開(kāi)發(fā)具有重要意義。 發(fā)明內(nèi)容本發(fā)明為實(shí)現(xiàn)嵌入式領(lǐng)域的基于模型的軟件開(kāi)發(fā)方法,提出了一種由層次 化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng)轉(zhuǎn)換方法。 本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案如下1) 根據(jù)特定的解析方法,解析SmartC代碼,生成一種層次化的中間數(shù)據(jù) 結(jié)構(gòu);2) 然后再根據(jù)特定的生成方法,從中間數(shù)據(jù)結(jié)構(gòu)生成C代碼。 所述的特定的解析方法采用通過(guò)深度優(yōu)先的解析方法,從高層到低層依次解析SmartC代碼,高層確定低層要解析的SmartC代碼,低層向高層提供解 析得到的信息,最終生成一個(gè)層次化的中間結(jié)構(gòu)。所述的特定的生成方法采用深度優(yōu)先的生成方法,從高層到低層依次生 成C代碼,高層為低層提供數(shù)據(jù),低層為高層提供函數(shù)實(shí)體的方法,并提出了 解決名字沖突以及數(shù)據(jù)傳遞問(wèn)題的方法。本發(fā)明具有的有益效果是本發(fā)明設(shè)置層次化的中間數(shù)據(jù)結(jié)構(gòu),把解析階段和生成階段按模塊分開(kāi), 提高模塊復(fù)用率;提供的解析方法和生成方法適用于其他的層次化語(yǔ)言到C代 碼的轉(zhuǎn)換。利用該自動(dòng)轉(zhuǎn)換機(jī)制,使SmartC語(yǔ)言真正成為一種編程語(yǔ)言,大大 簡(jiǎn)化了汽車電子領(lǐng)域軟件的開(kāi)發(fā)。
圖1 SmartC代碼自動(dòng)生成C代碼示意圖。 圖2層次化的中間數(shù)據(jù)結(jié)構(gòu)示意圖。 圖3從高層到低層的解析過(guò)程結(jié)構(gòu)圖。 圖4每一層的具體解析方法。 圖5從高層到低層的代碼生成過(guò)程結(jié)構(gòu)圖。 圖6每一層代碼生成的具體過(guò)程。
具體實(shí)施方式
下面結(jié)合圖,具體描述本發(fā)明的實(shí)施方式。本發(fā)明一種層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng)轉(zhuǎn)換方法的具體轉(zhuǎn) 換過(guò)程如圖1所示,具體分為兩個(gè)階段第一個(gè)階段是解析階段,即通過(guò)解析SmartC代碼,生成一個(gè)層次化的中間數(shù)據(jù)結(jié)構(gòu)。第二個(gè)階段是生成階段,即通 過(guò)分析中間數(shù)據(jù)結(jié)構(gòu),根據(jù)特定代碼生成方法,生成相應(yīng)的C代碼。 具體轉(zhuǎn)換過(guò)程的實(shí)現(xiàn)分為如下三個(gè)步驟1. 設(shè)計(jì)層次化的中間數(shù)據(jù)結(jié)構(gòu)和層次化的SmartC語(yǔ)言相匹配,中間數(shù)據(jù)結(jié)構(gòu)被設(shè)計(jì)為一個(gè)層次化的數(shù)據(jù) 結(jié)構(gòu)。圖2是中間數(shù)據(jù)結(jié)構(gòu)示意圖。該數(shù)據(jù)結(jié)構(gòu)類似一個(gè)語(yǔ)法樹(shù),但在普通的 樹(shù)結(jié)構(gòu)上增加了同一層之間的關(guān)系連接以及從低層到高層的關(guān)系連接,用來(lái)表 示模型間的關(guān)系以及下層模型對(duì)上層模型的訪問(wèn),從而包含了 SmartC層次化模 型的所有信息。2. 從高層往低層的解析過(guò)程解析SmartC代碼的過(guò)程采用深度優(yōu)先的解析方法,如圖3所示,具體為從 高層往低層解析,高層確定低層要解析的SmartC代碼,低層通過(guò)解析相應(yīng)的 SmartC代碼,向高層提供解析得到的信息。對(duì)每一層的解析則按圖4所示的流 程進(jìn)行解析,首先從高層中依次遍歷需要解析的節(jié)點(diǎn),直到遍歷完全。對(duì)每個(gè) 需要解析的節(jié)點(diǎn),首先找到對(duì)應(yīng)的SmartC代碼,然后分析生成所有節(jié)點(diǎn)和表示 相互關(guān)系的連接。然后分析生成的連接,設(shè)置各個(gè)節(jié)點(diǎn)之間的相互關(guān)系。最后 根據(jù)生成的信息,設(shè)置解析的文件對(duì)應(yīng)的在高層中的節(jié)點(diǎn)。3. 從層次化中間數(shù)據(jù)結(jié)構(gòu)生成C代碼本方法針對(duì)從層次化的SmartC語(yǔ)言轉(zhuǎn)化為扁平結(jié)構(gòu)的C語(yǔ)言而需要解決的 三個(gè)問(wèn)題,分別提出了解決方法,具體為-l)生成程序框架生成程序框架部分是把層次化的SmartC代碼轉(zhuǎn)化為扁平的C代碼的主要部 分。生成過(guò)程和解析過(guò)程類似,也是按深度優(yōu)先,從高層到低層來(lái)依次生成C 代碼。圖5表示了生成C代碼的總體過(guò)程。高層為低層提供數(shù)據(jù),低層為高層 提供函數(shù)實(shí)現(xiàn)。在對(duì)每一層生成的代碼中,生成三個(gè)方面的代碼(1) 生成對(duì)該層所建模型的聲明(.h文件)(2) 生成對(duì)該層所建模型的定義(.c文件)(3) 生成表示該層邏輯流程的代碼其中,本層次包含的所有節(jié)點(diǎn)的聲明生成在.h文件里,他們的定義生成在.c 文件里,而表示這些模型的邏輯流程的代碼將會(huì)提供給上一層,生成在上一層 的.c文件里。(最高層和最低層除外,最高層不需要向上層提供表示該層邏輯流 程的代碼,最低層不包含更下一層的模型,所以不需要生成,h和.c文件。)對(duì)每一層的代碼生成按圖6所示的方式進(jìn)行。依次遍歷生成的節(jié)點(diǎn),根據(jù) 節(jié)點(diǎn)類型以及設(shè)置好的相互關(guān)系來(lái)具體生成代碼。如果該節(jié)點(diǎn)是數(shù)據(jù)或者其他 模型,則直接在本層的.h和.c文件里生成相應(yīng)的聲明和定義。如果是需要代碼 生成的下一層次的節(jié)點(diǎn),則先對(duì)該節(jié)點(diǎn)進(jìn)行代碼生成,然后提取表示其邏輯流 程的信息,具體生成代碼。最后,分析該層次的邏輯和流程信息,保存提供給 上層。2) 解決名字沖突層次化的SmartC代碼轉(zhuǎn)換到扁平的C代碼的過(guò)程中會(huì)有名字沖突問(wèn)題。因 為不同模型的下一層可能含有相同名稱的模型。解決方法是在每個(gè)模型名前加 上上層模型的名字。比如APP系統(tǒng)下AMT模型的Collector任務(wù),生成的C代 碼中,其名字將是APP一AMT一Collector。3) 實(shí)現(xiàn)上下層數(shù)據(jù)傳遞在層次化模型中, 一個(gè)某層上的數(shù)據(jù)對(duì)該層而言是局部的,對(duì)下層而言是 全局的。本方法對(duì)數(shù)據(jù)傳遞按如下方式處理 一般用函數(shù)參數(shù)的形式傳遞到下 層。如果下層不能實(shí)現(xiàn)為函數(shù)或者不能自己定義該函數(shù)的參數(shù),則把該數(shù)據(jù)在 上升為全局?jǐn)?shù)據(jù)(即在.c文件里定義全局?jǐn)?shù)據(jù)),然后下層通過(guò)export該數(shù)據(jù)來(lái) 訪問(wèn)該數(shù)據(jù)。
權(quán)利要求
1.一種層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng)轉(zhuǎn)換方法,其特征在于1)根據(jù)特定的解析方法,解析SmartC代碼,生成一種層次化的中間數(shù)據(jù)結(jié)構(gòu);2)然后再根據(jù)特定的生成方法,從中間數(shù)據(jù)結(jié)構(gòu)生成C代碼。
2. 根據(jù)權(quán)利要求1所述的一種層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng) 轉(zhuǎn)換方法,其特征在于所述的特定的解析方法采用通過(guò)深度優(yōu)先的解析方法, 從高層到低層依次解析SmartC代碼,高層確定低層要解析的SmartC代碼,低 層向高層提供解析得到的信息,最終生成一個(gè)層次化的中間結(jié)構(gòu)。
3. 根據(jù)權(quán)利要求1所述的一種層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng) 轉(zhuǎn)換方法,其特征在于所述的特定的生成方法采用深度優(yōu)先的生成方法,從 高層到低層依次生成C代碼,高層為低層提供數(shù)據(jù),低層為高層提供函數(shù)實(shí)體 的方法,并提出了解決名字沖突以及數(shù)據(jù)傳遞問(wèn)題的方法。
全文摘要
本發(fā)明公開(kāi)了一種層次化系統(tǒng)描述語(yǔ)言SmartC到C代碼的自動(dòng)轉(zhuǎn)換方法。根據(jù)特定的解析方法,解析SmartC代碼,生成一種層次化的中間數(shù)據(jù)結(jié)構(gòu);然后再根據(jù)特定的生成方法,從中間數(shù)據(jù)結(jié)構(gòu)生成C代碼。本發(fā)明設(shè)置層次化的中間數(shù)據(jù)結(jié)構(gòu),把解析階段和生成階段按模塊分開(kāi),提高模塊復(fù)用率;提供的解析方法和生成方法適用于其他的層次化語(yǔ)言到C代碼的轉(zhuǎn)換。利用該自動(dòng)轉(zhuǎn)換機(jī)制,使SmartC語(yǔ)言真正成為一種編程語(yǔ)言,大大簡(jiǎn)化了汽車電子領(lǐng)域軟件的開(kāi)發(fā)。
文檔編號(hào)G06F9/44GK101216769SQ20081005911
公開(kāi)日2008年7月9日 申請(qǐng)日期2008年1月14日 優(yōu)先權(quán)日2008年1月14日
發(fā)明者吳朝暉, 張莉蘋, 楊國(guó)青, 博 胡, 堅(jiān) 趙, 趙民德, 凱 黃 申請(qǐng)人:浙江大學(xué)