0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣成為嵌入式工程師

工程師人生 ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師吳畏 ? 2018-09-03 09:29 ? 次閱讀

1嵌入式學(xué)習(xí)的一些概念理解誤區(qū)

很多嵌入式初學(xué)者認(rèn)為,學(xué)嵌入式,就是學(xué)習(xí)ARM,就是學(xué)習(xí)開發(fā)板。買一塊開發(fā)板,然后在上面“移植”u-boot、Linux內(nèi)核,再使用busybox制作一個(gè)根文件系統(tǒng),大功告成!覺得可以出去找工作了。這其實(shí)是有一定片面性的:首先ARM是個(gè)CPU架構(gòu),跟PC上的X86架構(gòu)一樣,你見過有人在Windows下面學(xué)習(xí)C/C++編程、MFC編程、網(wǎng)絡(luò)編程、互聯(lián)網(wǎng)編程,說自己學(xué)習(xí)X86的嗎?當(dāng)然,也不可否認(rèn),嵌入式平臺(tái)的多樣性、硬件的可定制性導(dǎo)致我們?cè)谇度胧狡脚_(tái)上開發(fā)應(yīng)用程序、驅(qū)動(dòng)之前,首先要搭建這個(gè)平臺(tái),就像我們?cè)赪indows下面要裝操作系統(tǒng)一樣,但是這僅僅是我們學(xué)習(xí)嵌入式開發(fā)的第一步。

其次,關(guān)于系統(tǒng)的“移植”,很多人玩了開發(fā)板之后,會(huì)在自己的簡(jiǎn)歷上寫自己移植過u-boot,Linux內(nèi)核。..。..其實(shí),這種寫法也是有點(diǎn)瑕疵的。真正的移植,往一個(gè)新的芯片或開發(fā)板上porting一個(gè)u-boot或Linux內(nèi)核,那可不是一個(gè)人能干的事情,是一個(gè)團(tuán)隊(duì)干的事情。時(shí)鐘DDR、存儲(chǔ),可能牽涉到各個(gè)模塊,哪里遇到問題,都需要各個(gè)模塊的owner去debug,有時(shí)候甚至可能是芯片的bug,或者硬件開發(fā)板的bug,這就需要我們使用軟件去解決、去規(guī)避這個(gè)坑,這都需要我們?cè)诤芏虝r(shí)間,甚至一兩天的時(shí)間去解決這個(gè)問題,需要一個(gè)團(tuán)隊(duì)的各個(gè)模塊專家合力完成。所以說,我們所說的“移植”,其實(shí)就像是在Windows下面安裝操作系統(tǒng),按照步驟完成裝機(jī)。當(dāng)然,通過這個(gè)過程,可以加深我們對(duì)嵌入式系統(tǒng)的理解,但是我們首先要知道的是,我們“移植”的系統(tǒng),都是芯片公司團(tuán)隊(duì)做好的系統(tǒng)鏡像,我們做的只是配置、編譯、安裝、甚至升級(jí)這些基本的操作。這些環(huán)境只是我們學(xué)習(xí)嵌入式開發(fā)的平臺(tái),萬里長(zhǎng)征才走完了第一步。

2學(xué)習(xí)嵌入式,我們到底該學(xué)些什么?

嵌入式越來越復(fù)雜,一個(gè)SOC芯片上集成的模塊越來越多。以手機(jī)為例,典型的嵌入式產(chǎn)品,我們看看上面集成了多少模塊:觸摸屏、LCD、USB、WiFi、4G無線通信、音視頻編解碼IP、DDR、存儲(chǔ)控制器、3D/2D加速、GPS、指紋識(shí)別、NFCDMA、G-sensor各種傳感器。..。..。??梢哉f,現(xiàn)在一個(gè)手機(jī)的復(fù)雜度和硬件配置,已經(jīng)超過我們的桌面PC了。除了不斷增加的硬件,軟件方面,比如Linux內(nèi)核,光內(nèi)核代碼就有1000多萬行,每天更新的速度超過你學(xué)習(xí)的進(jìn)度,你能學(xué)得完嵌入式的所有知識(shí)和技能嗎?

