日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > strongerHuang
[導(dǎo)讀]關(guān)注星標(biāo)公眾號,不錯過精彩內(nèi)容作者|鯨魚本文分享給那些學(xué)習(xí)嵌入式猶豫不決的同學(xué)。小李讀大學(xué)時學(xué)的是機械,畢業(yè)后從事電梯調(diào)試工作。他覺得這份工作門檻低,沒有發(fā)展空間,說白了就是“修電梯”的,又不是“研發(fā)電梯”。于是他問我,需要學(xué)些什么才能找到一份嵌入式軟件開發(fā)的工作?我想,在決定“...




作者 | 鯨魚



本文分享給那些學(xué)習(xí)嵌入式猶豫不決的同學(xué)。


小李讀大學(xué)時學(xué)的是機械,畢業(yè)后從事電梯調(diào)試工作。他覺得這份工作門檻低,沒有發(fā)展空間,說白了就是“修電梯”的,又不是“研發(fā)電梯”。
于是他問我,需要學(xué)些什么才能找到一份嵌入式軟件開發(fā)的工作?
我想,在決定“走進”嵌入式軟件開發(fā)之前,不妨先“走近”,多方面了解一下嵌入式軟件,然后再決定要不要轉(zhuǎn)過來。
什么是嵌入式軟件?


嵌入式軟件,就是運行在嵌入式系統(tǒng)上的軟件,而不是運行在通用PC上。嵌入式系統(tǒng)一般用在專用設(shè)備上。




這些專用設(shè)備通常硬件資源(如處理器、存儲器等)非常有限,并且對成本敏感,有的還要求實時響應(yīng)。




像手機、可穿戴設(shè)備、數(shù)字相機、機頂盒、游戲機、智能玩具、數(shù)控設(shè)備或儀表、汽車電子、醫(yī)療儀器、航天航空設(shè)備等都是典型的嵌入式系統(tǒng)。



嵌入式系統(tǒng)的分層


一般來說,嵌入式系統(tǒng)從下至上可分為硬件層,驅(qū)動層,系統(tǒng)層,應(yīng)用層。對于簡單的嵌入式系統(tǒng),可以沒有系統(tǒng)層。



對于硬件層,一般是硬件工程師來做。要求熟悉模擬電路、數(shù)字電路及各種元器件,熟悉各種處理器及外圍設(shè)備,會設(shè)計PCB,有的要求懂FPGA開發(fā)。由于本文討論的是軟件,我對這一塊也不熟悉,所以不敢妄言。



對于驅(qū)動層,要求熟悉相關(guān)處理器體系結(jié)構(gòu),熟悉bootloader過程,熟悉中斷過程,能讀懂硬件原理圖、時序圖,C語言熟練,能根據(jù)芯片手冊編寫出外圍設(shè)備的驅(qū)動。如果涉及到通信設(shè)備(比如WIFI芯片),還要熟練掌握通信協(xié)議原理。



對于系統(tǒng)層,一般都是移植,很少有人自己寫操作系統(tǒng)。要求熟悉操作系統(tǒng)原理,比如線程調(diào)度,內(nèi)存管理,文件系統(tǒng)等,還要熟悉處理器體系結(jié)構(gòu)與指令集。如果要移植Linux,需要掌握u-boot移植、內(nèi)核裁減、交叉編譯、內(nèi)核調(diào)試、根文件系統(tǒng)制作等整個流程。



對于應(yīng)用層,如果沒有操作系統(tǒng)的話,程序一般不會復(fù)雜,根據(jù)業(yè)務(wù)邏輯調(diào)用驅(qū)動層接口就可以。如果有操作系統(tǒng)的支持,就和一般的應(yīng)用軟件開發(fā)很接近了,所以可以看成是桌面軟件開發(fā)。對于Linux操作系統(tǒng),要求掌握Linux系統(tǒng)編程、網(wǎng)絡(luò)編程、進程間通信,圖形界面編程、數(shù)據(jù)庫等。



通過以上分析,我認(rèn)為驅(qū)動層和系統(tǒng)層是嵌入式軟件工程師的核心競爭力。




做嵌入式軟件的好處



1.門檻高一點


需要懂底層軟件(比如操作系統(tǒng)級、驅(qū)動程序級)和硬件(比如ARM體系結(jié)構(gòu)、各種外圍設(shè)備接口)原理;在學(xué)習(xí)條件上,不是一臺PC機就可以學(xué),而是要有一塊開發(fā)板;對于某些需求,還需要采購相關(guān)外圍模塊。這些都是有一定門檻的,既然門檻高一點,那么可替代性就弱一點。



2.不是那么累


