幾十年來,嵌入式軟體工程師們一直在爭論是否應該使用c++替代c語言進行開發工作。
根據ieee和github的市場調查顯示,微控制器製造商提供的軟體大部分都是由c語言編寫。
事實上,56%的嵌入式軟體是用c語言編寫的。
然而,c++已經逐漸普及,大約23%的新嵌入式軟體專案都是用c++編寫的。
c語言發展到現在,差不多50年的時間了,現在正是c語言過渡到c++語言成為嵌入式開發主流語言的最佳契機。
對於習慣了用c語言開發的嵌入式程式設計師來說,對c++語言是有一些誤解和偏見的。
(1) c++執行效率低
(2) c++生成的目標**大
(3) c++程式設計非常麻煩
(4) 沒有指標概念,操作底層暫存器很複雜
我認為,嵌入式工程師是應該好好去學習一下c++語言開發嵌入式程式的,arm的mbed os中也大量採用了c++程式語言。拒絕接受新的事物,害怕推翻舊有思維,固步自封,這樣才可怕。
嵌入式工程師從c到c++的轉換,需要學習的不僅僅是一門新的語言,而實際上學習的是一種程式設計思維模式。
就像剛開始學習嵌入式從裸機**開始,然後慢慢學習rtos或者linux,這不僅僅是接觸新的東西,更是一種思維方式的轉變。
學習c++需要理解的是物件導向的思維方式,還有各種設計模式。從而在使用嵌入式開發的過程中,這些東西都是一種會用到的。
下面從三個方面來說說嵌入式開發中採用c++程式設計的好處。
¤ 引進新的設計模式
c語言在一定程度上為開發人員提供了一系列的封裝函式可以使用,也提供了非常基本的多型的功能。
然而c語言實際上是一種面向過程的語言,這種就使得組合和繼承變得十分的困難。
這些都會影響到總體設計架構的穩定性。除非是乙個c語言基礎以及做過許多專案的人,才能很好的掌握c語言架構的設計。一般的設計都會讓軟體函式的復用和擴充套件變得極其複雜。
而c++則為開發人員提供了真正物件導向的設計模式,這種抽象的模組,使得程式的耦合性更低。
由於引腳了設計模式,所以在專案工程的移植上也十分的方便,這使得軟體的復用性更好,這樣可以加快產品的開發速度,縮短研發週期,降低工作量。
¤ c++是一種不斷更新的語言
在如今複雜的開發環境中,隨著時代的發展,越來越多先進的硬體解決方案被提出,所以需要更好用的軟體和語言解決方案,這就意味著程式語言必須是不斷的更新的,不斷為開發人員提供最好的最先進的工具。
我們來看一下c/c++版本的更迭情況:
c語言版本更迭:
c++語言版本更迭:
c++語言的更新與c語言不同的是,c++不僅僅是修復了一些錯誤,更重要的是新增了一些新的特性和工具。
而且從更新頻率上來說,c++的更新最近都是大概每三年更新一次。這可以很方便的適應新的系統和硬體平台。
¤ c++有著更加豐富的特性
嵌入式程式設計過程中,相比於用c語言,c++有著更多的特性。現在的編譯器已經對程式語言的優化非常的友好了。
c++中也是支援c語言操作的,所以這種方式也很十分容易的從c到c++的過渡。
✿ 支援異常處理和錯誤捕捉,這是在嵌入式開發過程中非常高效的;
✿ 支援虛函式;
✿ 支援動態型別轉換,多重繼承,多型等。
雖然會相對於c語言來說,會增加一些資源,但對於現在的嵌入式開發來說,多幾kb已經不是什麼問題了,嵌入式上使用c++程式設計卻可以很容易的實現功能。大大提高開發效率。
雖然目前來看,做嵌入式程式設計的主流語言還是c語言,但是卻不能迴避乙個事實,在github上搜尋嵌入式的工程的時候,越來越多的工程採用了c++進行程式設計。
畢竟在嵌入式語言佔比中也接近1/4的比例了。所以嵌入式開發學習c++程式設計是乙個必不可少的環節,並理解c++程式設計的思想。
本文並不是想表達嵌入式程式設計要摒棄c語言,而是延伸嵌入式程式設計的選擇!
隨著時代的進步,處理器的發展,越來越多新的的特性被提出,相信只有與時俱進才能做時代的先鋒。
嵌入式C開發
將n左移m位 int byte to left move int n int m if n 1 if n 1 return ret 將n右移m位 int byte to right move int n int m if n 1 if n 1 ret n return ret 閒著無聊,自己寫了兩個...
嵌入式開發
經常會有人說嵌入式開發,嵌入式開發千差萬別,我總體上分為4個等級 微電子開發 rtos開發 指令碼開發 富應用開發 這一類產品行為比較固定,比如說電視遙控器,遙控汽車,電飯煲,恆溫燒水壺,溫濕度感測器,智慧型門鎖等。這些裝置行為都比較簡單,通過按鈕可以設定系統功能和行為。量不大,經常會選用flash...
嵌入式學習培訓能學會嗎?嵌入式開發培訓都要學什麼?
嵌入式學習培訓能學會嗎?嵌入式開發培訓都要學什麼?掌握linux常用操作命令,與系統管理 理解嵌入式系統程序管理,檔案管理,linux核心 熟悉arm在不同硬體平台下的作業系統移植和裝置驅動檔案管理等相關知識,學習qt程式開發,進行嵌入式系統程式的除錯。學會嵌入式開發的分析問題 解決問題的思維方法,...