早期PC時(shí)代,我們知道能做出X86 CPU量產(chǎn)的也沒有幾家,Intel、AMD和威盛。但是嵌入式時(shí)代不一樣了,ARM的IP授權(quán)模式導(dǎo)致不同的芯片廠商百家齊放,不同的SOC平臺(tái)和開發(fā)板眼花繚亂,針對(duì)不同行業(yè)需求定制的SOC平臺(tái)雨后春筍:手機(jī)芯片、平板芯片、視頻安防、物聯(lián)網(wǎng)、汽車電子、工業(yè)控制,甚至人工智能AI芯片。..。,你到Linux內(nèi)核的ARCH下面可以看看有多少種CPU架構(gòu),再到arch/arm下面看看有多少種開發(fā)平臺(tái),這還只是加入到內(nèi)核mainline的平臺(tái),算上沒有加入Linux內(nèi)核主線的各種平臺(tái),其實(shí)數(shù)量更多。

眾多的芯片架構(gòu)、不同的開發(fā)板平臺(tái),我們?cè)撊绾稳W(xué)習(xí)?

嵌入式和PC的概念也越來越模糊了,Intel已經(jīng)推出X86架構(gòu)的CPU和嵌入式產(chǎn)品了,比如平板。ARM也開始進(jìn)軍服務(wù)器和筆記本領(lǐng)域了。無論什么CPU架構(gòu),ARM、X86、MIPS、PowerPC,還有最近火熱的物聯(lián)網(wǎng)芯片,無論是做嵌入式產(chǎn)品,還是PC、服務(wù)器,他們的底層本質(zhì)其實(shí)都沒有變,都是計(jì)算機(jī)原理和系統(tǒng)架構(gòu),都是馮諾依曼的計(jì)算機(jī)架構(gòu),圖靈原型機(jī)的各種實(shí)現(xiàn)。

不斷復(fù)雜的軟硬件系統(tǒng),對(duì)嵌入式工程師或者學(xué)習(xí)者來說是一個(gè)挑戰(zhàn)。這對(duì)我們本身的知識(shí)和技能有一個(gè)更新的要求。早期51單片機(jī)時(shí)代,我們可以自己使用面包板或者自己畫PCB,做一個(gè)開發(fā)板,然后在上面開發(fā)軟件。軟件、硬件自己全搞?,F(xiàn)在不斷復(fù)雜的SOC平臺(tái),再想一個(gè)人全搞,軟硬通吃,基本不可能,這也導(dǎo)致我們需要分工協(xié)作來完成。首先軟硬件的分工,各司其職,各自精通自己的領(lǐng)域,然后進(jìn)行軟硬件整合,協(xié)作開發(fā)。再次,軟件方面,嵌入式軟件也越來越復(fù)雜,Linux內(nèi)核1000多萬行,android源碼下載下來就占幾個(gè)G的空間,自己想全搞,同樣不可能,同樣需要進(jìn)行分工。比如android,需要分為BSP工程師、Linux內(nèi)核工程師、驅(qū)動(dòng)工程師、android中間層開發(fā)工程師、APP開發(fā)工程師。對(duì)于一個(gè)Linux內(nèi)核,也需要分工,各個(gè)模塊同樣進(jìn)行分工:Linux內(nèi)核的USB子系統(tǒng)、音頻子系統(tǒng)、視頻編解碼、文件系統(tǒng)。..。..把其中一個(gè)模塊你搞精通了,工資絕對(duì)不是問題。

對(duì)于嵌入式學(xué)習(xí)者來說,我們?cè)搶W(xué)習(xí)什么,或者說如何學(xué)習(xí)?才能提高自己的職場(chǎng)競(jìng)爭(zhēng)力,或者說對(duì)于一個(gè)新手來說,如何通過自學(xué),達(dá)到公司的用人標(biāo)準(zhǔn)和技術(shù)要求,找到一份自己想要的工作?

首先,你要學(xué)會(huì)做減法,從現(xiàn)實(shí)出發(fā),要有這樣一個(gè)意識(shí):我不可能精通所有的嵌入式技術(shù),學(xué)會(huì)堅(jiān)持,制定合理現(xiàn)實(shí)的小目標(biāo)。很多人喜歡那種不切實(shí)際的廣告轟炸營(yíng)銷,擊中你心理上的某個(gè)軟肋,某個(gè)G點(diǎn),一下子興奮起來。越熬越濃的心靈雞湯,并不能解決我們吃飯的生存現(xiàn)實(shí)問題。很多人,包括我,在學(xué)習(xí)的時(shí)候,都喜歡給自己樹立各種路線、計(jì)劃、日程表。制定計(jì)劃時(shí)激情滿滿,熱情高漲,激動(dòng)得睡不著覺。計(jì)劃宏偉而飽滿,仿佛成功就在眼前。但是往往不切實(shí)際,往往在早期,遇到各種困難,各種坑,各種拖延導(dǎo)致沒有堅(jiān)持下來,最后夭折。然后接著制定下一個(gè)宏偉的計(jì)劃,繼續(xù)夭折,生活周而復(fù)始,day after day。觀察我們生活周圍,真正做出成績(jī)的都是那些基于現(xiàn)實(shí)出發(fā),能一路堅(jiān)持下來的人,day by day。有時(shí)候你會(huì)發(fā)現(xiàn),并不覺得他們有多聰明。

