免费色播,亚洲国产欧美国产第一区二区三区,毛片看,日本精品在线观看视频,国产成人精品一区二区免费视频,日本黄色免费网站,一级毛片免费

基于模塊化的嵌入式軟件設計研究

來源:網絡

點擊:1789

A+ A-

所屬頻道:新聞中心

關鍵詞: 嵌入式軟件,C語言

      嵌入式軟件多采用C語言編寫。文章提出了一種C語言模塊化編程的實現(xiàn)方法,并詳細描述該技術實現(xiàn)的細節(jié)。使用這種模塊化編程的方法,可以用C語言編寫出帶有C++語言部分面向對象特征的軟件模塊。采用這種方法編寫的代碼具有很高的重復利用率,而且更利于修改和維護。

      一、嵌入式軟件編程語言

      嵌入式軟件通常采用匯編、C語言、C++語言進行編寫。從三種語言執(zhí)行效率上進行比較則匯編最高、C語言次之、C++語言最慢,從三種語言模塊化編程的難易程度上進行比較則C++語言最好、C語言次之、匯編最差,在大多數情況下,嵌入式軟件多采用C語言進行編寫,原因如下:

      1.C語言是面向過程的高級語言,代碼移植性和可讀性遠高于匯編;2.大多數嵌入式軟件開發(fā)環(huán)境都提供匯編和C語言編譯器,而C++語言編譯器有可能不提供;3.三種語言相比C語言學習起來較容易。

      由于嵌入式軟件多采用C語言編寫,因此本文著重講述如何用C語言進行模塊化編程。

      二、軟件模塊化設計概述

      面對越來越復雜的軟件開發(fā)任務,人們提出了各種軟件設計的模型。從用戶需求和系統(tǒng)要實現(xiàn)的任務功能出發(fā),把大型的軟件劃分為相對較小的模塊。模塊化設計的核心是模塊的獨立性(即高內聚,低偶合),主要包括功能獨立性和結構獨立性,這使得軟件開發(fā)的分工易于實現(xiàn)。

      模塊化設計有如下優(yōu)點:

      1.提高代碼重復利用率;

      2.方便修改和維護;

      3.便于調試排錯;

      4.易于擴展。

      軟件設計的模塊化降低了設計開發(fā)的復雜度并使設計步驟清晰,也有利于提高軟件健壯性、靈活性、可復用性等。進行模塊化軟件設計時應綜合考慮模塊的可分解性、可結合性、可理解性、連續(xù)性及模塊保護幾方面的要求。

      模塊的可分解性要求把一個大的、復雜的問題分解為一些小的、簡單的問題,通過解決各個小問題來解決大問題;模塊的可結合性要求不同時期、不同項目、不同環(huán)境下設計的模塊應能自由地結合在一起構成新的系統(tǒng);模塊的可理解性要求通過某種方法設計的每個模塊不需要參考相鄰的模塊就能被人看懂;模塊的連續(xù)性要求通過某種方法設計出的模塊,在需求發(fā)生變化時只影響一個或少數幾個模塊;模塊保護則要求通過某種方法設計出的模塊,在運行期間發(fā)生的錯誤被限制在這個模塊內部或僅僅傳播到少數幾個摸塊。

      模塊化設計時應將上述要求有機地結合起來。在保證正確性和健壯性的基礎上,應盡可能提高軟件的可擴充性和可復用性。

      三、使用C語言進行模塊化代碼編寫

      通過模塊化所實現(xiàn)的軟件是由被加工的對象及其在該對象上所實現(xiàn)的有關功能構成。在開發(fā)軟件的過程中,一般采用兩種方法:其一是把重點放在功能的實現(xiàn)上,其二是把重點放在對象上?;诠δ艿能浖_發(fā)方法中,其功能實現(xiàn)中考慮的“過程”和“操作”是多變和不穩(wěn)定的,程序結構圍繞事先確定好的功能,使得功能的擴充、刪除及修改變得相當困難。這樣的軟件結構脆弱、功能集中、耦合度大,很難滿足可擴充性、可維護性的要求,軟件的重用性也差。

      面向對象的程序設計中考慮的“對象”和“數據結構”是相對穩(wěn)定的。盡管功能是千變萬化的,但一個問題空間中的對象一般總能保持其相對穩(wěn)定不變性,這樣圍繞對象構造的軟件系統(tǒng)也自然會有好的穩(wěn)定性。面向對象方法把屬性和服務封裝在對象中,當外部功能發(fā)生變化時,這種封裝可以保持對象結構的相對穩(wěn)定,使得改動僅局限在一個對象內部,減小了因改動引起的系統(tǒng)波動效應,因此,面向對象方法開發(fā)的軟件具有易于擴充、修改和維護的特性。另外,面向對象方法具有的繼承性和封裝性也支持軟件重用,并且易于擴充,能較好地適應復雜大系統(tǒng)不斷發(fā)展和變化的要求。

      C++擁有面向對象的特性,因此使用C++語言可以方便、輕松的完成軟件模塊化設計。

      C語言是面向過程的語言,不具備C++語言面向對象的優(yōu)勢,模塊化編程不像C++實現(xiàn)起來那么容易,但是通過C語言的高級應用還是可以實現(xiàn)的。使用C語言來實現(xiàn)C++語言面向對象特征,通過舉例對比的方式描述具體實現(xiàn)過程,詳細如下:

      C++定義一個對象是通過“類”,類封裝了一個對象所用到的數據和方法,C語言中沒有類但是有“結構體”,C語言中可以使用一個“結構體”來定義一個對象。例如實現(xiàn)一個一階數字低通濾波器模塊:

      傳遞函數一階低通數字濾波器,下面分別使用C++語言和C語言分別編寫該軟件模塊,通過對比,可以看到C++語言和C語言實現(xiàn)模塊的一些共性,從而更容易理解C語言實現(xiàn)模塊化編程的原理。

      使用C++語言可以如下編寫代碼(C++語言實現(xiàn)該模塊有很多中寫法,如下的代碼雖然不是C++語言最佳的實現(xiàn)方式,但是更類C,更容易理解):

      CLpf這個類定義了一個低通濾波器對象,CLpf類中包含了模塊數據:模塊輸入m_Input、模塊輸出m_Output、模塊參數m_Tc、模塊參數m_Fc、模塊變量m_K、模塊變量m_OldOutput,CLpf類中還包含了對象的方法:模塊初始化Init()、模塊復位Reset()、模塊主要功能實現(xiàn)Calc(),上述類的定義部分是C++語言模塊化編程的第一步。

      使用C語言建議如下編寫:

    基于模塊化的嵌入式軟件設計研究

      C語言通過結構體定義了一個新的數據類型LPF,因為這種帶有數據和方法的數據類型已經擁有了一些面向對象的特征也可以理解為一個簡單對象,LPF包含了模塊輸入Input、模塊輸出Output、模塊參數Tc、模塊參數Fc、模塊變量K、模塊變量OldOutput,LPF中也同樣包含了對象的方法:模塊初始化Init()、模塊復位Reset()、模塊主要功能實現(xiàn)Calc()。上述結構體定義是C語言模塊化編程的第一步,只是聲明了數據和方法的接口。

      C++語言實現(xiàn)對象的方法,可以如下編寫:

    基于模塊化的嵌入式軟件設計研究

      C++語言只要再定義了方法實現(xiàn)部分就完成了完整的類,CLpf類已經可以方便使用,因為可以如下定義CLpf m_Lpf,并且可以方便如下調用這個對象的幾個方法m_Lpf.Init()、m_Lpf.Reset()、m_Lpf.Calc()。

      C語言實現(xiàn)對象的方法,可以如下編寫:

    基于模塊化的嵌入式軟件設計研究

      C語言定義的LPF數據類型,雖然可以如下定義LPF Lpf,但是不能像C++一樣按照如下方法調用對象的如下幾個方法Lpf.

      Init()、Lpf.Reset()、Lpf.Calc(),雖然編譯器通常不會報錯,但是執(zhí)行是錯誤的,因為有如下2點錯誤:

      C語言中的方法調用是需要傳遞對象的指針;Lpf對象實例中的幾個方法的函數指針沒有初始化,這種方法不能正常執(zhí)行。

      因此需要在聲明對象時將LPF結構的數據和函數指針進行初始化,可以按照如下方法定義LPF默認值,這是C語言模塊化編程不同于C++的重要一點,即C語言模塊化編程的第三步。

      模塊默認值宏定義如下:

    基于模塊化的嵌入式軟件設計研究

      C語言中使用LPF數據類型,則應該在聲明對象實例的同時進行初始化,這點不同于C++,例如:LPF Lpf = LPF_DEFAULTS,這樣聲明的Lpf對象實例,其方法指針指向了正確的方法實現(xiàn)函數,并且數據有初值(C++語言可以通過構造函數來給數據賦初值),Lpf對象調用其方法可以按照如下形式:Lpf.Init(&Lpf)、Lpf.Reset(&Lpf)、Lpf.Calc(&Lpf),通過這種方法在C語言中實現(xiàn)了代碼的模塊化設計。

      四、結束語

      基于上述方法,可以實現(xiàn)C語言模塊化設計要求,是一種值得推廣的編碼方式。
     

    (審核編輯: 智匯李)