這個問題在嵌入式教育培訓(xùn)中,我回答了很多次。初學(xué)者往往都會認(rèn)為ARM開發(fā)比51開發(fā)高級,但事實(shí)是這樣嗎?本篇文章就基于嵌入式開發(fā)領(lǐng)域的知識點(diǎn)分類的視覺來談?wù)?。作者在嵌入式開發(fā)領(lǐng)域有超十年的開發(fā)經(jīng)驗(yàn),本文也代表作者對嵌入式領(lǐng)域的大體見解。
1.體系編程方面
CPU體系代表的是某類CPU家族的體系特性,如ARM體系、MIPS體系、X86體系,而嵌入式開發(fā)工程師一般是針對集成各種模塊的SOC進(jìn)行編程。因此這里的體系既包括CPU體系,也包括SOC編程。體系編程應(yīng)該說是嵌入式領(lǐng)域最基本也是最通用的編程技術(shù)要求了。所有嵌入式軟件工程師都是從體系編程開始的,如ARM體系編程、MIPS體系編程、51體系編程。
嵌入式體系編程區(qū)別于PC(X86)編程的最大特點(diǎn)是,嵌入式的中斷控制由工程師自己把握,甚至每行代碼都由工程師把握。中斷、時鐘、GPIO和尋址方式是體系編程的基礎(chǔ)。這些模塊在所有CPU體系中都存在,不管是ARM,還是51。從系統(tǒng)設(shè)計來看,ARM和51在很多模塊的核心設(shè)計理念上都是一致的,要到芯片的寄存器級才體現(xiàn)出不同。當(dāng)然設(shè)計水平和寄存器的多少、CPU字長、流水線等等都最終影響CPU/SOC的性能和功耗。但對于一般的嵌入式工程師來說,他們面對的體系編程,在原理上可以說都是一致的。
接下來就談?wù)劜煌牡胤?,ARM一般我們認(rèn)為是高級處理器,事實(shí)上ARM也有進(jìn)入控制器市場,如熱銷的STM32。而51僅是控制器。很多初學(xué)者認(rèn)為ARM是認(rèn)為ARM只代表高級處理器了。高級處理器比控制器性能優(yōu)越,一般集成功能也比較豐富,如音視頻編解碼、協(xié)處理器等等,但在軟件開發(fā)來看,本人認(rèn)為處理器和控制器最大的區(qū)別在于高級處理器有MMU(內(nèi)存管理單元),而控制器沒有,或者說它只有固定映射。MMU是通過操作系統(tǒng)如LINUX運(yùn)行的必備要求,而MMU也意味著系統(tǒng)會配備較為豐富的內(nèi)存資源,可以支持LINUX等復(fù)雜操作系統(tǒng)。在其他方面,處理器和控制器在原理上都是一致的。
2.嵌入式軟件-內(nèi)核方面
ARM高級處理器可以跑linux,而51可能裸跑,也也可以運(yùn)行UCOS/RTOS等等。51沒有MMU,CPU性能一般,支持不了Linux。
但是,這并不代表51就是低層次的產(chǎn)品。技術(shù)是沒有貴賤之分、恰到好處才是最好。產(chǎn)品設(shè)計最怕技術(shù)堆砌了。產(chǎn)品是講究性價比的,在完成功能和性能的基礎(chǔ)上做到盡可能低的成本。ARM高級處理器跑UCOS,就好比奔馳車搭一個馬自達(dá)的標(biāo)志。
3.嵌入式軟件-驅(qū)動方面
通用驅(qū)動方面:KEY、LCD、存儲、AD/DA、USB等等。
傳感器:溫濕度、光敏、加速度、氣體傳感等等。傳感器最重要的是算法,如加速度傳感器的計步算法實(shí)現(xiàn)等等。
文件系統(tǒng)、GUI、協(xié)議棧等等
物聯(lián)網(wǎng)(驅(qū)動和應(yīng)用):藍(lán)牙、WIFI、Zigbee、RFID等無線設(shè)備。
這些東西跟ARM和51沒有直接的關(guān)系吧,如果是C語言編程,那在兩個平臺里面切換時很容易的。所以在這方面,兩周也沒有高低之分。
4.嵌入式軟件-應(yīng)用方面
領(lǐng)域開發(fā),跟CPU核沒有什么關(guān)系,這塊是平臺無關(guān)的。當(dāng)然,要看應(yīng)用對底層操作系統(tǒng)的性能要求。像導(dǎo)航應(yīng)用運(yùn)算量大,51也撐不起。但對于導(dǎo)航應(yīng)用開發(fā)者來說,他不需要關(guān)心底層的CPU核是什么。
當(dāng)然,對于某些簡單的電子產(chǎn)品來說,其沒有操作系統(tǒng)或者內(nèi)核,或者幾乎沒有分層,像電視的遙控器這種應(yīng)用,那應(yīng)用開發(fā)的大部分就是紅外驅(qū)動開發(fā)了,其就是平臺相關(guān)了。
應(yīng)用跟行業(yè)領(lǐng)域相關(guān),各行各業(yè)差別很多,例如航空和醫(yī)療,各有特點(diǎn)。企業(yè)選擇應(yīng)聘者一是看其通用的開發(fā)技術(shù)水平,再是看是否有相關(guān)的行業(yè)經(jīng)驗(yàn)。例如ATM機(jī)開發(fā)涉及到金融,如果之前有過類似經(jīng)驗(yàn)的工程師,那過渡會比較快。
另外,嵌入式應(yīng)用基于應(yīng)用框架來分類。應(yīng)用框架的代表是QT框架和android應(yīng)用框架,這種應(yīng)用開發(fā)可以說跟一般的嵌入式軟件都脫離得比較遠(yuǎn)了,可以說跟PC的客戶端軟件開發(fā)差不多了。由于android智能機(jī)(手機(jī)/PDA)已經(jīng)普及,業(yè)界已經(jīng)將android應(yīng)用開發(fā)視為一個單獨(dú)的崗位需求,但對于QT框架應(yīng)用開發(fā)還是視為嵌入式方面的要求,當(dāng)然,這個需求量已經(jīng)很低了。
這個部分講得更多是嵌入式方面的就業(yè)崗位技能方面,跟51/ARM平臺關(guān)系不大,因?yàn)樗芏鄷r候都是平臺無關(guān)的。
5.真的不可比嗎
也不是,總體來講,51單片機(jī)一般適用在相對簡單的電子產(chǎn)品,而arm會應(yīng)用到相對復(fù)雜的電子產(chǎn)品。企業(yè)里面的嵌入式開發(fā)工程師,絕不是僅僅是做體系編程開發(fā),往往是平臺相關(guān)的驅(qū)動開發(fā)或者平臺無關(guān)的應(yīng)用開發(fā)。由于產(chǎn)品所要求的技術(shù)的復(fù)雜性,基于ARM平臺開發(fā)的工程師有機(jī)會接觸到相對復(fù)雜的、或者技術(shù)難度高一些的模塊開發(fā),自然能夠積累到更加豐富的經(jīng)驗(yàn)。從這點(diǎn)來看,這個比較也有一定道理。但是,51平臺開發(fā)工程師絕不需要為此而感到自卑。產(chǎn)品性價比至少,ARM平臺所用到的計算,51平臺一定同樣會有,筆者之前就基于51平臺和MIPS平臺進(jìn)行嵌入式操作系統(tǒng)的架構(gòu)設(shè)計和開發(fā),里面的技術(shù)基本是理解了嵌入式Linux的精髓,高度精簡移植而來,適用就好。封閉的系統(tǒng)最考究一個人的設(shè)計能力,而開源的系統(tǒng)更考究一個人的全面能力。
6.工具鏈
工具鏈?zhǔn)乔度胧焦こ處煹幕A(chǔ)要求。姑且將運(yùn)行時庫、混合編程、宏定義、編譯鏈接、匯編語言歸類到這個范疇。尤其是鏈接腳本的定義能夠看出一個工程師對一個平臺的把握程度。工具鏈的技巧應(yīng)用是嵌入式架構(gòu)師的基礎(chǔ)要求。
51平臺有51的工具鏈,而arm平臺一般用GCC工具鏈。GCC工具鏈有更加豐富的描述語法,熟練運(yùn)用可以讓編碼更整潔、更高效。
所以,嵌入式軟件工程師應(yīng)盡可能地提高自己在平臺無關(guān)領(lǐng)域的軟件設(shè)計水平和經(jīng)驗(yàn),例如內(nèi)核和下面提到的應(yīng)用、驅(qū)動等方面,而不管自己是在ARM平臺上開發(fā)還是51平臺上開發(fā)。
關(guān)注微信公眾號:嵌入式企鵝圈,實(shí)時推送技術(shù)原創(chuàng)分享。嵌入式企鵝圈已經(jīng)有近百篇高質(zhì)量的原創(chuàng)技術(shù)分享,包括嵌入式Linux、Android和物聯(lián)網(wǎng)開發(fā)。
聯(lián)系客服