其次,保持自己的興趣,說白了就是為了堅(jiān)持下去。見過很多人想學(xué)習(xí)嵌入式,花了很多米買一塊開發(fā)板,激情滿滿,過一段是過去再看,已經(jīng)不折騰了。嵌入式開發(fā)難,難在哪里呢?主要在于開發(fā)環(huán)境的搭建,軟件調(diào)試上,不像在Windows上使用VC開發(fā)程序,集成開發(fā)環(huán)境都幫你弄好了,各種斷點(diǎn)、單步、查看堆棧、寄存器、內(nèi)存窗口。而嵌入式不一樣,硬件環(huán)境搭建會(huì)遇到各種各樣的問題,各種電腦的兼容問題,各種莫名其妙的問題,有時(shí)候著實(shí)讓人抓狂,時(shí)間久了,慢慢地學(xué)習(xí)的激情殆盡,也就不想學(xué)習(xí)了。這還不算什么,更嚴(yán)重的是,很多人學(xué)習(xí)嵌入式遇到挫折,往往會(huì)打擊人的自信,覺得自己能力不行,智商不夠,不適合干這行,在心理留下了陰影。對(duì)于個(gè)人學(xué)習(xí)者來說,買了開發(fā)板,你不買配套的萬用表、示波器等調(diào)試設(shè)備,遇到硬件問題也是一籌莫展,無法解決。其實(shí)我們可以完全使用其它的平臺(tái)去開展我們的研究和學(xué)習(xí),比如QEMU,一款可以仿真開發(fā)板的開源軟件,使用這款開源軟件,我們可以在電腦上虛擬一個(gè)世面上流行的開發(fā)板,然后再在這個(gè)仿真的開發(fā)板上跑u-boot、Linux內(nèi)核、掛載根文件系統(tǒng),使用和開發(fā)板一樣的源碼,運(yùn)行效果和真實(shí)的開發(fā)板是一樣的。而且,使用QEMU的好處就是,“硬件”永遠(yuǎn)不會(huì)出問題,可以讓我們避過硬件的各種坑,騰出更多的精力去研究嵌入式軟件的各種架構(gòu)、編程技能、內(nèi)核驅(qū)動(dòng)。..。,這些才是嵌入式工程師的核心競(jìng)爭(zhēng)力,需要花大量的時(shí)間不斷地去積累,去磨合,去提高的。把大量的時(shí)間耗在一個(gè)本該不屬于學(xué)習(xí)范疇的硬件bug上或者硬件環(huán)境不兼容上,不劃算,因?yàn)槟阋院筮M(jìn)公司后,遇到同樣的問題,找硬件工程師,半分鐘幫你搞定。所以說,選擇一個(gè)理想的嵌入式學(xué)習(xí)平臺(tái),尤其對(duì)于初學(xué)者來說,很重要。

最后,要保持學(xué)習(xí)的深度,刻意練習(xí)。不要讓自己永遠(yuǎn)待在學(xué)習(xí)的舒適區(qū),要學(xué)會(huì)挑戰(zhàn)自己,不斷去擴(kuò)展自己知識(shí)的邊界,完善自己的知識(shí)體系和技能。很多人買了開飯,按照教程,“移植”了u-boot,Linux內(nèi)核,制作了根文件系統(tǒng),然后就陷入了迷茫:接著要干什么?要學(xué)習(xí)什么?想學(xué)習(xí)又感覺深入不下去,東一耙子,西一耙子,看看這,看看那,時(shí)間不知不覺就過去了。其實(shí),學(xué)習(xí)嵌入式,基本的嵌入式知識(shí)和理論學(xué)習(xí)還是必要的,很多人推崇邊做邊學(xué),到項(xiàng)目中學(xué)習(xí),實(shí)踐出真知。當(dāng)然這也是一個(gè)方法,但是也有弊端,那就是學(xué)習(xí)的不系統(tǒng),很多有心人到后來還是得回來補(bǔ)課,完善自己的知識(shí)體系和技能。很多人玩開發(fā)板,燒寫鏡像,玩得賊溜,但是你知道這里面的原理嗎?知道JTAG怎么下載的嗎?Jlink和JTAG有什么區(qū)別?為什么PC上要裝個(gè)JTAG軟件而Jlink不用?程序的編譯和鏈接是怎么樣的?為什么內(nèi)核鏡像要下載內(nèi)存的某個(gè)地址?換個(gè)地址行不行?為什么我們編寫的程序要在有OS的環(huán)境下運(yùn)行,在ARM開發(fā)板裸機(jī)環(huán)境下,你能寫一個(gè)跑起來的程序嗎?只有對(duì)這些問題深入思考,你才會(huì)對(duì)嵌入式有一個(gè)更深的認(rèn)識(shí),超越了平臺(tái),一通百通。

