如何學(xué)習(xí)嵌入式?
發(fā)布時(shí)間:2023-10-24 15:26:15
什么是嵌入式?
嵌入式即嵌入式系統(tǒng),IEEE(美國(guó)電氣和電子工程師協(xié)會(huì))對(duì)其定義是用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置,是一種專用的計(jì)算機(jī)系統(tǒng)。
國(guó)內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
從應(yīng)用對(duì)象上加以定義來(lái)說(shuō),嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機(jī)械等附屬裝置。嵌入式系統(tǒng)作為裝置或設(shè)備的一部分,它是一個(gè)控制程序存儲(chǔ)在ROM中的嵌入式處理器控制板。
事實(shí)上,所有帶有數(shù)字接口的設(shè)備,如手表、微波爐、錄像機(jī)、汽車等,都使用嵌入式系統(tǒng),有些嵌入式系統(tǒng)還包含操作系統(tǒng),但大多數(shù)嵌入式系統(tǒng)都是由單個(gè)程序?qū)崿F(xiàn)整個(gè)控制邏輯。
嵌入式方向
嵌入式工程師需要掌握的內(nèi)容非常廣泛,主要包括嵌入式軟件、嵌入式硬件、以及相關(guān)行業(yè)、產(chǎn)品的專業(yè)知識(shí)。作為嵌入式初學(xué)者,我們不可能,也沒(méi)有那么多精力把所有的知識(shí)到搞的很精通,我們要學(xué)會(huì)抓住重點(diǎn),學(xué)會(huì)取舍,達(dá)到一通百通,事半功倍的學(xué)習(xí)效果。
首先嵌入式技術(shù)主要分為嵌入式軟件和嵌入式硬件兩大方向。
嵌入式硬件方向
嵌入式硬件工程師主要工作職責(zé)是為產(chǎn)品設(shè)計(jì)硬件電路原理圖,設(shè)計(jì)硬件PCB板,選擇合適的元器件,焊接調(diào)試硬件電路板,保證硬件電路板的可靠性、穩(wěn)定性和抗干擾能力。
因?yàn)楝F(xiàn)在集成電路發(fā)展迅速,大部分集成電路廠商都會(huì)提供參考電路,所以硬件電路原理圖的設(shè)計(jì)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,硬件工程師工作的含金量主要體現(xiàn)在產(chǎn)品的可靠性和穩(wěn)定性設(shè)計(jì)、以及電磁兼容設(shè)計(jì),這才是硬件設(shè)計(jì)工程師的含金量所在。
要成為一個(gè)資深的嵌入式工程師相當(dāng)難,一方面要有非常扎實(shí)的理論知識(shí),同時(shí)也要有相當(dāng)?shù)哪欠N大型的、高頻CPU、多層PCB板的設(shè)計(jì)經(jīng)驗(yàn)。
嵌入式硬件工程師要學(xué)的課程主要有模擬電路設(shè)計(jì)、數(shù)字電路設(shè)計(jì)、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設(shè)計(jì)和分析。
嵌入式軟件方向
嵌入式軟件工程師的職責(zé)主要是根據(jù)產(chǎn)品的功能需求設(shè)計(jì)好軟件,讓硬件工作起來(lái)。
嵌入式電子產(chǎn)品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 幾大部分組成,而軟件就千差萬(wàn)別了。產(chǎn)品的具體功能都是由軟件來(lái)實(shí)現(xiàn)的,一般來(lái)講一個(gè)產(chǎn)品的實(shí)現(xiàn),軟件設(shè)計(jì)的工作量是硬件設(shè)計(jì)的4 ~ 5倍。
所以一般情況下,一個(gè)公司的軟件工程師數(shù)量是硬件硬件工程師的4~5倍,嵌入式軟件工程師需求比硬件工程師大很多,同時(shí)跟硬件工程師相比,嵌入式軟件工程師學(xué)起來(lái)相對(duì)容易些,所以這里我重點(diǎn)和大家談一下嵌入式軟件工程的學(xué)習(xí)路線。
學(xué)習(xí)嵌入式需要那些內(nèi)容?
C語(yǔ)言
C語(yǔ)言是嵌入式的重中之重,Linux操作系統(tǒng)就是用C實(shí)現(xiàn)的,包括安卓系統(tǒng)的底層也是C語(yǔ)言實(shí)現(xiàn)的,基礎(chǔ)不牢,地動(dòng)山搖,一定要打好基礎(chǔ)。
C語(yǔ)言學(xué)習(xí)過(guò)程中重點(diǎn)要放在指針,結(jié)構(gòu)體,文件的處理,數(shù)組等。在學(xué)習(xí)過(guò)程中,一定要多寫代碼,代碼光看是看不會(huì)的。
遇到錯(cuò)誤不要怕麻煩,善于使用搜索工具,百度,google,stack overflow。要知道,你遇到的問(wèn)題別人肯定也會(huì)遇到過(guò),一般在網(wǎng)上一搜就會(huì)有答案。
最后,要多調(diào)試程序,熟悉調(diào)試的過(guò)程。程序三分寫,七分調(diào),沒(méi)有誰(shuí)的程序是可以一遍寫對(duì)的。而且,多調(diào)試程序也可以讓我們理解程序具體是如何執(zhí)行的。
基本的硬件原理
嵌入式肯定要和硬件打交道的。如果做嵌入式的應(yīng)用層的話,可能和硬件接觸的少一點(diǎn)。但是很多企業(yè)在面試的時(shí)候,也會(huì)問(wèn)一些基本的硬件知識(shí)。
比如,我同學(xué)在面試聯(lián)發(fā)科的C++工程師的時(shí)候,就問(wèn)到了他很多關(guān)于硬件的知識(shí)(中斷是什么,輪詢是什么,二者有什么區(qū)別,一個(gè)基本嵌入式系統(tǒng)有什么構(gòu)成等),所以說(shuō)硬件知識(shí)知道越多越好,就算做應(yīng)用層,一些最基本的也要知道。
如果是打算做嵌入式底層的話,對(duì)于硬件知識(shí)的掌握要求就比較高了。比如,LCD是如何顯示的,IIC協(xié)議/SPI協(xié)議是什么,如何收發(fā)數(shù)據(jù),不同設(shè)備對(duì)于IIC的速度有什么要求,IIC協(xié)議上拉電阻一般是多少等等。只有明白了硬件原理,在看芯片手冊(cè)的時(shí)候才能明白如何去配置各個(gè)寄存器。
此外,常用的設(shè)備儀器的使用能掌握就更好了,和硬件工程師扯皮的時(shí)候會(huì)用到。比如,萬(wàn)用表,示波器,邏輯分析儀等。不會(huì)也沒(méi)關(guān)系,這部分不是必須的。
數(shù)據(jù)結(jié)構(gòu)與算法
這部分是程序員的必修課。在各大廠的秋招春招中,筆試面試都是必考的。常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)如鏈表,二叉樹,堆,隊(duì)列,常見(jiàn)排序算法及其改進(jìn)(快排,歸并,冒泡,插入)等都是要掌握的。如果是為了找工作,這部分內(nèi)容有很多是要能達(dá)到手寫的目的。(相關(guān)內(nèi)容見(jiàn)我整理的嵌入式軟件工程師筆試面試指南 )
雖然嵌入式對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的要求不像傳統(tǒng)互聯(lián)網(wǎng)那么高,而且,這些數(shù)據(jù)結(jié)構(gòu)在以后的工作中不一定可以用到,但是一些基本的我們還是要知道的。
像Linux內(nèi)核中就用到了很多的鏈表,二叉樹等。掌握這部分內(nèi)容對(duì)于我們以后跳槽,深入研究操作系統(tǒng)都有很大的幫助。
計(jì)算機(jī)基礎(chǔ)
這部分直接決定了我們以后是否能走的更遠(yuǎn),像操作系統(tǒng)的基本概念,計(jì)算機(jī)組成原理的內(nèi)容都是需要我們?nèi)チ私獾?。比如自旋鎖,信號(hào)量,阻塞與非阻塞等。
學(xué)習(xí)任何技術(shù)一定要學(xué)到這門技術(shù)的邊界,對(duì)于嵌入式來(lái)講,它的邊界就是匯編。匯編語(yǔ)言不要求會(huì)寫,但是一定要能看懂(其實(shí)就是Arm指令集)。在很多情況下,看反匯編文件對(duì)于bug的調(diào)試會(huì)更方便。