5、嵌牛IT觀察——嵌入式的編程語言

姓名:劉歡? ? ? ? ? ? 學(xué)號:19020100155? ? ? ? ? ?學(xué)院:電子工程學(xué)院? ? ? ? ? ? ? 班級:1902012

原文轉(zhuǎn)自:https://zhuanlan.zhihu.com/p/294255155

【嵌牛導(dǎo)讀】我們常見的對于底層編程的語言是C和C++,嵌入式既包含了底層的學(xué)習(xí)開發(fā),也存在硬件的編程應(yīng)用,為了更好的學(xué)習(xí)嵌入式,我們首先需要掌握嵌入式的編程語言。

【嵌牛鼻子】嵌入式? 編程語言

【嵌牛提問】嵌入式應(yīng)該適用什么編程語言呢?

【嵌牛正文】

嵌入式開發(fā)幾乎離不開C/C++,雖然在一些嵌入式linux的開發(fā)場景可以選python、java,不過也需要BSP和SDK的支持,像操作系統(tǒng)移植、驅(qū)動開發(fā)幾乎就是C的天下,最近有傳聞rust也能開發(fā)linux內(nèi)核模塊了,但距離大規(guī)模使用看上去還很遠(yuǎn),C++因為提供了比C更現(xiàn)代的面向?qū)ο蠛湍0宓忍匦裕⑶矣写罅块_源代碼庫,在嵌入式linux領(lǐng)域也有大量的使用。如果是單片機開發(fā),不管是裸機還是RTOS,C基本就是不二選擇了,這么多年下來,不管是互聯(lián)網(wǎng)資源還是各大公司的技術(shù)積累,C和C++都是最多的,總而言之呢,所以作為一個嵌入式軟件工程師,這就是必備技能。

某種程度上來說,編程語言也體現(xiàn)了嵌入式開發(fā)的一些特點,很多時候我們需要面向硬件編程,這個面向硬件有兩層含義。

第一是說需要了解硬件特性,然后通過編程來訪問硬件,例如通過讀寫寄存器完成對外設(shè)的控制,簡單如GPIO,復(fù)雜一些像Ethernet控制器,除了了解硬件的操作邏輯,也需要了解引腳、電平、IO復(fù)用、、硬件緩存、DMA這些概念。

第二是說硬件資源帶來的限制,這是由于嵌入式產(chǎn)品通常針對具體系統(tǒng),涉及的技術(shù)約束大概有計算能力,IO接口,內(nèi)存,體積,功耗,等方面的約束,在這些約束下進(jìn)行技術(shù)選型和系統(tǒng)設(shè)計,很多時候硬件選單片機,ARM,PowerPC,軟件使用裸機,RTOS或經(jīng)過裁剪的linux是比較合適的選擇,就是合適,我們也可以用牛刀殺雞,但是沒必要。

從面向硬件這個角度出發(fā),就要求編程語言首先能夠方便的訪問硬件,同時又足夠有效率,不因語言本身占過多資源,這個時候需要虛擬機或解釋器的語言就不太合適,而C/C++通過指針(地址)訪問硬件的操作最自然不過,也可以做到較少的資源消耗。

C/C++作為系統(tǒng)級的開發(fā)語言,雖然強大但也難以駕馭,比如說堆上內(nèi)存的管理留給了開發(fā)人員,相比go這樣帶內(nèi)存回收機制的語言雖然效率更好,也更容易出bug,稍不留神就會崩潰給你看,以至于為了解決這個問題,像航天、汽車電子等比較注重安全的行業(yè),在編程規(guī)范里干脆不允許使用malloc和free。

不動態(tài)分配內(nèi)存還可以做到,但不用指針就幾乎不行了,可以說指針是C/C++暴露出來的,最不安全的點,例如你明明定義了一個char類型的變量(在棧上面分配了內(nèi)存),我們?nèi)匀豢梢杂靡粋€其他類型的指針(int或函數(shù)指針)通過強轉(zhuǎn)指到這個地址,編譯完全沒有問題,只有在運行時問題才會暴露,沒錯,有指針存在就是這么不安全。

如果說編程規(guī)范是一個應(yīng)用層面的補丁,那么C++就是在語言層面的一個補丁,首先為了解決指針問題,C++提出了引用。引用是個別名,更具體的說是變量,也就是一塊有名字的內(nèi)存的別名,因此必須在定義的時候初始化,我們也可以認(rèn)為引用最大的作用,是把地址這個東西屏蔽掉了,因此我們沒有辦法像使用指針一樣去隨意讀取甚至篡改數(shù)據(jù)。但是C++和C又是完全兼容的,這是一個歷史特點,指針還是存在的,在C++11之后,更鼓勵的是使用shared_ptr等一眾智能指針,為的就是解決裸指針的問題,其本質(zhì)是使用棧內(nèi)存自動回收的機制,把程序員從內(nèi)存管理的機制里解放出來。

這么看上去,嵌入式開發(fā)對技能要求還蠻高的,對一些造輪子的開發(fā)人員來說也確實是這樣,既要懂硬件也要精通軟件,但這樣的開發(fā)人員并不占大多數(shù),畢竟輪子造出來是要復(fù)用的嘛,大部分嵌入式工程師其實接觸更多的還是業(yè)務(wù),能熟悉業(yè)務(wù)并且在項目里摸爬滾打一段時間,做到能勝任工作還是沒問題的。

近幾年自動駕駛、智能制造、物聯(lián)網(wǎng)等話題的火熱,也讓市場上嵌入式的需求居高不下,這當(dāng)然是好事,新的領(lǐng)域帶來更多的工作機會,同時也讓嵌入式開發(fā)有了新的特點,例如需要處理的數(shù)據(jù)更多,有更多需要聯(lián)網(wǎng)的場景,對開發(fā)人員來說也就意味著更好的硬件規(guī)格和更復(fù)雜的軟件,也許以后會催生出其他的選擇,但就目前來說C和C++還是嵌入式的首選。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容