380%的嵌入式知識(shí)和技能,其實(shí)跟硬件平臺(tái)無關(guān)

嵌入式開發(fā)需要的知識(shí)體系和技能,80%其實(shí)跟硬件平臺(tái)無沒有無關(guān)系的。比如計(jì)算機(jī)系統(tǒng)原理、編程技能、程序的編譯鏈接、你對(duì)Linux內(nèi)核的理解、設(shè)備模型、驅(qū)動(dòng)架構(gòu)、項(xiàng)目管理等等。

真正跟硬件平臺(tái)有關(guān)的,比如驅(qū)動(dòng)開發(fā),上面的框架是跟平臺(tái)無關(guān)的,下面跟各個(gè)硬件平臺(tái)的適配部分,可能跟硬件平臺(tái)就有關(guān)系了,寄存器配置、開發(fā)板硬件配置等。而對(duì)于嵌入式工程師來說,尤其是驅(qū)動(dòng)開發(fā)工程師,等你工作后,你會(huì)發(fā)現(xiàn),跟應(yīng)用開發(fā)相比,真正要寫的代碼量很少,往往只需要改幾行代碼。但是往往這幾行的代碼量,需要你深厚的背景知識(shí):硬件知識(shí)、通信協(xié)議、對(duì)芯片、開發(fā)平臺(tái)資源掌握、對(duì)Linux內(nèi)核架構(gòu)、設(shè)備模型、驅(qū)動(dòng)框架的理解,這些才是嵌入式工程師的核心競(jìng)爭(zhēng)力。