首先,嵌入式軟件工程師要寫的代碼量比較少,不像應(yīng)用軟件動輒就是幾十萬行甚至上百萬行,所以工作強度比較低;其次,搞嵌入式系統(tǒng)的公司大多都是做產(chǎn)品的,有自己的產(chǎn)品計劃,不像搞企業(yè)應(yīng)用的公司為了客戶需求經(jīng)常趕進度;再次,嵌入式軟件工程師所開發(fā)的產(chǎn)品一般是通用的,不會因客戶的不同而修改;最后,工作范圍比較窄,所涉及的知識和技術(shù)遠(yuǎn)遠(yuǎn)沒有上層軟件變化快。




3.對行業(yè)的依賴小


對于驅(qū)動層和操作系統(tǒng)層的工程師,他們只負(fù)責(zé)底層系統(tǒng),在系統(tǒng)之上開發(fā)什么業(yè)務(wù)和他們關(guān)系不大,那是應(yīng)用工程師的事。所以他們較容易換行業(yè)。



4.有成就感


對于大型應(yīng)用軟件,因為代碼量太大,一個工程師只能負(fù)責(zé)其中一小部分,可能感覺自己就是一個小螺絲。對于嵌入式軟件,通常需要編寫的代碼量比較少,如果應(yīng)用層比較簡單的話,往往一個人就把一塊板子上的軟件全包了。當(dāng)你靠一己之力做出一個“小而美”的東西后,非常有成就感。



5.適合創(chuàng)業(yè)


如果你有創(chuàng)業(yè)的想法,可以從嵌入式系統(tǒng)切入。嵌入式系統(tǒng)是軟硬結(jié)合的東西,可不像應(yīng)用軟件那樣容易被盜版。



做嵌入式軟件的缺點


凡事都有兩面性,說完好處再來說說缺點。不得不承認(rèn),嵌入式軟件的崗位需求小于應(yīng)用軟件。


特別是從事嵌入式的小企業(yè)數(shù)量較多(小企業(yè)要搞自己的產(chǎn)品創(chuàng)業(yè)),知名大公司較少(比如華為、中興、意法半導(dǎo)體、三星、德州儀器……),那些知名互聯(lián)網(wǎng)公司(比如BAT)對嵌入式軟件需求相對很小。



不過,隨著這兩年國內(nèi)對集成電路的加大投入,嵌入式軟件會越來越香。




如何入門嵌入式軟件


如果你對嵌入式軟件非常有興趣,很想轉(zhuǎn)過來,可是一點基礎(chǔ)都沒有,怎么辦呢?如果你圍繞“嵌入式開發(fā)學(xué)習(xí)路線”搜一搜,很多答案都是“數(shù)字電路、計算機組成原理、嵌入式微處理器結(jié)構(gòu)、匯編語言……”好吧,等把這些課程學(xué)完,一兩年都過去了,而且往往是啥東西都沒有開發(fā)出來。



像小李這樣的,因為不是在校學(xué)生,沒有那么多閑暇時間,只能利用業(yè)余時間來學(xué)習(xí),還是非常耗費精力的。如果堅持上一兩年還沒有轉(zhuǎn)行成功,是非常受打擊的。所以,我為他制定的策略是先切入嵌入式軟件這一行當(dāng),等到了工作崗位再根據(jù)需要深入學(xué)習(xí),所以建議他只學(xué)習(xí)最少必要知識,快速入門就行(注意,不是快速精通)。



1. 掌握C語言


看書、看視頻學(xué)習(xí)都可以。不過我建議還是買一本教材認(rèn)真閱讀,反復(fù)上機實踐。我推薦的教材是《C Primer Plus》(注意,不是《C Primer Plus》)。對于嵌入式軟件程序員,用得最多的是指針、數(shù)組、結(jié)構(gòu)體、位操作等,這些知識一定要熟練掌握。



2. 掌握基本數(shù)據(jù)結(jié)構(gòu)


因為是入門,所以數(shù)據(jù)結(jié)構(gòu)這塊不用買來一本大部頭從頭啃到尾,這樣只會中途放棄。我建議掌握最基本的鏈表、棧、隊列就可以。等真正入門后可以再回來學(xué)習(xí)。



3. 選購一款開發(fā)板


選購開發(fā)板應(yīng)以“適合”為原則,沒有必要追隨最新的處理器。在處理器的選擇上,主要分為兩種,一種是以ARM Cortex-A為核心(可以移植Linux),這種處理器主要應(yīng)用于消費電子;一種是以ARM Cortex-M為核心(跑不了Linux,但是可以跑實時操作系統(tǒng)),這種處理器主要應(yīng)用于工控領(lǐng)域,取代了之前的8位、16位單片機。



對于小李,考慮到他零基礎(chǔ),一上來就移植Linux難度有點大,所以我給他推薦了以ARM Cortex-M3為核心的stm32開發(fā)板。



不管選擇誰家的板子,除了板子,豐富的學(xué)習(xí)資料是必不可少的。對于初學(xué)者,一定要有源碼有視頻。如果有論壇、有人答疑就更完美了。



4. 學(xué)習(xí)裸板開發(fā)


跟著視頻和源碼來學(xué)習(xí),一定要動手實踐,非常建議寫博客總結(jié)。



