999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言的面向對象實現在車燈軟件中的應用

2018-02-26 07:53:50于杰
電子技術與軟件工程 2018年15期
關鍵詞:單片機汽車

于杰

摘要

隨著汽車LED前燈的功能越來越豐富,集成度越來越高,對于LED前燈控制器的實現加入軟件模塊已成為必然,但隨著軟件復雜程度的提高往往伴隨著系統缺陷數量的增長。與面向過程編程相比,面向對象編程的封裝、多態和繼承特性降低了軟件開發復雜度,提升了軟件的可靠性、穩定性和擴展性。為了降低前燈軟件的復雜度,可以在資源有限的單片機中利用C語言實現面向對象編程,以降低開發難度,提升軟件質量

【關鍵詞】汽車 LED C語言 面向對象 單片機

1 引言

車燈作為汽車的外部關鍵部件,近些年發展十分迅速,LED車燈應用越來越廣泛,功能越來越豐富。因為成本的原因,在汽車LED前燈中往往使用價格低廉,資源有限的微控制器,在這類控制器中,一般只能使用面向過程的C語言進行編程。而與面向過程編程相比,面向對象編程具有封裝、多態和繼承特性,更加容易維護、復用和擴展。如果能使用面向對象實現LED前燈的軟件系統,可以提高整個系統的可靠性、穩定性、可擴展性。

本文分析了面向對象的主要特點,給出了使用C語言實現面向對象的方法。

2 面向對象的主要特點及C語言實現

2.1 封裝

類是面向對象編程里最重要的一個概念,它是對現實世界中具有共同屬性的一類對象的抽象。類的概念中包含兩部分內容:屬性和行為。屬性是對象擁有的性質和狀態,行為是定義在對象上的一組操作。一個好的封裝設計可以降低軟件設計的復雜性,提升軟件產品質量。

C++語言通過關鍵詞class定義一個類,實現對一個對象屬性和方法的封裝,類的概念相當于定義了一個新的數據類型。在C語言中,雖然沒有類的概念和class關鍵字,但是可以使用相似的struct來模擬一個類,對于屬性依然使用變量來定義,對于方法可以使用函數指針來定義。

typedef struct_led

{

void(*Led0n)(struct_pwm_led*this);

void(*LedOff)(struct_pwm_led*this);

}CLed;

對于定義的函數指針必須進行初始化,指向具體的函數之后才能使用,這里提供一個宏來實現對內部變量和函數指針進行初始化,其中Led_SetDuty、Led_On均是定義完整的函數

#define LED GENERATE{\

Led_On,\

Led_Off\

}

CLed led=LED_GENERATE;

led.LedOn(&led);//由于C語言編譯器中不會為函數提供this指針,因此這里手工添加

2.2 繼承

汽車LED前燈中,不同型號的產品間有許多相同或相似的功能,即使是同一產品也會因為降成本或優化,在不改變功能的情況下更改硬件設計,因此在汽車LED前燈的軟件產品中,軟件的復用性就顯得更加重要。在面向對象編程中,繼承是復用己存在代碼元素的一項重要特性。

在面向對象編程中,繼承是復用己存在代碼元素的一項重要特性,通過定義一個繼承自基類的派生類,在不編寫一行代碼的情況下,即可擁有基類的全部特性,在派生類中編寫代碼即可實現對己有功能進行擴展。在C語言的結構體中并沒有提供繼承的方法,這里我們使用包含的關系來模擬面向對象中的繼承,在模擬的派生類中包含基類的對象,并將其作為模擬派生類的第一個元素(為了方便使用基類指針訪問派生類對象),即可擁有與繼承相同的特性:

//CLed為己定義的結構體

typedef struct_pwm_led

{

CLed base;

uint32_t pwm_duty;

void(*SetDuty)(struct_pwm_led*this,uint32_t duty):

}CPwmLed;

#define PWMLED GENERATE{\

LED_GENERATE,\

0,\

LED SetDuty\

}

2.3 多態

汽車LED前燈往往需要在不同的外界條件或點亮時機有不同的點亮行為,使用面向過程的方法,則需要針對每一種點亮模式定義不同的接口函數,在應用中在根據當前條件進行調用,當點亮模式改變或增加新的模式時,我們就需要對接口函數和調用進行刪減更改,這無形中降低了軟件的可擴展性,在每次修改中更容易引入新的bug。

在面向對象的設計中,多態是指一組相關的類對象具有相同的函數原型,但具有不同的函數行為。C++語言中使用虛函數實現多態的功能,但C語言中雖然沒有虛函數這樣的特性,但可以利用函數指針實現多態的功能。首先通過定義函數指針抽象出統一的函數接口,在將函數指針指向不同的函數實現,這樣當調用函數指針時就會表現出不同的行為:

