智汇工业-智慧工业、智能制造及工业智能、工业互联门户网站,专业的工业“互联网+”传媒

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

來源:網絡

點擊:2001

A+ A-

所屬頻道:新聞中心

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

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

      一、嵌入式軟件編程語言

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

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

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

      二、軟件模塊化設計概述

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

      模塊化設計有如下優點:

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

      2.方便修改和維護;

      3.便于調試排錯;

      4.易于擴展。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      C++語言實現對象的方法,可以如下編寫:

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

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

      C語言實現對象的方法,可以如下編寫:

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

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

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

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

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

      模塊默認值宏定義如下:

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

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

      四、結束語

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

    (審核編輯: 智匯李)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 输送机|滚筒输送机|皮带输送机|滚筒|无动力滚筒|万向球生产厂家-上海霞韵输送机械设备有限公司 | 长春网站优化,网络推广,seo快速排名,1.8元/词/天-同信长春网络公司 | 易众拍卖行-事故车拍卖,残值车拍卖,水淹车拍卖,全损车拍卖,修复车拍卖,碰橦车拍卖,瑕疵车拍卖,报废车拍卖,泡水车拍卖,拆车件拍卖,配件拍卖,火烧车拍卖,二手车拍卖专业线上平台 | 圆锯机-滚牙机-滚丝轮-滚丝机-滚牙轮-切断机-东莞市溪远泰五金机械有限公司 | 水环式真空泵-旋片式真空泵-上海飞鲁泵业科技有限公司 | 桥梁伸缩缝_桥梁伸缩缝厂家_桥梁伸缩缝价格-衡水淞皓路桥养护工程有限公司 | 学习力_免费的在线学习网站_学习、分享、成长! | 廊坊装修装饰公司|家装设计选廊坊纽泽装饰_电话4000621358[本地实体] | 扫路车_洗扫车_清扫车_道路清扫车_天锦洗扫车-程力专用汽车股份有限公司 | 湖南长沙癫痫病医院_湖南癫痫病专科医院_湖南治疗癫痫病专业医院_长沙和谐医院有限公司 | 江苏吉宏特专用汽车制造有限公司_联合吸污车-下水道管道清洗疏通车-综合养护吸排车 | 实木全屋定制|整木定制|整木家装|实木护墙板-浩冠家具官网 | 重庆监控安装_监控系统工程_高清监控摄像头-重庆监控系统安装公司 | 山东装卸登车桥_液压装卸升降平台_固定|移动登车桥_山东牛斗重工厂家 | 暖气片,暖气片厂家,散热器,暖气片品牌-青岛瑞雪兆散热器有限公司 | 深圳五洲中医院_深圳好的中医院_深圳市医保定点医院[官网] | 今日北斗 | 北斗最新动态| 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 专利申请|知识产权贯标|商标提异议|国外专利申请-润平知识产权 | 首页|YULI玉立专业厨房电器官网|集成灶十大品牌 油烟机 燃气灶 | 熊猫家装-装修公司,上海装修、室内设计、家装、别墅装修、办公室装修、全屋定制就上熊猫家装 | 筱晓(上海)光子技术有限公司官网,MCT探测器,半导体激光二极管,中红外QCL激光器,光纤放大器,光电探测器 | 济南排队机,济南触摸屏一体机,济南拼接屏广告机厂家,汇通视控 | 西安宣传片拍摄,陕西艺景网络科技有限公司资料备份,西安影视公司,视频拍摄制作,抖音视频制作,纪录片拍摄西安短视频摄影团队,西安抖音视频拍摄 | 油漆颜料砂磨机,油墨水砂磨机,水性涂料砂磨机-常州市奥能达机械设备有限公司 | 仪器仪表维修_示波器维修_进口分析仪维修_热像仪维修_上海仰光电子仪器仪表维修部 | 送料机-冲床送料机-伺服送料机 - 常州市佳王精密机械有限公司 | 河南郑州纯净水设备_厂家_价格_河南江宇环保科技有限公司水处理设备工厂 | 潍坊志扬机械有限公司_扫地机-抓蔗机-履带运输机-自上料搅拌车 | 河南矿山重型起重机械有限公司| 金属标牌,镍电铸,电铸铭牌,标牌定制-青岛大东电铸标牌制作厂家 | 昆明护栏网厂家_隔离栅_围栏网_石笼网「13年生产经验」-云南北辛商贸 | 长型材数控钻孔攻牙机-自动数控热熔钻孔机-东莞市利速数控机械有限公司 | 联想南京总代理-联想服务器|联想电脑笔记本代理商|联想工作站|dell服务器|HP服务器|南京IBM代理商|IBM V5000存储总包销-南京宇宽科技有限公司 | 无线对讲系统-海能达对讲机-广州中达慧通科技有限公司 | 宁夏密集型母线槽厂家-封闭式母线槽-电力工程安装-天地经纬电力 宁波允泰仪器有限公司-硬度计、拉力试验机、盐雾试验箱、影像测量仪、气动量仪 | 河卵石制砂机|鹅卵石制砂机-移动制砂机-制砂设备-郑州秦星机械设备有限公司 | 激光焊接机_激光打标机_激光切割机-惠州市镭凌激光科技有限公司 激光焊接不锈钢翅片管,不锈钢翅片管,激光焊接复合翅片管,南通拓帆换热设备有限公司 | 深圳货柜租赁_集装箱出售/租赁_集装箱改造_鹏泰集装箱 | 淘金车,移动式淘金车,大小型旱地采矿车-青州冠诚重工机械有限公司 | 思为网络_成都百度优化快照排名-成都网站建设优化_成都网页设计_成都SEO公司 |