學(xué)完這一步,一只腳就跨入嵌入式軟件開發(fā)大門了。不要驚訝,覺得還沒學(xué)什么就可以搞嵌入式軟件開發(fā)了??墒聦嵣暇褪沁@樣,我當(dāng)初轉(zhuǎn)型的時候,也只會這么多。到了工作崗位上邊干邊學(xué),這樣進步最快,難道不是嗎?



不過學(xué)完這步還不算完,為了大大增加轉(zhuǎn)型成功的概率,建議完成以下兩步。



5. 學(xué)習(xí)操作系統(tǒng)的移植


對于小李這種零基礎(chǔ)的,可以移植一款RTOS(實時操作系統(tǒng)),比如μC/OSⅡ或Ⅲ;基礎(chǔ)好的可以學(xué)習(xí)移植Linux。



這里要指出一個誤區(qū),有人說ARM開發(fā)板不跑Linux簡直是浪費,有人說離開了Linux的嵌入式是沒有深度的,還有人說RTOS太簡單了,沒啥可學(xué)的……對于這些說法,我認(rèn)為太片面,往往會誤導(dǎo)初學(xué)者。



第一,不是每個企業(yè)都有“ARM Linux”的需求。對于做工控產(chǎn)品的企業(yè),很少用Linux,有時候就是裸奔,功能復(fù)雜的話加一個RTOS足矣。我之前就職的那個公司,老板認(rèn)為我們的產(chǎn)品用Cortex-M3處理器核心太“土”,想升級到能跑Linux的Cortex-A8,最后還是被總工程師否決了,原因就是Cortex-A8成本高且我們的產(chǎn)品用Cortex-M3就可以滿足功能。我現(xiàn)在就職的這家公司是做WIFI芯片和藍牙芯片的。不管是WIFI協(xié)議棧還是藍牙協(xié)議棧,代碼量都在10萬行以上,在硬件上都是用Cortex-M3的核,最多跑一個RTOS,Linux根本用不上。



第二,對于小李這種從來沒有接觸過開發(fā)板的人,一上來就移植Linux,學(xué)Linux驅(qū)動,難度實在是太大,很有可能被博大精深的Linux內(nèi)核淹沒而放棄,最后再來一句“我不適合搞嵌入式”,從此徹底無緣嵌入式軟件開發(fā),悲哉,悲哉……



第三,不要小看RTOS,如果讓你動手寫一個,你真的能寫出來嗎?我想即使是有幾年工作經(jīng)驗的嵌入式軟件工程師也會搖頭。就連μC/OS的作者Jean J. Labrosse都認(rèn)為他想簡單了,他說:“我想得很簡單,認(rèn)為一個內(nèi)核真正需要做的事情就是保存和恢復(fù)CPU寄存器,寫一個內(nèi)核應(yīng)當(dāng)不是一件很有挑戰(zhàn)性的事情。夜晚和周末,我都忙于寫這個內(nèi)核。事實證明,比我預(yù)想的要難很多。大約花了一年時間,才寫完了我的第一個操作系統(tǒng)。”



第四,如果你簡歷中出現(xiàn)了μC/OS或者其他RTOS,那么面試官非常有可能在這塊考你。比如“任務(wù)是如何調(diào)度的?”“有沒有守護進程?”“μC/OSⅡ和Ⅲ有哪些區(qū)別?”“什么是優(yōu)先級反轉(zhuǎn)?”“如何防止優(yōu)先級反轉(zhuǎn)?”面試官能在這些地方提問題,說明沒那么簡單。



說了這么多,我不是說Linux不重要。相反,Linux很重要,恰恰是嵌入式軟件工程師的核心競爭力。我只是想說對于初學(xué)者,不要一上來就給自己定下那么大的目標(biāo),如果先通過μC/OSⅡ或Ⅲ的學(xué)習(xí)來打基礎(chǔ),再去學(xué)習(xí)Linux就會有事半功倍的效果。



6. 有自己的小作品


既然已經(jīng)學(xué)會了裸板開發(fā)和操作系統(tǒng)移植,你肯定有做東西的想法了,那就結(jié)合生活實際做點東西吧。比如做一個家用防盜報警裝置,當(dāng)檢測到有人進來,立刻給不在家的你撥打電話。



這時候你會發(fā)現(xiàn),圍繞著需求還有很多東西要學(xué),比如如何驅(qū)動紅外傳感器模塊(用來檢測有人靠近),如何驅(qū)動GSM模塊(用來撥打電話)。




獨立完成一些小作品不僅能大大提高你的知識熟練度和解決問題的能力,也會使你在面試的時候有話可說。




最后


如果你選擇了嵌入式,就不要后悔,也不要覺得嵌入式?jīng)]前途、嵌入式很辛苦等。行行都有難處,你嵌入式?jīng)]搞好,換一個行業(yè)未見的能做好。
------------ END ------------





本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