//CLed為己定義的結構體

typedefstruct_bin_led

{

CLed led;

}CB1nLed;

//通過宏對基類中的函數指針進行重新定義

#define BLNLED_GENERATE{\

{B1nLed_On}\

}

CB1nLed bln_led=BLNLED_GENERATE;

CLed*pLed=(CLed*)(&bln_led);

pLed->LedOn(pLed);

3 結論

通過使用C語言模擬出面向對象語言的特點,使得軟件系統的模塊化設計更加容易的實現。高內聚低耦合的模塊設計提高軟件系統代碼的重復利用率,方便了軟件系統的維護和修改,便于調試排錯,易于擴展,進一步降低了軟件復雜度,提高了系統的健壯性、靈活性、可靠性。在獲得面向對象編程的優點的同時,依然保留著C語言高效的特點,適合在資源有限的單片機中應用。

參考文獻

[1]譚浩強.C語言程序設計[M].北京:電子工業出版社,2005.

[2]錢能.C++程序設計教程[M].北京:清華大學出版社,1999.

[3]章遠陽,楊芙清,邵維中.C++語言的面向對象特性分析[J].計算機工程與應用,1992(09).

[4]劉宇,王煒,張見威.C++語言面向對象機制的底層實現[J].華南師范大學學報,1998(04).

[5]陳飛,陳啟安.面向對象的嵌入式系統開發技術[J].單片機與嵌入式系統應用,2005.

猜你喜歡
單片機汽車
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
2019年8月汽車產銷環比增長 同比仍呈下降
汽車與安全(2019年9期)2019-11-22 09:48:03
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
汽車的“出賣”
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
汽車們的喜怒哀樂
Microchip推出兩個全新PIC單片機系列
3D 打印汽車等
決策探索(2014年21期)2014-11-25 12:29:50
主站蜘蛛池模板: 国产精品hd在线播放| 色成人综合| 亚洲国产成人精品一二区| 激情综合婷婷丁香五月尤物| 在线观看欧美国产| 最新亚洲人成无码网站欣赏网 | 午夜天堂视频| 婷婷六月综合网| 日韩av电影一区二区三区四区 | 麻豆精品在线| 亚洲av片在线免费观看| 国产成人亚洲综合a∨婷婷| 免费人成网站在线观看欧美| 亚洲精品欧美日本中文字幕| 中文字幕1区2区| 五月天福利视频| 国产女同自拍视频| 亚洲一区二区三区香蕉| 人妻中文久热无码丝袜| 真实国产精品vr专区| 成人小视频网| 久久婷婷六月| 国产精品福利尤物youwu| 精品无码一区二区三区电影| 精品福利网| 精品国产中文一级毛片在线看| 久久香蕉欧美精品| 99久久国产综合精品2023 | 97久久精品人人做人人爽| 成人国产精品视频频| 91极品美女高潮叫床在线观看| 91成人精品视频| 欧美中文字幕在线视频 | 亚洲人在线| 亚瑟天堂久久一区二区影院| 国产一级毛片网站| 亚洲AV无码乱码在线观看代蜜桃 | 伊人成人在线| 四虎国产永久在线观看| 中文字幕日韩视频欧美一区| 国产亚洲精品va在线| 久草国产在线观看| 91精品国产91久久久久久三级| 国产在线精品美女观看| 欧洲高清无码在线| 日日拍夜夜操| 成人午夜天| 天堂av高清一区二区三区| 伊人色在线视频| 亚洲欧洲美色一区二区三区| 这里只有精品免费视频| 91视频99| 色婷婷成人网| 一本大道无码日韩精品影视 | 91久久偷偷做嫩草影院免费看| 亚洲久悠悠色悠在线播放| 伊人久久福利中文字幕| 茄子视频毛片免费观看| 久久综合久久鬼| 国产精彩视频在线观看| 精品视频一区二区三区在线播| 亚洲AV一二三区无码AV蜜桃| 色婷婷综合激情视频免费看| 一级看片免费视频| 国产精品成人第一区| 国产日韩欧美在线视频免费观看 | 久久青草热| 视频国产精品丝袜第一页| 熟女视频91| 日韩毛片基地| 一级片一区| 三级毛片在线播放| 九月婷婷亚洲综合在线| 国产激情无码一区二区APP| 日韩黄色精品| 亚洲欧美精品一中文字幕| 91久久偷偷做嫩草影院免费看| 欧美日韩国产高清一区二区三区| 国产精品久久久久久影院| 国产一区二区网站| 国产美女在线观看| 精品国产欧美精品v|