01、嵌入式工作會(huì)越老越吃香嗎?
事實(shí)上電子技術(shù)更新?lián)Q代非???,5年前如果你是一名電子設(shè)計(jì)高手,如果5年中你再?zèng)]有接觸過電子設(shè)計(jì),那5年后你就成為一個(gè)菜鳥了。做嵌入式一樣,并不是越老越吃香,而是看你是否能不斷學(xué)習(xí)新的知識(shí),接受新的技術(shù)和設(shè)計(jì)理念。
雖然如此,我們也可以從老嵌入式開發(fā)者學(xué)習(xí)一些經(jīng)驗(yàn)。廢話不多說,進(jìn)入正題吧。
我是97年畢業(yè)的,做了兩年的電子設(shè)計(jì)與開發(fā),做過電路原理圖和PCB板設(shè)計(jì)。2000年進(jìn)入軟件行業(yè),六年多的時(shí)間里,差不多做過整個(gè)操作系統(tǒng)的組件。一開始用的是uC/OS RTOS,第一次做的這個(gè)產(chǎn)品是一個(gè)DVR,CPU用的是AMD的SC520,是一塊x86的處理器。因?yàn)?a target="_blank">公司小,所以整個(gè)DVR的嵌入式軟件就我一個(gè)人做,對(duì)于我來說是一個(gè) 難得的機(jī)會(huì)和挑戰(zhàn)。我所做的包括:
1) 熟悉CPU。x86中存在實(shí)模式和保護(hù)模式,CPU一上電后進(jìn)入的是實(shí)模式,要進(jìn)入保護(hù)模式則需要做一定的設(shè)置,最后做一個(gè)長(zhǎng)跳轉(zhuǎn),就能進(jìn)入保護(hù)模式。對(duì) 于這一處理器的熟悉和了解,使得我對(duì)于處理器有一個(gè)很好的認(rèn)識(shí)。此外,明白什么是芯片組、PCI的原理和配置方法、SDRAM如何配置、IDE的 PIO模式是如何工作的,等等。
2) 熟悉uC/OS 。RTOS并對(duì)其進(jìn)行擴(kuò)展。理解任務(wù)是如何實(shí)現(xiàn)的、任務(wù)是如何被調(diào)度的、Mutex和Semaphore是如何實(shí)現(xiàn)的、對(duì)處理器進(jìn)行開關(guān)中斷的目的是什么且 要注意什么,等等。對(duì)于RTOS的擴(kuò)展則包括實(shí)現(xiàn)了一個(gè)采用malloc/free進(jìn)行內(nèi)存分配的堆管理模塊,這一管理模塊是參照XINU操作系統(tǒng)來實(shí)現(xiàn) 的;對(duì)任務(wù)調(diào)度部分進(jìn)行修改以方便中斷服務(wù)程序的管理。
3) 將MINUX操作系統(tǒng)的文件系統(tǒng)移植到我們的DVR上。MINUX中采用的就是UNIX中的i-node的方式來管理文件的,這種方式在現(xiàn)在的Linux 中也能看到。由于MINUX的文件系統(tǒng)是針對(duì)小型存儲(chǔ)設(shè)備的,所以對(duì)其代碼要進(jìn)行修改,以適應(yīng)當(dāng)時(shí)所采用的上G的硬盤。
4) 將XINU中的TCP協(xié)議棧移植到DVR上。我記得很清楚的是,當(dāng)時(shí)對(duì)于TCP的滑動(dòng)窗口的調(diào)試以及校驗(yàn)和的調(diào)試花了不少時(shí)間。
可以說這一時(shí)期的工作,使得我對(duì)于操作系統(tǒng)的原理和實(shí)現(xiàn)非常的熟悉。還有,我在這一公司使用過了邏輯分析儀去分析總線信號(hào)以解決問題,這些都是非常好的經(jīng)歷,都有助于提升對(duì)計(jì)算機(jī)系統(tǒng)的理解。
2003年我加入了UTStarcom,因?yàn)榍耙粋€(gè)項(xiàng)目的經(jīng)歷,當(dāng)時(shí)進(jìn)這一公司時(shí)覺得自己很牛。但很快我發(fā)現(xiàn),嵌入式系統(tǒng)中還有很多是我要學(xué)的,我還嫩呢。比如:
1) 第一個(gè)挑戰(zhàn)是處理器,當(dāng)時(shí)用的是PowerPC8250。對(duì)于處理器,我花了不少時(shí)間去讀相關(guān)的資料。總的加起來,其手冊(cè)超過兩千頁(yè),而且還是英文的。為了使得自己更加的熟悉這塊處理器,我前前后后對(duì)這些資料完整的讀了三四遍。
2) 當(dāng)時(shí)采用的是RTEMS操作系統(tǒng),這一系統(tǒng)就是一個(gè)類UNIX的操作系統(tǒng),早期是美國(guó)軍方使用的,后來變成了開源項(xiàng)目。在這一操作系統(tǒng)上的工作經(jīng)歷讓我一 下子意識(shí)到了自己的一個(gè)問題,那就是:以前的工作只是技術(shù)性的不具備系統(tǒng)性。比如,如何將一個(gè)操作系統(tǒng)作為一個(gè)系統(tǒng)將其設(shè)計(jì)得更好、驅(qū)動(dòng)程序如何方便增加 以及擴(kuò)展,等等。這一切說到底是自己的設(shè)計(jì)能力還是不足。我花了很長(zhǎng)的時(shí)間來研究RTEMS操作系統(tǒng)的實(shí)現(xiàn),這對(duì)于提升自己的設(shè)計(jì)能力有很大的幫助。
3) 對(duì)于編譯器和C語(yǔ)言的理解不深。比如什么是ABI(Application Binary Interface)?后來知道Stack Frame和程序的調(diào)用棧的管理都與ABI有關(guān)系。
在UTStarcom工作的初期,所有與操作系統(tǒng)相關(guān)的問題都是由我來解決的。此外,在我的經(jīng)理的支持下,我還做過了一個(gè)更新版本RTEMS操作系統(tǒng)的移 植,當(dāng)時(shí),UTStarcom的RTEMS操作系統(tǒng)的移植是在新澤西完成的,我不知我是不是UTStarcom在中國(guó)第一個(gè)做這個(gè)操作系統(tǒng)移植的。當(dāng)時(shí), 我在做移植時(shí)還碰到了一個(gè)與編譯器相關(guān)的問題,還找過WindRiver做支持。因?yàn)槲覀冇玫氖荳indRiver的調(diào)試器,當(dāng)時(shí)懷疑是調(diào)試器有問題,最 后發(fā)現(xiàn)是RTEMS的Tool Chain有Bug。UTStarcom的中期,我們將我們的應(yīng)用程序移植到了VxWorks上,所以后來我對(duì)于VxWorks也很熟悉。后來還做過了一 個(gè)ADSL接入的項(xiàng)目,采用的還是VxWorks以及PNE(Platform for Network Equipment),處理器用的是Intel的XScale IXP425。2006年5月我離開了UTStarcom。
應(yīng)當(dāng)說,前面兩個(gè)公司工作經(jīng)歷是我很寶貴的財(cái)富。一方面完成了從小公司到大公司的轉(zhuǎn)變,說實(shí)在的在進(jìn)UTStarcom時(shí),還是很有壓力的。什么都是新的,新的行業(yè)、 新的產(chǎn)品,當(dāng)然對(duì)于我來說是直接工作內(nèi)容的變化,新的處理器、新的操作系統(tǒng)、等。前兩個(gè)公司有一個(gè)工作情景我一直很懷念,那就是:我是一手拿示波器,一手 拿電路原理圖進(jìn)行軟件調(diào)試的。
好了說了這么多,現(xiàn)在我想說說我對(duì)于嵌入式系統(tǒng)開發(fā)的感受和看法。在此,我想先說說什么是嵌入式開發(fā),這一 點(diǎn)我看過不少對(duì)其的定義。先拋開別人的定義,我想說說我的觀點(diǎn)。 有不少工程師的工作是寫運(yùn)行在RTOS之上的應(yīng)用程序的,但他(她)其實(shí)根本不用接觸硬件 相關(guān)的知識(shí)、不用接觸什么是中斷、也不用考慮任務(wù)的優(yōu)先級(jí),對(duì)于這些工作我不認(rèn)為是嵌入式開發(fā),其實(shí),說到底只是采用了新的一套API(即RTOS的相關(guān) 函數(shù))進(jìn)行編程。嵌入式開發(fā)我認(rèn)為至少要與硬件和RTOS打交道,對(duì)一操作系統(tǒng)的原理和實(shí)現(xiàn)很清楚。從我的角度來看,如果一個(gè)寫驅(qū)動(dòng)的人只知道驅(qū)動(dòng)相關(guān)的 內(nèi)容,而對(duì)于操作系統(tǒng)的機(jī)理并不是很清楚,那也不能算是嵌入式系統(tǒng)開發(fā),就是驅(qū)動(dòng)開發(fā)。下面是我對(duì)于嵌入式系統(tǒng)開發(fā)的一些看法。
1) 嵌入式開發(fā)對(duì)于提升我們的系統(tǒng)知識(shí)有很大的幫助,尤其是操作系統(tǒng)的知識(shí)。嵌入式系統(tǒng)開發(fā)對(duì)于我們的知識(shí)面要求非常的廣,且要有一定的深度。在做嵌入式開發(fā)之前,我是做Visual C++開發(fā)的,當(dāng)我做過嵌入式開發(fā)后,我就能明白在Windows桌面上雙擊鼠標(biāo)時(shí),后臺(tái)有什么事情發(fā)生了。比如,我能想到后面有一個(gè)Loader將文件加載到內(nèi)存,并最終運(yùn)行程序。雖然,沒有做過嵌入式開發(fā)也能想到這一點(diǎn),但能看到的深度是不同的。
2) 當(dāng)我們對(duì)于操作系統(tǒng)的原理和實(shí)現(xiàn)非常熟悉后,嵌入式系統(tǒng)開發(fā)的工作相對(duì)簡(jiǎn)單。因?yàn)?,操作系統(tǒng)的概念已經(jīng)很成熟了,而現(xiàn)在的嵌入式系統(tǒng)就是將現(xiàn)代操作系統(tǒng)的 技術(shù)運(yùn)用到嵌入式系統(tǒng)。這里說的簡(jiǎn)單,主要是強(qiáng)調(diào)其需求相對(duì)的穩(wěn)定、功能相對(duì)的單一。軟件設(shè)計(jì)真正復(fù)雜是做應(yīng)用,應(yīng)用開發(fā)是我們真正能發(fā)揮設(shè)計(jì)能力的地方。
3) 嵌入式系統(tǒng)開發(fā)經(jīng)驗(yàn)對(duì)于提升我們解決問題的能力有及大的幫助。因?yàn)槲覀兿到y(tǒng)性的知道了軟件是如何被組織在CPU上運(yùn)行的,這對(duì)于我們分析和解決問題很有意義,對(duì)于自己解決復(fù)雜問題的信心也很有幫助。
4) 具備一定的硬件知識(shí)對(duì)于嵌入式開發(fā)大有裨益。比如,我們要明白什么是片選,什么是3態(tài),什么是I/O,如何看時(shí)序圖等等。最好還得會(huì)使用相關(guān)儀器,比如示波器、邏輯分析儀。
02、30+歲入行嵌入式軟件開發(fā)晚不晚???
“對(duì)一般人來說太晚了,就取決于LZ是不是一般人了。如果真想學(xué),我建議從最新的技術(shù)上入手,比如藍(lán)牙5.0、NB-IOT?!?“你的ID已經(jīng)告訴你答案了,不是嗎?” “是有點(diǎn)晚,若做個(gè)熟練的工程師,努力了沒有問題,若涉及深點(diǎn)的東西,有點(diǎn)累?!?“33,不晚,薪酬上,要求不高,性價(jià)比高,一樣有賣點(diǎn)。大公司,去不了,就去小公司混唄?!?“這年齡,不建議轉(zhuǎn)入嵌入式了,除非特別愛好。如果為了生活,不如考慮其他掙錢的門道” “應(yīng)該會(huì)比較困難,現(xiàn)在招人的很多都有年齡要求了,我身邊就有一個(gè)和你差不多的同事,努力是很努力,但是他沒接觸過這行,轉(zhuǎn)行過來的,現(xiàn)在他跟我說做項(xiàng)目感覺力不從心,他也是出于自己的興趣想做這行的,反正就是很辛苦?!?“樓主,我離開行業(yè)13年,還是把技術(shù)撿起來了。看你恒心和方法啦!” “晚,別亂轉(zhuǎn),自己本行都沒玩精通,隨便換行業(yè),年級(jí)這么大了,建議本行繼續(xù)往精通了搞” “33歲了什么賺錢就去搞什么,搞什么不好非得搞這個(gè)” “覺得軟件這塊,真是拼不過年輕人啊,比如公司平時(shí)的加班,比如軌道行業(yè)的出差加班調(diào)試到半夜等等~~~~坑慎入~~” “如果樓主碩士畢業(yè)不建議做這種簡(jiǎn)單的嵌入式設(shè)計(jì),可以上一點(diǎn)有算法的軟件設(shè)計(jì)。當(dāng)然也是嵌入式,只有這樣才能發(fā)揮你碩士的數(shù)學(xué)功底揚(yáng)長(zhǎng)避短。做單片機(jī)嵌入式開發(fā)里面我“感覺”80%的就是做點(diǎn)簡(jiǎn)單的蝶代碼,沒有意義,稍微好一點(diǎn)的可能也就是在單片機(jī)上面跑一個(gè)ROS系統(tǒng)。但是我知道玩單片機(jī)想要上一個(gè)臺(tái)階的話最好是能玩一點(diǎn)算法在里面的。至少能熟練地調(diào)用很多數(shù)學(xué)函數(shù),簡(jiǎn)單來說比如軟件的二階濾波,F(xiàn)FT、帶通等一些基本的函數(shù)。現(xiàn)在嵌入式的圖像識(shí)別是一個(gè)很不錯(cuò)的發(fā)展趨勢(shì),這方面對(duì)數(shù)學(xué)功底也相對(duì)起點(diǎn)比較高,樓主如果單純只是不想自己報(bào)廢了想玩點(diǎn)東西可以考慮這方面,在ARM里面玩玩感覺會(huì)其樂無窮。當(dāng)然我也是紙上談兵,我自己是什么都不懂?!?“個(gè)人認(rèn)為,搞嵌入式太費(fèi)錢,各種模塊板子要買,不然沒現(xiàn)象,程序沒問題,實(shí)際卻不能用,要各種優(yōu)化。還是去干管理吧?!?“個(gè)人覺得,33歲學(xué)習(xí)linux確實(shí)比較晚
(1)如果是特別特別感興趣,可以學(xué)習(xí),
(2)如果回二線覺得找工作難,可以學(xué)習(xí),提高籌碼和機(jī)會(huì)!” 面對(duì)芯片及其相關(guān)的軟件開發(fā)技術(shù)的快速發(fā)展變化,經(jīng)常會(huì)去思考,這些發(fā)展變化的內(nèi)在推動(dòng)力和外在合理性在哪里,這些發(fā)展變化對(duì)我們有哪些啟發(fā)和引導(dǎo),身處旋渦中心應(yīng)該何去何從,才能保證自己不被歷史洪流沖走,才能不斷提升自己的價(jià)值。
03、如何不被歷史洪流沖走。..。
單片機(jī)
單片機(jī)是中文名,對(duì)應(yīng)的英文名稱是“Single Chip Microomputer”,很多人可能奇怪平時(shí)不是都說MCU(Micro Control Unit)嗎?其實(shí)MCU準(zhǔn)確翻譯過來應(yīng)該叫微控制器,現(xiàn)在很多中文書籍都用這個(gè)詞,不用單片機(jī)了。因?yàn)閱纹瑱C(jī)這個(gè)詞是很多年前的概念了,在那個(gè)年代半導(dǎo)體工藝還在起步階段,集成能力很差,往往是CPU一個(gè)芯片,SRAM一個(gè)芯片,F(xiàn)lash一個(gè)芯片,需要中斷的話又得有個(gè)專門處理中斷的芯片,所以一個(gè)完整可用的計(jì)算機(jī)系統(tǒng)是很多個(gè)芯片(Chip)做在一個(gè)PCB板上構(gòu)成的。
單片機(jī)呢?就是在一個(gè)芯片(Chip)上集成了CPU、SRAM、Flash及其他需要模塊,在一個(gè)Chip上實(shí)現(xiàn)一個(gè)微型計(jì)算機(jī)系統(tǒng),所以就叫Single Chip Microcomputer,也就是單片機(jī)了。其實(shí)從這個(gè)角度來講,單片機(jī)這個(gè)詞現(xiàn)在已經(jīng)沒意義了,因?yàn)楝F(xiàn)在的半導(dǎo)體工藝早就很厲害了,現(xiàn)在你買到的所有都是“單片機(jī)”,根本不存在分離式的所謂“多片機(jī)”。而且現(xiàn)代的單片機(jī)不但集成了CPU、SRAM、Flash等微型計(jì)算機(jī)不可少的部件,而且大多集成了很多內(nèi)部外設(shè),如Nand控制器、LCD控制器、串口通信、定時(shí)器、RTC等等,所以現(xiàn)在的單片機(jī)其實(shí)應(yīng)該叫SoC(System on Chip)。
英文是很準(zhǔn)確的。這里有好幾個(gè)詞你可以體會(huì)下各自含義:microcomputer、computer、system、microcontroller。不嚴(yán)格區(qū)分的話這些詞很多時(shí)候可以互相替換和通用的,但是嚴(yán)格說其實(shí)各自有不同代指的。譬如computer,指的就是電腦,你可以理解為就是電腦,譬如筆記本、臺(tái)式機(jī)這些。當(dāng)然很多年前的電腦很龐大很笨重,所以computer就是指的這種有機(jī)箱外殼,有鍵盤鼠標(biāo),很龐大笨重,通用性強(qiáng)的電腦。而microcomputer指的就是單片機(jī)這類東西,它也是一個(gè)獨(dú)立的電腦系統(tǒng),有CPU和內(nèi)存和外設(shè)這些,能跑計(jì)算機(jī)程序。但是他相對(duì)于computer來說體積很小,而且不是通用的而是專用的,所以叫microcomputer。system呢?更傾向于整個(gè)系統(tǒng),也就是說system=microcomputer+各種外設(shè)。簡(jiǎn)單理解就是,當(dāng)串口、LCD控制器等模塊進(jìn)入了Chip內(nèi)部時(shí),整個(gè)microcomputer就成為system了。所以其實(shí)system才是更有意義,更適合現(xiàn)代單片機(jī)芯片的一個(gè)名字。所以現(xiàn)在我們都把芯片叫SoC,這個(gè)名字更有價(jià)值。那microcontroller呢?現(xiàn)在很多單片機(jī)廠商都把自己的單片機(jī)叫microcontroller(微控制器),其實(shí)我個(gè)人理解,覺得microcontroller的重點(diǎn)在于controller,也就是說他們想強(qiáng)調(diào)這個(gè)chip中集成的system是一個(gè)controller,擅長(zhǎng)控制。而不是一個(gè)DSP(擅長(zhǎng)運(yùn)算)。
嵌入式
嵌入式的全稱是嵌入式系統(tǒng),英文是Embeded system,所以可以看出嵌入式是一個(gè)system。為什么叫嵌入式呢?這里的嵌入指的是我們把這個(gè)system(硬件上表現(xiàn)為一個(gè)Chip)嵌入到某個(gè)設(shè)備中去。譬如冰箱的板卡上的芯片就是一個(gè)嵌入到冰箱中的system,負(fù)責(zé)控制用戶按鍵、冰箱照明燈、制冷系統(tǒng)等??梢钥闯?,嵌入式系統(tǒng)這個(gè)名字主要是從芯片在使用時(shí)的組織形態(tài)來命名的。所以從這個(gè)角度講,只要是被嵌入到設(shè)備中的芯片都可以被叫做嵌入式系統(tǒng)。 那這個(gè)范圍太寬了,說真的你很難找到不屬于嵌入式的system······所以我經(jīng)常覺得嵌入式這個(gè)名詞根本是廢話,根本沒意義。好在這個(gè)理解只是廣義上的嵌入式的定義,但是我們平時(shí)講嵌入式大多時(shí)候是從狹義上理解的。
狹義上講,嵌入式是為了區(qū)別于單片機(jī)。我們經(jīng)常把芯片中不帶MMU(memory management unit)從而不支持虛擬地址,只能跑裸機(jī)或RTOS(典型如ucos、華為LiteOS、RT-Thread、freertos等)的system叫單片機(jī)(典型如STM32、NXP LPC系列、新的NXP imxRT1052系列等),而把芯片自帶MMU可以支持虛擬地址,能夠跑Linux、Vxworks、WinCE、Android這樣的操作系統(tǒng)的system叫嵌入式。所以linux WinCE等也常被叫做嵌入式操作系統(tǒng),就是這么回事。你仔細(xì)回顧下,其實(shí)大部分人在講單片機(jī)和嵌入式時(shí)都是從狹義角度出發(fā)的,并非廣義。
單片機(jī)的技術(shù)和市場(chǎng)狀況
單片機(jī)是出貨量最大的一類計(jì)算機(jī)。這個(gè)很好理解,因?yàn)閱纹瑱C(jī)用途太廣泛了,所有家電內(nèi)置的控制系統(tǒng)幾乎都是單片機(jī)的,這個(gè)數(shù)目就很驚人了。還有各種公共設(shè)施,工廠自動(dòng)化設(shè)備等幾乎也都是單片機(jī)控制的。單片機(jī)的廠商和品類也是非常多,我下面列舉幾類常用的。 · 8位和4位機(jī)。這類單片機(jī)性能低配置低,但是優(yōu)勢(shì)是價(jià)格便宜。所以很多低端家電產(chǎn)品都會(huì)用到,小家電是這類單片機(jī)最大的市場(chǎng)。為了降低成本,這類單片機(jī)很多只能用匯編編程(當(dāng)然近幾年很多也提供了C編譯器),很多芯片采用bounding封裝(就是芯片內(nèi)核直接貼在PCB上然后用黑乎乎硬膠黏住,大家玩過LCD1602的看那后面那個(gè)圓盤型黑色的就是)。做這類產(chǎn)品的以前都是臺(tái)灣一些小芯片廠商。這些年中國(guó)大陸也涌現(xiàn)了很多這類芯片廠商,這些單片機(jī)行業(yè)大多對(duì)標(biāo)某個(gè)具體應(yīng)用領(lǐng)域,對(duì)行業(yè)需求很熟悉,直接推出適用這個(gè)行業(yè)的解決方案。外行的人可能根本都沒聽說過這種單片機(jī)的型號(hào)和相關(guān)信息??偟膩碚f,這屬于比較低端的行業(yè),不太建議大家學(xué)習(xí)和進(jìn)入。尤其現(xiàn)在中國(guó)在搞產(chǎn)業(yè)升級(jí),落后的傳統(tǒng)家電產(chǎn)品不斷降價(jià)還賣不出去,相反各種高端功能和外觀的“產(chǎn)業(yè)升級(jí)”型家電產(chǎn)品利潤(rùn)很高。所以這種適用于傳統(tǒng)老舊電子產(chǎn)品的芯片和技術(shù)其實(shí)并不值得去投入。
· 51單片機(jī)。其實(shí)51單片機(jī)也是8位機(jī),之所以單獨(dú)拿出來說是因?yàn)?1單片機(jī)實(shí)在太出名了。實(shí)際上當(dāng)年單片機(jī)百家爭(zhēng)鳴的時(shí)候(大約1980年代吧)51單片機(jī)只是其中一種,還有很多其他很厲害的,可惜都被時(shí)間給雨打風(fēng)吹去了。51單片機(jī)之所以出名并活到現(xiàn)在,是因?yàn)镮ntel后來開放了51內(nèi)核的版權(quán),所以很多公司很多人可以毫無顧忌的使用它而不擔(dān)心付費(fèi)或版權(quán)風(fēng)險(xiǎn)。實(shí)際上到了現(xiàn)在(2018年),51單片機(jī)已經(jīng)是很老很沒有技術(shù)優(yōu)勢(shì)的解決方案了,但是為什么還在大量使用?主要有以下幾個(gè)原因:一是大量存量項(xiàng)目和存量開發(fā)者,這些人很熟悉51單片機(jī),甚至很多老工程師可能只會(huì)51單片機(jī),很多老的項(xiàng)目也不可能再去重新開發(fā)所以沿用了51單片機(jī)。二是51單片機(jī)也夠便宜,很多對(duì)性能沒有過多要求的產(chǎn)品干脆就用51也挺好。三是51內(nèi)核開放,所以很多需要內(nèi)置單片機(jī)核的SoC(譬如很多電容觸摸屏芯片,很多指紋識(shí)別芯片等)就會(huì)選擇用51核,不要錢還夠用嘛,不選這個(gè)選誰(shuí)。很多同學(xué)問我還要不要學(xué)51單片機(jī)?我認(rèn)為還是要學(xué)。一個(gè)原因是51單片機(jī)的開發(fā)用到的技術(shù)技能在開發(fā)別的單片機(jī)時(shí)照樣有用,所以學(xué)了51將來再學(xué)其他的也會(huì)快很多,時(shí)間不會(huì)白花的。另一個(gè)原因是確實(shí)有時(shí)候?qū)嶋H開發(fā)也會(huì)遇到用到51單片機(jī)的,所以學(xué)會(huì)了也算是個(gè)拿得出手的技能。所以如果你要學(xué)習(xí)單片機(jī)開發(fā),從51單片機(jī)入手絕對(duì)不會(huì)錯(cuò)。但是要記得不要沉迷于51了,要迅速學(xué)會(huì)51單片機(jī)后,迅速繼續(xù)學(xué)習(xí)更現(xiàn)代更實(shí)用的其他單片機(jī)(譬如stm32)。很多人學(xué)會(huì)51后就不動(dòng)了,這就好像幼兒園畢業(yè)就不繼續(xù)讀書了一樣,是不對(duì)的。
· STM32單片機(jī)。終于到了STM32這個(gè)當(dāng)紅辣子雞了,ST于2007年發(fā)布了第一款STM32,至今已經(jīng)11年了。STM32是ARM Cortex-M內(nèi)核的單片機(jī),實(shí)際上同樣使用ARM Cortex-M系列內(nèi)核的單片機(jī)還有很多(譬如NXP的LPC系列,原Freescale的K60系列,臺(tái)灣新唐的M051系列,國(guó)內(nèi)如兆易創(chuàng)新的GD32系列等),STM32只是其中的代表作而已。ARM這些年風(fēng)頭很強(qiáng),在application級(jí)別的SoC中大勝Intel,現(xiàn)在手機(jī)行業(yè)的芯片都被ARM吃掉了,MIPS之類的更是被壓的生不如死。在單片機(jī)領(lǐng)域,ARM的Cortex-M系列(M0、M3、M4、M7)也是大獲全勝,很多半導(dǎo)體廠商都放棄了自己原來的架構(gòu)轉(zhuǎn)而做ARM內(nèi)核的單片機(jī)了。
怎么說呢,個(gè)人覺得ARM內(nèi)核的單片機(jī)很適合當(dāng)前時(shí)代,尤其STM32這種,不管硬件配置還是開發(fā)工具都深得市場(chǎng)認(rèn)可,普及度越來越高。強(qiáng)烈建議大學(xué)學(xué)單片機(jī)就學(xué)STM32,會(huì)玩STM32很有價(jià)值。至于GD32之類國(guó)產(chǎn)的類似STM32的單片機(jī),我認(rèn)為后面會(huì)越來越強(qiáng),甚至?xí)鲗?dǎo)市場(chǎng)把洋品牌趕出中國(guó)。這些芯片的開發(fā)方式也很類同于STM32,所以會(huì)了STM32開發(fā)很容易切過去,不用擔(dān)心。
· 其他單片機(jī)。我指的是PIC、ATmega、MSP430、STM8之類的,這些不是很熟悉所以不予詳細(xì)論述??偟膩碚f,這些單片機(jī)性價(jià)比都不錯(cuò),在各自領(lǐng)域都有一定競(jìng)爭(zhēng)力,但是還是不如STM32使用領(lǐng)域?qū)拸V。所以除非是公司研發(fā)用到,否則不建議主動(dòng)學(xué)習(xí)。 · 高性能高價(jià)格單片機(jī)。這里我特指的是如STM32F7、STM32H7、NXP imxRT1052之類的單片機(jī)。這類雖然是單片機(jī),但是性能比一般單片機(jī)強(qiáng)勁很多,外設(shè)也復(fù)雜很多,甚至需要外接SDRAM來提供更大內(nèi)存,外接SLC Nand或Spiflash來提供存儲(chǔ)。同時(shí)從價(jià)格角度講這些單片機(jī)大多在人民幣30元以上,甚至高達(dá)100多元。這些真的是單片機(jī)中的戰(zhàn)斗機(jī),價(jià)格都能嚇?biāo)廊肆恕?duì)于這類單片機(jī),我個(gè)人其實(shí)很不看好。其實(shí)寫這篇長(zhǎng)文,就是想解釋我為什么不看好這類單片機(jī)。感興趣的同學(xué)可以繼續(xù)看下文分析。
嵌入式的技術(shù)和市場(chǎng)狀況
· 嵌入式領(lǐng)域目前最火的就是ARM+linux和ARM+android。
芯片都是基于ARM的,低端的有ARM9、ARM11,高端的有Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A53、Cortex-A57等。從單核心到雙核心、四核心、八核心都有。廠商也一大堆,國(guó)產(chǎn)進(jìn)口臺(tái)產(chǎn)等都有。覆蓋面也廣,消費(fèi)級(jí)、工業(yè)級(jí)、車規(guī)級(jí)都有。 · 嵌入式級(jí)別的ARM因?yàn)橛蠱MU所以可以很好的跑復(fù)雜OS,因此雖然芯片本身也可以裸機(jī)運(yùn)行,但是基本沒有人用這類芯片來跑裸機(jī)或者RTOS的。都會(huì)上操作系統(tǒng)。簡(jiǎn)單說,如果產(chǎn)品不需要華麗美觀的人機(jī)界面就上linux(譬如路由器、網(wǎng)絡(luò)攝像機(jī)),如果需要人機(jī)界面但是界面簡(jiǎn)單注重功能和穩(wěn)定性,那就上linux+QT(譬如工控HMI、電動(dòng)車充電樁、停車場(chǎng)顯示),如果產(chǎn)品很注重人機(jī)交互的用戶體驗(yàn),那就上Android(譬如智能手機(jī)、智能電視機(jī)、游戲機(jī)等)。 總的來說,嵌入式系統(tǒng)的復(fù)雜性高、開發(fā)難度大、學(xué)習(xí)曲線長(zhǎng)。因?yàn)檐浖系膹?fù)雜性,導(dǎo)致出bug的可能性大。一旦出bug查找起來也更加需要技巧和經(jīng)驗(yàn)。所以很多公司用嵌入式linux或android做產(chǎn)品問題很多,這一方面和開發(fā)者的技術(shù)能力有關(guān),另一方面和公司不能花時(shí)間和成本去潛心把產(chǎn)品做穩(wěn)定做成熟有關(guān)。
嵌入式和單片機(jī)的真正區(qū)別
其實(shí)分析到這里,大家也知道了嵌入式和單片機(jī)的真正區(qū)別,那就是有沒有l(wèi)inux或android這類復(fù)雜操作系統(tǒng)。 單片機(jī)不是裸奔就是RTOS,其實(shí)玩過RTOS和linux的同學(xué)都知道,RTOS雖然也叫操作系統(tǒng),但是和linux這種根本不是一個(gè)級(jí)別。差遠(yuǎn)了,更不用說android了,android里隨便拿出來一個(gè)模塊代碼量都比一個(gè)完整的RTOS都龐大,都要復(fù)雜。所以有沒有l(wèi)inux/android這類復(fù)雜OS對(duì)開發(fā)來說真的很不一樣。 譬如從C語(yǔ)言角度來講,我的《嵌入式linux核心課程》第4部分《4.C語(yǔ)言深度解析》這個(gè)課程,就是專門針對(duì)嵌入式linux開發(fā)中C語(yǔ)言功力不足的人推出的。很多做了多年單片機(jī)的同學(xué)看了后都感慨,真的是不做linux不知道C語(yǔ)言水深。結(jié)構(gòu)體和指針這些元素在單片機(jī)編程中完全體現(xiàn)不出來魅力,但是在linux內(nèi)核中卻得到了完美的發(fā)揮和釋放。不去真正研究,實(shí)在很難體會(huì)出那種美感和震撼。
嵌入式和單片機(jī)的交集
嵌入式和單片機(jī)有沒有交集呢?這里說的交集意思是:某些產(chǎn)品既可以用嵌入式來解決,也可以用單片機(jī)來解決。 以前是沒有的。你想想一般單片機(jī)幾塊錢十幾塊錢,而嵌入式系統(tǒng)SoC加上DDR和Flash至少幾十塊,怎么可能有交集。就算單片機(jī)能做的事你嵌入式也能做,但是我十幾塊錢能搞定的工作憑什么要花幾十塊上嵌入式呢?所以以前這2者沒交集。根本不是一個(gè)檔次范圍內(nèi)的事兒。 但是近兩年情況發(fā)生了變化。首先是很多高端單片機(jī)的配置和價(jià)格越來越高。譬如2017年10月發(fā)布的NXP imxRT1052系列單片機(jī),號(hào)稱跨界處理器。為什么叫跨界?跨的是哪兩界? 我們知道單片機(jī)嘛,就要單芯片提供整個(gè)system,簡(jiǎn)單說至少cpu、sram、flash這三大件不能少,要不然根本無法獨(dú)立運(yùn)行嘛。所以你看不管是51單片機(jī)還是STM32都是內(nèi)部有CPU,有SRAM,有Flash的,這就是典型的單片機(jī)。而嵌入式SoC不同,譬如S5PV210內(nèi)部只有CPU和少量SRAM,它要正常工作需要外部集成DDR SDRAM和Flash(EMMC)。所以嵌入式的system不能在一個(gè)chip上,一般典型的嵌入式系統(tǒng)的system由一塊核心板構(gòu)成,這塊核心板上集成了SoC、DDR SDRAM、Flash、電源模塊等,這叫嵌入式系統(tǒng)。而所謂跨界處理器,跨的就是單片機(jī)和嵌入式這兩界。這個(gè)imxRT1052內(nèi)部集成了CPU和SRAM,但是沒有Flash,它需要外部提供獨(dú)立的Flash芯片才能組成一個(gè)system。所以這東西既不是典型的單片機(jī)也不是典型的嵌入式,但是既像單片機(jī),又像嵌入式,所以NXP說這個(gè)是跨界處理器。甭管好不好用,名字聽起來酷酷的。 順便多說一句,NXP為什么這么設(shè)計(jì)?其實(shí)是因?yàn)閱纹瑱C(jī)內(nèi)置Flash都很貴,imxRT1052為什么能比同樣性能的STM32便宜那么多,主要原因就是因?yàn)樗麤]有內(nèi)置Flash。所以很多人都說ST落后于NXP了,其實(shí)沒有。只能說NXP這個(gè)設(shè)計(jì)在單片機(jī)界是一種創(chuàng)新,對(duì)比來看顯得STM32F7、STM32H7性價(jià)比太差了。不過實(shí)話實(shí)說,STM32的F7和H7確實(shí)性價(jià)比很垃圾,我都不知道就一個(gè)單片機(jī)賣一百多是準(zhǔn)備上天?誰(shuí)給ST的勇氣這么定價(jià)的,梁靜茹嗎? 算了,懶得吐槽F7和H7了。就說這個(gè)跨界處理器imxRT1052吧,這東西主頻有600MHz,有消費(fèi)級(jí)和工業(yè)級(jí),帶各種外設(shè)(反正你能用到的基本都有了),可以帶最大分辨率1024*768的TFT LCD(當(dāng)然了需要外接SDRAM作為顯存)。這東西相對(duì)于普通單片機(jī)來說就是神一般的存在啊,一般玩單片機(jī)的看到這個(gè)數(shù)據(jù)嚇得直接就跪下叫爸爸了。再說價(jià)格,這東西官方公布的批量?jī)r(jià)格是人民幣30元左右。想一想感覺性價(jià)比爆棚啊。其實(shí)STM32也沒那么弱,F(xiàn)7和H7的主頻雖然沒有600MHz那么變態(tài),但是H7的性能整體比RT1052并沒有太大劣勢(shì)。就算不叫爸爸一聲大哥總逃不了。之所以F7和H7沒掀起大浪關(guān)鍵還是價(jià)格太嚇人了,一般人聽說100多直接心里罵娘轉(zhuǎn)身走人了,根本不想了解你的性能。而imxRT1052的30元確實(shí)很誘人,聽起來似乎真的是高性能低價(jià)格了,很多人甚至據(jù)此判斷NXP要“干死”ST了。
跨界處理器的尷尬
高性能跨界處理器初看似乎很不錯(cuò),實(shí)際上并沒有那么容易成功。原因就在于這種高性能單片機(jī)實(shí)際上和低性能高性價(jià)比的嵌入式linux解決方案比并沒有優(yōu)勢(shì)。 是的,很多人覺得600M主頻的單片機(jī)才30塊很便宜很厲害。那是因?yàn)槟悴皇煜で度胧降慕鉀Q方案。實(shí)際上imxRT1052單芯片是不能很好工作的,他要實(shí)現(xiàn)高性能至少需要外置Flash和SDRAM,就算只是1Gbit的SLC Nand和32MB 的SDRAM,再加上RT1052BOM成本也在50元左右了。再加上RT1052雖然號(hào)稱批量30元,但是實(shí)際上小批量拿貨價(jià)都在40-50元,所以目前市場(chǎng)上RT1052的核心板售價(jià)都在120-150元之間了。這個(gè)價(jià)格其實(shí)并不便宜,有很多嵌入式linux的解決方案都比這個(gè)性價(jià)比高。 譬如NXP的imx6ul,內(nèi)置Cortex-A7單核心,最高主頻1.2GHz,也是工業(yè)級(jí),各種你能想到的外設(shè)都有了。標(biāo)配256MB SLC Nand和256MB DDR的核心板,市場(chǎng)最低售價(jià)119元,比RT1052還低一些。 實(shí)際上還有性價(jià)比更高的方案,譬如我們深創(chuàng)客推出的NUC972牛頓板中使用的新唐NUC972方案,內(nèi)置64MB DDR,外部配置1Gbit SLC Nand。主板批量可以做到100元內(nèi)。性價(jià)比完勝RT1052這類高性能單片機(jī)。 很多人可能會(huì)說,我不會(huì)嵌入式linux開發(fā),我只會(huì)單片機(jī)開發(fā)啊。所以你linux的方案性價(jià)比再高跟我沒關(guān)系,單片機(jī)的才跟我有關(guān)系。我想說這絕對(duì)是一種誤解,百分百的誤解。為什么? 單片機(jī)就三個(gè)字,你別覺得叫單片機(jī)的都是一種東西。單片機(jī)和單片機(jī)是不一樣的,你覺得主頻600MHz的單片機(jī)帶1024*768分辨率的TFT LCD,它的開發(fā)方式和難度會(huì)和10塊錢不到的STM32F103一樣?軟件開發(fā)是跟著硬件走的,什么樣性能的硬件就應(yīng)該配套什么樣的軟件開發(fā)方式和相應(yīng)資源,也會(huì)要求開發(fā)者具備某種相應(yīng)素質(zhì)。所以不要覺得都是單片機(jī)就親切,就能玩。實(shí)際上要把高端單片機(jī)完全發(fā)揮性能做出好看的GUI并且用到項(xiàng)目中解決掉所有的BUG并不是一件容易的事情。
最后
今天談的東西都比較淺,主要是講了下單片機(jī)和嵌入式系統(tǒng)的由來和差異。引出了高端單片機(jī)(STM32H7、imxRT1052等)和高性價(jià)比嵌入式linux解決方案的的一個(gè)對(duì)比。主要是希望拋給大家一個(gè)思考點(diǎn),引導(dǎo)大家去思考如何分析和評(píng)價(jià)一款芯片方案,從而在做項(xiàng)目時(shí)能夠更好的選型適合自己的芯片方案。 總的來說,我的觀點(diǎn)是:能用幾塊十幾塊的單片機(jī)就用單片機(jī),如果這些高性價(jià)比的單片機(jī)不能滿足要求非要上幾十塊的高性能單片機(jī),那你確實(shí)應(yīng)該考慮下是否應(yīng)該一步到位上高性價(jià)比的嵌入式linux解決方案。 很多人擔(dān)心linux不會(huì)開發(fā),其實(shí)不應(yīng)該這么考慮。真正沉下去做項(xiàng)目,你會(huì)發(fā)現(xiàn)用嵌入式linux并沒有那么難,而且高端單片機(jī)加上RTOS和一堆框架、協(xié)議棧之后也不簡(jiǎn)單。出了問題也不好找。而且嵌入式linux經(jīng)過多年積累,其方案穩(wěn)定性大多都不錯(cuò)。而高端單片機(jī)的配套R(shí)TOS和框架協(xié)議棧等中間件往往處在發(fā)展初期,往往bug很多。因此,建議大家值得投入時(shí)間去學(xué)習(xí)嵌入式linux軟件開發(fā)的技能。
04、迷茫期該怎么辦?
很多人跟我一樣,或者比我還差點(diǎn)呢 即使在工作穩(wěn)定期的人,也會(huì)迷茫,因?yàn)門a總會(huì)想,我就這樣了嗎?難道我要在這一直不變?太可怕了,但是也有很多人可以就這樣混混而過,因?yàn)檫x擇跨出任何一步具有不確定因素的行動(dòng),都需要勇氣和沖動(dòng),這些很多人就提不起勁,即使是剛剛大學(xué)畢業(yè)的94后,他們堅(jiān)持著下班玩游戲、看劇,周末吃吃喝喝。 其實(shí)我也覺得,如果沒有跟一個(gè)優(yōu)秀的人,或者接觸一批優(yōu)秀的公眾號(hào),我也不會(huì)改變太大。但是因?yàn)槲矣錾狭?,一個(gè)一直很努力的男朋友,他在學(xué)習(xí)上和工作上甚至做事上,都成為我的老師和榜樣,我害怕自己跟不上他的步伐,所以也只能努力了。 因此,距離會(huì)慢慢拉開。
錯(cuò)開負(fù)面圈,遠(yuǎn)離負(fù)面人,拒絕負(fù)面語(yǔ)
因?yàn)榻趯?duì)在職公司失望,我們員工內(nèi)部已經(jīng)是負(fù)面情緒高漲。也因?yàn)榻谠诼牎陡咝苷J(rèn)識(shí)的7個(gè)習(xí)慣》,無意間留意其中說到的影響圈和關(guān)注圈。他說:我們?nèi)说淖⒁饬驹谶@兩個(gè)圈內(nèi),我們受影響還是影響他人,關(guān)注自己還是關(guān)注了別人?!這樣自問一下,發(fā)現(xiàn)近期自己也被潛移默化負(fù)能量增多,在工作中也逐漸影響了心情。這是我覺得很有必要改善的。 而且,對(duì)于離職這個(gè)行為,我這樣定義:如果你在一個(gè)既不能提高你的生活品質(zhì)和對(duì)未來的展望,那就走吧。
學(xué)會(huì)總結(jié),記得反思
怎么說,我逐漸覺得,這屬于刻意練習(xí)的一種,就是對(duì)于當(dāng)下在做的事,會(huì)下意識(shí)的想有沒有意義?能花在這里的時(shí)間是多少?比如這些天,我居然喜歡上《火影忍者》,這對(duì)于90后,在他們眼里這是90后的童年吧,我居然現(xiàn)在才喜歡看?!但是因?yàn)楝F(xiàn)在在學(xué)習(xí)測(cè)試和C,兼顧還看看其他知識(shí)的時(shí)候,我不能花太多時(shí)間用在追劇,所以,當(dāng)我打來播放器時(shí),我會(huì)下意識(shí)的提醒自己:能幾節(jié),什么時(shí)間必須關(guān)掉,做正常的學(xué)習(xí)或者日常事務(wù)。
請(qǐng)相信自己,堅(jiān)持下去
最近一段時(shí)間在大量投簡(jiǎn)歷時(shí),還是石沉大海般毫無動(dòng)靜,離職時(shí)間也快到了。不過,目前狀態(tài)還很好,依然堅(jiān)定自己的選擇,更艱難的時(shí)刻還沒來,自己暫時(shí)不具備開啟好運(yùn)的時(shí)刻?。?/p>
最后,我想說的是嵌入式系統(tǒng)開發(fā)一旦我們達(dá)到了一定的水平后,其實(shí)很簡(jiǎn)單,就是如何去看CPU和相關(guān)芯片的Datasheet!
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44622瀏覽量
638536 -
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210391 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6892瀏覽量
123742 -
嵌入式工程師
+關(guān)注
關(guān)注
1文章
37瀏覽量
16252
原文標(biāo)題:嵌入式工程師,怎么不被歷史洪流沖走?
文章出處:【微信號(hào):WW_CGQJS,微信公眾號(hào):傳感器技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論