亚洲精品无码乱码成人|最近中文字幕免费大全|日韩欧美卡一卡二卡新区|熟妇性饥渴一区二区三区|久久久久无码精品国产AV|欧美日韩国产va在线观看|久久精品一本到99热动态图|99国产精品欧美一区二区三区

您現(xiàn)在的位置是: 財經(jīng) > > 正文

全球速讀:嵌入式C開發(fā)VS嵌入式CPP開發(fā)!

時間:2023-06-17 03:25:25 來源:面包芯語 發(fā)布者:DN032

這是知乎嵌入式領域的一個熱門話題,原文鏈接:


(資料圖)

幾個高贊回答:

答主:聽心跳的聲音

單片機的主流編譯語言可預見的長期仍然是C和少量匯編的結合體,而嵌入式Linux領域的未來在我看來更傾向于多語言范式的混合應用編程,內(nèi)核模塊使用C,應用層邏輯使用C++, Python,nodejs的混合編程,而界面的話使用java和QT/C++,下面說原因。

在單片機領域C++不太流行既有歷史原因,也有工業(yè)界的需求,對于單片機是從51發(fā)展到現(xiàn)在,主流的flash容量仍然在64KB~256KB左右。

目前的容量限制注定了C++中的模板,泛型編程和STL等很難被運用到開發(fā)中,但如果不使用這些,只使用支持class的C++,在C語言是有結構體+函數(shù)指針可以替代的情況下,從C換成C++并沒有迫切的需求,而python和js的推廣困難,也有著類似的理由,此外在加上調(diào)試困難。

不過對于rust,這個理由是不存在的,但是因為歷史的慣性,目前行業(yè)內(nèi)無論大小公司,都大量的遺留和正在做的都是C語言項目(包含原廠的方案),替換成rust就是商業(yè)成本問題,而不是語言問題(在我看來rust語言層面優(yōu)于C太多),所以rust熱愛者們應該是多去為各主流廠商平臺提供開源項目(具體項目,不是移植跑個hello world就完事了,能跑和能用在產(chǎn)品中是兩個概念),而不是呼吁語法層面多優(yōu)秀。

另外單片機優(yōu)勢不僅僅是實時可控,而是價格便宜,對于出貨量十萬甚至上百萬的設備,flash容量也是可觀的成本,所以工業(yè)界更希望是用最小的成本做最多的事,從這方面來說,C是比C++,python, js有明顯優(yōu)勢的。

在嵌入式Linux領域, C++絕對是應用層主力之一,QT/C++雖然目前因為芯片性能的提升,逐漸被Android/Java所替代,但仍然在醫(yī)療,工控,車載導航等領域占據(jù)主流地位,而且這也是目前C++的重要應用領域之一,說嵌入式比較難,而C++也十分困難,所以嵌入式人員學習C++比較少是十分片面客觀的印象。

另外C++難的地方是移動語義,模板偏特化,lambda, 模板元編程等知識,C++各種語法組合成的奇淫巧技如果不花大量時間去鉆研,看起來是猶如天書(很少有人例外),但對于工業(yè)界,特別是嵌入式類應用來說,只使用STL封裝的vector,map以及算法等方便開發(fā),封裝些模板函數(shù)或者類幫助復用,很多時候C++11的新特性都用不全,說困難就有點夸大其詞了。

工業(yè)界的難點永遠是如何把產(chǎn)品的需求轉換成具體的任務分解(滿足性能,成本和功能的平衡,同時能夠長期穩(wěn)定性),而不是使用何種語言來實現(xiàn)任務,當需求導向任意語言,無論是python,js,C++還是java,面向工資編程,只要有需求,總會有人會踏入這個方向,難度不是問題,需求和薪水才是問題。

答主:pansz

現(xiàn)實情況是:C++太難了,嵌入式人才本來就少,你還要能用C++且不出幺蛾子,那就更少。

所以用C確實是主流。因為C程序員要求還是低些。