如果你看到很多廣告還在以開發(fā)板或者平臺(tái)作為噱頭,能拿多少工資作為宣傳,這時(shí)候你的腦海里要有這種意識(shí),這是一種推廣宣傳。工資多少是由你自己的水平和市場(chǎng)大行情決定的,雖然在面試時(shí)HR會(huì)對(duì)你本身的水平評(píng)估有一些誤差,但是要相信,時(shí)間會(huì)證明你自己的真實(shí)價(jià)值,不斷提高自己的知識(shí)水平和技能才是王道。真正的技術(shù)需要自己花時(shí)間慢慢吸收、積累、消化,內(nèi)化為自己的知識(shí)體系和技能。外在的心靈雞湯或高煲老鴨湯,只能讓你一時(shí)地?zé)崆楦邼q,產(chǎn)生暫時(shí)的錯(cuò)覺,并不能真正的提高技能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5087

    文章

    19153

    瀏覽量

    306416
  • 工程師
    +關(guān)注

    關(guān)注

    59

    文章

    1571

    瀏覽量

    68574
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么嵌入式驅(qū)動(dòng)開發(fā)工程師可以拿高薪?

    為什么嵌入式驅(qū)動(dòng)開發(fā)工程師可以拿高薪? 嵌入式驅(qū)動(dòng)開發(fā),屬于需求量大、薪資斷崖升高的熱門崗位,在市場(chǎng)的發(fā)展驅(qū)動(dòng)下成為“風(fēng)口”。從市場(chǎng)的整
    發(fā)表于 01-07 16:56

    嵌入式工程師常用的開發(fā)工具有哪些?

    嵌入式工程師常用的開發(fā)工具有哪些? 在嵌入式系統(tǒng)開發(fā)的廣闊領(lǐng)域中,嵌入式工程師們憑借著一系列強(qiáng)大的工具,將創(chuàng)意與技術(shù)完美融合,打造出高效、可
    發(fā)表于 12-20 15:29

    嵌入式QT常見開發(fā)方式有哪些?

    嵌入式QT常見開發(fā)方式有哪些? 嵌入式工程師在學(xué)習(xí)和使用Qt進(jìn)行開發(fā)時(shí),常見的幾種開發(fā)方式包括: 1.Qt Widgets編程: 通過C++代碼直接編寫GUI應(yīng)用程序,利用QtWidgets庫
    發(fā)表于 08-12 10:05

    嵌入式熱門領(lǐng)域有哪些?

    通過物聯(lián)網(wǎng)連接各種物理設(shè)備和傳感器,促使它們之間實(shí)現(xiàn)信息的交換和數(shù)據(jù)的共享。從智能家居到智能城市,物聯(lián)網(wǎng)的應(yīng)用不斷擴(kuò)展,為嵌入式系統(tǒng)工程師帶來了廣泛的就業(yè)機(jī)會(huì)和發(fā)展前景。 自動(dòng)駕駛 自動(dòng)駕駛技術(shù)作為
    發(fā)表于 07-16 09:23

    找STM32硬件開發(fā)兼職工程師

    上海做傳感器的公司,找STM32硬件開發(fā)兼職工程師,會(huì)硬件開發(fā),嵌入式軟件開發(fā),可項(xiàng)目外包。有意聯(lián)系:15900460170
    發(fā)表于 06-22 19:12

    嵌入式軟件工程師如何提升自己?

    嵌入式軟件工程師如何提升自己? 作為一名嵌入式軟件工程師,在這個(gè)充滿機(jī)遇和挑戰(zhàn)的領(lǐng)域里,如何提升自己顯得非常重要,它決定了你未來的發(fā)展方向和成就。接下來,我們一起探討一下。 1.奠定扎
    發(fā)表于 06-12 11:20

    從事嵌入式方向,一定要軟硬件通吃?

    嵌入式系統(tǒng)開發(fā)領(lǐng)域,軟件和硬件的界限常常模糊不清。一個(gè)常見的問題是,嵌入式軟件工程師是否需要了解硬件。本文將探討這一問題的重要性,并分析嵌入式軟件
    的頭像 發(fā)表于 06-05 08:10 ?1247次閱讀
    從事<b class='flag-5'>嵌入式</b>方向,一定要軟硬件通吃?

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    嵌入式軟件工程師和硬件工程師的區(qū)別? 嵌入式軟件工程師 嵌入式軟件
    發(fā)表于 05-16 11:00

    一款適合嵌入式工程師使用的在線工具

    一款適合嵌入式工程師使用的在線工具,工具有如下功能,如下圖所示: 1. 報(bào)文校驗(yàn)功能,如下圖所示 2. UDP服務(wù)端測(cè)試工具:該UDP服務(wù)端工具可以理解為 “UDP服務(wù)端” 或者 “服務(wù)器
    發(fā)表于 04-09 22:20

    如何成為一名嵌入式C語言高手?

    如何成為一名嵌入式C語言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語言則是嵌入式系統(tǒng)開發(fā)中最常用的編程語言之一。成為一名
    發(fā)表于 04-07 16:03

    如何成為一名嵌入式C語言高手?

    如何成為一名嵌入式C語言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語言則是嵌入式系統(tǒng)開發(fā)中最常用的編程語言之一。成為一名
    發(fā)表于 03-25 14:12

    嵌入式工程師需要掌握哪些技術(shù)?

    嵌入式工程師需要掌握哪些技術(shù)? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域中的重要組成部分,它們存在于我們生活的方方面面,從智能手機(jī)到汽車控制系統(tǒng),從家電到醫(yī)療設(shè)備。因此,對(duì)于那些想要進(jìn)入嵌入式行業(yè)的
    發(fā)表于 03-04 16:38

    嵌入式人工智能的就業(yè)方向有哪些?

    的發(fā)展方向有很多,門檻高低不一樣。下面給大家列舉一些相應(yīng)崗位所需具備的技能: 一:嵌入式Linux,C語言開發(fā)工程師,Linux軟件開發(fā)工程師 LinuxC語言開發(fā) LinuxC語言開發(fā)進(jìn)階 Linux
    發(fā)表于 02-26 10:17

    職位介紹 之 嵌入式開發(fā)工程師

    什么是嵌入式軟件開發(fā) ????????嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。 ????????它
    的頭像 發(fā)表于 01-17 17:23 ?530次閱讀