天天插天天射天天操_国产伦精品一区二区三区在线_国产高清免费_欧美激情视频一区二区三区_狠狠操很很干_国产精品自拍一区

基于模塊化的嵌入式軟件設(shè)計(jì)研究

來(lái)源:網(wǎng)絡(luò)

點(diǎn)擊:1976

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞: 嵌入式軟件,C語(yǔ)言

      嵌入式軟件多采用C語(yǔ)言編寫。文章提出了一種C語(yǔ)言模塊化編程的實(shí)現(xiàn)方法,并詳細(xì)描述該技術(shù)實(shí)現(xiàn)的細(xì)節(jié)。使用這種模塊化編程的方法,可以用C語(yǔ)言編寫出帶有C++語(yǔ)言部分面向?qū)ο筇卣鞯能浖K。采用這種方法編寫的代碼具有很高的重復(fù)利用率,而且更利于修改和維護(hù)。

      一、嵌入式軟件編程語(yǔ)言

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

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

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

      二、軟件模塊化設(shè)計(jì)概述

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

      模塊化設(shè)計(jì)有如下優(yōu)點(diǎn):

      1.提高代碼重復(fù)利用率;

      2.方便修改和維護(hù);

      3.便于調(diào)試排錯(cuò);

      4.易于擴(kuò)展。

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

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

      模塊化設(shè)計(jì)時(shí)應(yīng)將上述要求有機(jī)地結(jié)合起來(lái)。在保證正確性和健壯性的基礎(chǔ)上,應(yīng)盡可能提高軟件的可擴(kuò)充性和可復(fù)用性。

      三、使用C語(yǔ)言進(jìn)行模塊化代碼編寫

      通過(guò)模塊化所實(shí)現(xiàn)的軟件是由被加工的對(duì)象及其在該對(duì)象上所實(shí)現(xiàn)的有關(guān)功能構(gòu)成。在開發(fā)軟件的過(guò)程中,一般采用兩種方法:其一是把重點(diǎn)放在功能的實(shí)現(xiàn)上,其二是把重點(diǎn)放在對(duì)象上。基于功能的軟件開發(fā)方法中,其功能實(shí)現(xiàn)中考慮的“過(guò)程”和“操作”是多變和不穩(wěn)定的,程序結(jié)構(gòu)圍繞事先確定好的功能,使得功能的擴(kuò)充、刪除及修改變得相當(dāng)困難。這樣的軟件結(jié)構(gòu)脆弱、功能集中、耦合度大,很難滿足可擴(kuò)充性、可維護(hù)性的要求,軟件的重用性也差。

      面向?qū)ο蟮某绦蛟O(shè)計(jì)中考慮的“對(duì)象”和“數(shù)據(jù)結(jié)構(gòu)”是相對(duì)穩(wěn)定的。盡管功能是千變?nèi)f化的,但一個(gè)問題空間中的對(duì)象一般總能保持其相對(duì)穩(wěn)定不變性,這樣圍繞對(duì)象構(gòu)造的軟件系統(tǒng)也自然會(huì)有好的穩(wěn)定性。面向?qū)ο蠓椒ò褜傩院头?wù)封裝在對(duì)象中,當(dāng)外部功能發(fā)生變化時(shí),這種封裝可以保持對(duì)象結(jié)構(gòu)的相對(duì)穩(wěn)定,使得改動(dòng)僅局限在一個(gè)對(duì)象內(nèi)部,減小了因改動(dòng)引起的系統(tǒng)波動(dòng)效應(yīng),因此,面向?qū)ο蠓椒ㄩ_發(fā)的軟件具有易于擴(kuò)充、修改和維護(hù)的特性。另外,面向?qū)ο蠓椒ň哂械睦^承性和封裝性也支持軟件重用,并且易于擴(kuò)充,能較好地適應(yīng)復(fù)雜大系統(tǒng)不斷發(fā)展和變化的要求。

      C++擁有面向?qū)ο蟮奶匦裕虼耸褂肅++語(yǔ)言可以方便、輕松的完成軟件模塊化設(shè)計(jì)。

      C語(yǔ)言是面向過(guò)程的語(yǔ)言,不具備C++語(yǔ)言面向?qū)ο蟮膬?yōu)勢(shì),模塊化編程不像C++實(shí)現(xiàn)起來(lái)那么容易,但是通過(guò)C語(yǔ)言的高級(jí)應(yīng)用還是可以實(shí)現(xiàn)的。使用C語(yǔ)言來(lái)實(shí)現(xiàn)C++語(yǔ)言面向?qū)ο筇卣鳎ㄟ^(guò)舉例對(duì)比的方式描述具體實(shí)現(xiàn)過(guò)程,詳細(xì)如下:

      C++定義一個(gè)對(duì)象是通過(guò)“類”,類封裝了一個(gè)對(duì)象所用到的數(shù)據(jù)和方法,C語(yǔ)言中沒有類但是有“結(jié)構(gòu)體”,C語(yǔ)言中可以使用一個(gè)“結(jié)構(gòu)體”來(lái)定義一個(gè)對(duì)象。例如實(shí)現(xiàn)一個(gè)一階數(shù)字低通濾波器模塊:

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

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

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

      使用C語(yǔ)言建議如下編寫:

    基于模塊化的嵌入式軟件設(shè)計(jì)研究

      C語(yǔ)言通過(guò)結(jié)構(gòu)體定義了一個(gè)新的數(shù)據(jù)類型LPF,因?yàn)檫@種帶有數(shù)據(jù)和方法的數(shù)據(jù)類型已經(jīng)擁有了一些面向?qū)ο蟮奶卣饕部梢岳斫鉃橐粋€(gè)簡(jiǎn)單對(duì)象,LPF包含了模塊輸入Input、模塊輸出Output、模塊參數(shù)Tc、模塊參數(shù)Fc、模塊變量K、模塊變量OldOutput,LPF中也同樣包含了對(duì)象的方法:模塊初始化Init()、模塊復(fù)位Reset()、模塊主要功能實(shí)現(xiàn)Calc()。上述結(jié)構(gòu)體定義是C語(yǔ)言模塊化編程的第一步,只是聲明了數(shù)據(jù)和方法的接口。

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

    基于模塊化的嵌入式軟件設(shè)計(jì)研究

      C++語(yǔ)言只要再定義了方法實(shí)現(xiàn)部分就完成了完整的類,CLpf類已經(jīng)可以方便使用,因?yàn)榭梢匀缦露xCLpf m_Lpf,并且可以方便如下調(diào)用這個(gè)對(duì)象的幾個(gè)方法m_Lpf.Init()、m_Lpf.Reset()、m_Lpf.Calc()。

      C語(yǔ)言實(shí)現(xiàn)對(duì)象的方法,可以如下編寫:

    基于模塊化的嵌入式軟件設(shè)計(jì)研究

      C語(yǔ)言定義的LPF數(shù)據(jù)類型,雖然可以如下定義LPF Lpf,但是不能像C++一樣按照如下方法調(diào)用對(duì)象的如下幾個(gè)方法Lpf.

      Init()、Lpf.Reset()、Lpf.Calc(),雖然編譯器通常不會(huì)報(bào)錯(cuò),但是執(zhí)行是錯(cuò)誤的,因?yàn)橛腥缦?點(diǎn)錯(cuò)誤:

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

      因此需要在聲明對(duì)象時(shí)將LPF結(jié)構(gòu)的數(shù)據(jù)和函數(shù)指針進(jìn)行初始化,可以按照如下方法定義LPF默認(rèn)值,這是C語(yǔ)言模塊化編程不同于C++的重要一點(diǎn),即C語(yǔ)言模塊化編程的第三步。

      模塊默認(rèn)值宏定義如下:

    基于模塊化的嵌入式軟件設(shè)計(jì)研究

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

      四、結(jié)束語(yǔ)

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

    (審核編輯: 智匯李)

    聲明:除特別說(shuō)明之外,新聞內(nèi)容及圖片均來(lái)自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。

    主站蜘蛛池模板: 亚洲精品色 | 色com | 亚洲精品久久一区二区三区 | 久久51 | 91在线精品一区二区 | 成人av观看 | 国产精品99久久久久久久vr | 久久久精品一区二区三区 | 国产一级毛片电影 | 亚洲视频三区 | 91在线精品秘密一区二区 | 先锋资源在线观看 | 伊人网在线视频 | 国产一区久久 | 亚洲精品久久久久午夜 | 99草视频| 999久久久 | 91免费看片神器 | 欧美极品在线 | 精品在线一区二区三区 | 久久精品在线 | aaa级片| 永久av| 国产美女黄色片 | 欧美激情a∨在线视频播放 成人免费共享视频 | 亚洲天堂一区二区 | 亚洲国产精品久久久 | 91免费看网站| 国产91久久久久 | 日本精品网站 | 日韩精品免费观看 | 黄色网在线看 | 一区二区三区中文字幕 | 日韩在线观看一区 | 久久伦理电影网 | 国产精品美女视频一区二区三区 | 天天看夜夜爽 | 91人人看| 亚洲欧美中文字幕 | 日韩欧美成人影院 | 国产一区二区亚洲 |