記得我當初剛搞嵌入式的時候,系統(tǒng)連MMU都沒有,整個系統(tǒng)所有代碼全都在一個內(nèi)存空間,還得自己管理內(nèi)存池避免內(nèi)存碎片。隨便一個內(nèi)存訪問錯誤可以影響到完全不相干人的模塊的代碼。這種系統(tǒng)你敢用C++?

結論:如果你是自己一個人開發(fā)代碼,并且對自己的C++水平有信心,那么用C++當然沒有問題。但是考慮到整體程序員群體的C++水平以及C語言水平,用C做嵌入式項目會更現(xiàn)實一些。

答主:candy

作為一個嵌入式十多年老手,可以說CPP太復雜,語言特性太多,實現(xiàn)一個功能能能用幾十個以上的方法,太多稀奇古怪的方法去實現(xiàn)一個功能,CPP特性復雜得沒有5年以上經(jīng)驗別想用好。但一個項目組幾個人CPP能力不一致,用一些稀奇古怪的特性去實現(xiàn)一些功能,多個人之間就沒法維護了。

在調(diào)試的時候,面向?qū)ο蟮恼{(diào)試最好上圖形界面的工具才好調(diào)試,而嵌入式大多數(shù)時候是沒有這種調(diào)試工具的,CPP寫業(yè)務,后期bug調(diào)試也會搞死你,CPP嵌入式調(diào)試比C復雜一個數(shù)量級以上。

第三點,C語言特性雖然少,但完全夠用,實現(xiàn)一個功能方法不會很多,1年左右入門,3年老手,而CPP 3年連CPP特性還沒搞清楚。C可以簡單用,也可以復雜用,C with class小cass,結構體加指針輕松實現(xiàn),看看linux kernel, 看看內(nèi)核頭文件,結構體,宏各種精妙用法,你就會發(fā)現(xiàn)CPP完全多余了,CPP死于復雜。有經(jīng)驗的大公司團隊使用CPP都是使用CPP的一個子集,只使用一部分特性。

CPP設計特性太多不是優(yōu)點,而是缺點,別看什么特性幾乎都支持,其實太多選擇其實就是沒有選擇。實現(xiàn)一個功能有且僅有一種方法才是一個好語言,例如python,go也不錯。

第四點,產(chǎn)品應用層其實重要的是業(yè)務,各種復雜的業(yè)務邏輯,語言特性太多反而會混亂業(yè)務邏輯。C完全夠用,各種設計模式,C也可以實現(xiàn)。

能吸收內(nèi)核一些優(yōu)秀特性,例如內(nèi)核雙向鏈表,一些結構體,宏,日志,內(nèi)存管理,線程管理,線程間進程間通訊,各種鎖基本都需要C自己封裝套來用,這些東西學會了才能說用好了C。即使對于新手來說,不會這些高級C用法,有一個高級C也可以帶領一群低級剛入門的寫一寫業(yè)務代碼。而一個高級CPP沒法帶領一群剛入門的CPP初學者完成同樣的項目。

第五點, 資源限制,效率限制,同樣的業(yè)務功能,C的內(nèi)存占用,速度高于CPP,這些東西CPP里面基本都有現(xiàn)成的,可是了體積大,依賴多,對于嵌入式環(huán)境來說太過于笨重了。就是說同樣的產(chǎn)品,使用C可以使用更低端的主控芯片,更小的內(nèi)存,產(chǎn)品bom成本比使用cpp低,產(chǎn)品競爭優(yōu)勢遠高于使用cpp的。

本文來源網(wǎng)絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯(lián)系我進行刪除。

注意

猜你喜歡:

談談嵌入式軟件的兼容性!

我是韋東山老師的忠實粉絲!

標簽:

搶先讀

精彩放送

關于我們| 聯(lián)系我們| 投稿合作| 法律聲明| 廣告投放

版權所有© 2011-2023  產(chǎn)業(yè)研究網(wǎng)  www.www-332159.com

所載文章、數(shù)據(jù)僅供參考.本站不作任何非法律允許范圍內(nèi)服務!

聯(lián)系我們:39 60 29 14 2 @qq.com

皖ICP備2022009963號-13