嵌入(ru)式系(xi)統有(you)哪些坑(keng)可以避免
時間:2021-08-25 來源:華清遠見
學習硬件(jian)的(de)小伙伴們都知道(dao)嵌(qian)(qian)(qian)入(ru)(ru)式(shi)是用于(yu)控(kong)制、監視或者輔助(zhu)操作機(ji)器和(he)設(she)備的(de)裝置(zhi)。嵌(qian)(qian)(qian)入(ru)(ru)式(shi)是一種專用的(de)計算機(ji)系統,作為裝置(zhi)或設(she)備的(de)一部分。 嵌(qian)(qian)(qian)入(ru)(ru)式(shi)是才發(fa)展起來的(de)一項IT開發(fa)技術。嵌(qian)(qian)(qian)入(ru)(ru)式(shi)在ARMMCU等各(ge)個方面都有(you)了細(xi)分專業團隊進行外協設(she)計。但是往往我們在使用過程中有(you)很多誤區。
很(hen)多(duo)嵌(qian)(qian)入(ru)(ru)式初(chu)學(xue)(xue)(xue)者認為,學(xue)(xue)(xue)嵌(qian)(qian)入(ru)(ru)式,就(jiu)(jiu)是(shi)(shi)(shi)學(xue)(xue)(xue)習(xi)(xi)(xi)ARM,就(jiu)(jiu)是(shi)(shi)(shi)學(xue)(xue)(xue)習(xi)(xi)(xi)開(kai)(kai)發(fa)(fa)板。買一(yi)(yi)(yi)(yi)塊開(kai)(kai)發(fa)(fa)板,然后在上(shang)(shang)面(mian)“移(yi)植”u-boot、Linux內核,再使用busybox制作一(yi)(yi)(yi)(yi)個(ge)(ge)(ge)根文件(jian)系(xi)統,大(da)功告成(cheng)(cheng)!覺得可以出去(qu)(qu)找(zhao)工作了。這其實是(shi)(shi)(shi)有(you)一(yi)(yi)(yi)(yi)定(ding)片(pian)面(mian)性的(de)(de)(de):首(shou)先(xian)ARM是(shi)(shi)(shi)個(ge)(ge)(ge)CPU架構,跟PC上(shang)(shang)的(de)(de)(de)X86架構一(yi)(yi)(yi)(yi)樣,你(ni)見過(guo)有(you)人在Windows下面(mian)學(xue)(xue)(xue)習(xi)(xi)(xi)C/C++編(bian)程(cheng)、MFC編(bian)程(cheng)、網絡編(bian)程(cheng)、互聯網編(bian)程(cheng),說自(zi)己(ji)學(xue)(xue)(xue)習(xi)(xi)(xi)X86的(de)(de)(de)嗎?當(dang)然,也不可否(fou)認,嵌(qian)(qian)入(ru)(ru)式平臺(tai)的(de)(de)(de)多(duo)樣性、硬件(jian)的(de)(de)(de)可定(ding)制性導(dao)致我(wo)們在嵌(qian)(qian)入(ru)(ru)式平臺(tai)上(shang)(shang)開(kai)(kai)發(fa)(fa)應(ying)用程(cheng)序、驅(qu)動之前,首(shou)先(xian)要(yao)搭建這個(ge)(ge)(ge)平臺(tai),就(jiu)(jiu)像我(wo)們在Windows下面(mian)要(yao)裝(zhuang)操作系(xi)統一(yi)(yi)(yi)(yi)樣,但是(shi)(shi)(shi)這僅(jin)僅(jin)是(shi)(shi)(shi)我(wo)們學(xue)(xue)(xue)習(xi)(xi)(xi)嵌(qian)(qian)入(ru)(ru)式開(kai)(kai)發(fa)(fa)的(de)(de)(de)第(di)一(yi)(yi)(yi)(yi)步。其次,關(guan)于(yu)系(xi)統的(de)(de)(de)“移(yi)植”,很(hen)多(duo)人玩了開(kai)(kai)發(fa)(fa)板之后,會在自(zi)己(ji)的(de)(de)(de)簡歷(li)上(shang)(shang)寫自(zi)己(ji)移(yi)植過(guo)u-boot,Linux內核。其實,這種寫法(fa)也是(shi)(shi)(shi)有(you)點瑕(xia)疵的(de)(de)(de)。真正的(de)(de)(de)移(yi)植,往一(yi)(yi)(yi)(yi)個(ge)(ge)(ge)新(xin)的(de)(de)(de)芯片(pian)或開(kai)(kai)發(fa)(fa)板上(shang)(shang)porting一(yi)(yi)(yi)(yi)個(ge)(ge)(ge)u-boot或Linux內核,那可不是(shi)(shi)(shi)一(yi)(yi)(yi)(yi)個(ge)(ge)(ge)人能干的(de)(de)(de)事(shi)情,是(shi)(shi)(shi)一(yi)(yi)(yi)(yi)個(ge)(ge)(ge)團隊干的(de)(de)(de)事(shi)情。時鐘、DDR、存儲<,可能牽涉到各(ge)(ge)個(ge)(ge)(ge)模(mo)塊,哪(na)里遇到問題(ti),都(dou)(dou)需要(yao)各(ge)(ge)個(ge)(ge)(ge)模(mo)塊的(de)(de)(de)owner去(qu)(qu)debug,有(you)時候甚(shen)至可能是(shi)(shi)(shi)芯片(pian)的(de)(de)(de)bug,或者硬件(jian)開(kai)(kai)發(fa)(fa)板的(de)(de)(de)bug,這就(jiu)(jiu)需要(yao)我(wo)們使用軟(ruan)件(jian)去(qu)(qu)解(jie)決(jue)、去(qu)(qu)規避這個(ge)(ge)(ge)坑,這都(dou)(dou)需要(yao)我(wo)們在很(hen)短時間(jian),甚(shen)至一(yi)(yi)(yi)(yi)兩天的(de)(de)(de)時間(jian)去(qu)(qu)解(jie)決(jue)這個(ge)(ge)(ge)問題(ti),需要(yao)一(yi)(yi)(yi)(yi)個(ge)(ge)(ge)團隊的(de)(de)(de)各(ge)(ge)個(ge)(ge)(ge)模(mo)塊專(zhuan)家合力完(wan)成(cheng)(cheng)。
所(suo)以說,我們(men)(men)所(suo)說的(de)“移植(zhi)”,其實就像是(shi)在(zai)Windows下面安(an)裝(zhuang)操(cao)作系(xi)(xi)(xi)統,按照步(bu)驟完成裝(zhuang)機。當然,通過這個(ge)過程,可以加深(shen)我們(men)(men)對嵌入式系(xi)(xi)(xi)統的(de)理解,但是(shi)我們(men)(men)首先(xian)要知道的(de)是(shi),我們(men)(men)“移植(zhi)”的(de)系(xi)(xi)(xi)統,都是(shi)芯(xin)片公司團隊做好的(de)系(xi)(xi)(xi)統鏡像,我們(men)(men)做的(de)只是(shi)配置(zhi)、編(bian)譯、安(an)裝(zhuang)、甚至升級這些基本的(de)操(cao)作。這些環境只是(shi)我們(men)(men)學習嵌入式開發的(de)平臺,萬里長征才走完了(le)第一(yi)步(bu)。
學習(xi)嵌(qian)入式(shi),我們(men)到底該(gai)學些(xie)什(shen)么?
嵌入式越來越復(fu)雜,一個(ge)SOC芯片上集成的(de)(de)模塊(kuai)越來越多。以手(shou)機(ji)為例,典型的(de)(de)嵌入式產品,我(wo)們看(kan)(kan)看(kan)(kan)上面集成了多少模塊(kuai):觸摸屏、LCD、i、4G等(deng)無線通信、音視頻編解(jie)碼(ma)IP、DDR、存儲控制器、3D/2D加(jia)速、指紋識(shi)別、DMA、G-sensor各種傳感器......可以說,現在一個(ge)手(shou)機(ji)的(de)(de)復(fu)雜度和(he)(he)硬件配(pei)置,已經超過(guo)我(wo)們的(de)(de)桌面PC了。除了不斷增加(jia)的(de)(de)硬件,軟件方面,比如Linux內(nei)核,光內(nei)核代碼(ma)就有(you)1000多萬行(xing),每天更新的(de)(de)速度超過(guo)你(ni)學(xue)習(xi)的(de)(de)進(jin)度,你(ni)能學(xue)得完嵌入式的(de)(de)所有(you)知識(shi)和(he)(he)技能嗎?
早期PC時代,我們知道能做(zuo)出X86 CPU量(liang)產的(de)也沒(mei)有(you)幾家,AMD和威盛(sheng)。但是(shi)嵌(qian)入(ru)式時代不(bu)一樣了,ARM的(de)IP授權模式導(dao)致(zhi)不(bu)同的(de)芯(xin)片廠商百家齊放,不(bu)同的(de)SOC平臺(tai)和開發板(ban)眼花(hua)繚(liao)亂,針對不(bu)同行業(ye)需求(qiu)定制(zhi)的(de)SOC平臺(tai)雨后(hou)春(chun)筍:手機芯(xin)片、平板(ban)芯(xin)片、視(shi)頻安防、物聯網、汽車(che)電子、工業(ye)控制(zhi),甚至人(ren)工智(zhi)能AI芯(xin)片......,你到Linux內核(he)的(de)ARCH下(xia)面可以看看有(you)多少種CPU架構(gou),再到arch/arm下(xia)面看看有(you)多少種開發平臺(tai),這還只(zhi)是(shi)加入(ru)到內核(he)mainline的(de)平臺(tai),算(suan)上沒(mei)有(you)加入(ru)Linux內核(he)主線的(de)各種平臺(tai),其(qi)實數量(liang)更多。
眾多的(de)芯片架構、不同的(de)開發板平臺,我們該如何去學習(xi)?
嵌(qian)入式和(he)(he)PC的(de)概念(nian)也越來(lai)越模糊了,Intel已經推(tui)出X86架(jia)構的(de)CPU和(he)(he)嵌(qian)入式產品了,比如平板。ARM也開始進軍(jun)服(fu)務器(qi)和(he)(he)筆記本(ben)領域(yu)了。無論什么CPU架(jia)構,ARM、X86、MIPS、PowerPC,還有最近火熱的(de)物聯網芯片(pian),無論是(shi)做嵌(qian)入式產品,還是(shi)PC、服(fu)務器(qi),他們的(de)底層本(ben)質(zhi)其實(shi)都(dou)(dou)沒有變,都(dou)(dou)是(shi)計算(suan)機(ji)原(yuan)(yuan)理和(he)(he)系(xi)統架(jia)構,都(dou)(dou)是(shi)馮諾依曼(man)的(de)計算(suan)機(ji)架(jia)構,圖靈原(yuan)(yuan)型機(ji)的(de)各種實(shi)現。
不斷復雜(za)的軟(ruan)硬件(jian)系統(tong),對(dui)嵌入式(shi)工(gong)程(cheng)師(shi)或者學習者來(lai)(lai)說(shuo)是一(yi)個(ge)挑(tiao)戰(zhan)。這(zhe)對(dui)我(wo)們(men)(men)本(ben)身的知識和技能有(you)一(yi)個(ge)更新(xin)的要(yao)(yao)(yao)(yao)求。早(zao)期(qi)51單片(pian)機(ji)時代,我(wo)們(men)(men)可(ke)以自(zi)(zi)己使(shi)用面(mian)包板或者自(zi)(zi)己畫PCB,做一(yi)個(ge)開(kai)(kai)發板,然后(hou)在上面(mian)開(kai)(kai)發軟(ruan)件(jian)。軟(ruan)件(jian)、硬件(jian)自(zi)(zi)己全(quan)搞。現在不斷復雜(za)的SOC平(ping)臺,再想一(yi)個(ge)人全(quan)搞,軟(ruan)硬通(tong)(tong)吃,基本(ben)不可(ke)能,這(zhe)也(ye)導致(zhi)我(wo)們(men)(men)需要(yao)(yao)(yao)(yao)分(fen)(fen)(fen)(fen)工(gong)協(xie)作來(lai)(lai)完成。首先軟(ruan)硬件(jian)的分(fen)(fen)(fen)(fen)工(gong),各司其職,各自(zi)(zi)精通(tong)(tong)自(zi)(zi)己的領域,然后(hou)進行軟(ruan)硬件(jian)整(zheng)合,協(xie)作開(kai)(kai)發。再次,軟(ruan)件(jian)方面(mian),嵌入式(shi)軟(ruan)件(jian)也(ye)越(yue)來(lai)(lai)越(yue)復雜(za),Linux內核(he)1000多萬行,android源碼(ma)(ma)下(xia)載下(xia)來(lai)(lai)就占幾個(ge)G的空間,自(zi)(zi)己想全(quan)搞,同(tong)(tong)樣(yang)不可(ke)能,同(tong)(tong)樣(yang)需要(yao)(yao)(yao)(yao)進行分(fen)(fen)(fen)(fen)工(gong)。比如android,需要(yao)(yao)(yao)(yao)分(fen)(fen)(fen)(fen)為BSP工(gong)程(cheng)師(shi)、Linux內核(he)工(gong)程(cheng)師(shi)、驅動工(gong)程(cheng)師(shi)、android中(zhong)間層(ceng)開(kai)(kai)發工(gong)程(cheng)師(shi)、APP開(kai)(kai)發工(gong)程(cheng)師(shi)。對(dui)于一(yi)個(ge)Linux內核(he),也(ye)需要(yao)(yao)(yao)(yao)分(fen)(fen)(fen)(fen)工(gong),各個(ge)模(mo)塊同(tong)(tong)樣(yang)進行分(fen)(fen)(fen)(fen)工(gong):Linux內核(he)的USB子系統(tong)、音(yin)頻(pin)(pin)子系統(tong)、視頻(pin)(pin)編解碼(ma)(ma)、文件(jian)系統(tong)......把其中(zhong)一(yi)個(ge)模(mo)塊你(ni)搞精通(tong)(tong)了,工(gong)資絕對(dui)不是問(wen)題。
對于嵌入式學(xue)習者(zhe)(zhe)來說(shuo),我(wo)們該學(xue)習什么,或(huo)者(zhe)(zhe)說(shuo)如(ru)何學(xue)習?才能提高自己(ji)的(de)職場競爭力,或(huo)者(zhe)(zhe)說(shuo)對于一(yi)(yi)個(ge)新手(shou)來說(shuo),如(ru)何通(tong)過(guo)自學(xue),達到(dao)公司的(de)用人標準和(he)技術要求,找到(dao)一(yi)(yi)份自己(ji)想要的(de)工(gong)作?
首先,你(ni)要學(xue)會(hui)(hui)做減法,從現(xian)(xian)實出發(fa),要有這樣(yang)一個意識(shi):我不可能(neng)精通(tong)所有的(de)嵌入式(shi)技(ji)術,學(xue)會(hui)(hui)堅持(chi)(chi),制(zhi)定合理現(xian)(xian)實的(de)小目標(biao)。很(hen)(hen)多人喜(xi)歡(huan)那種不切實際(ji)的(de)廣告轟炸(zha)營銷,擊中(zhong)你(ni)心理上的(de)某個軟(ruan)肋,某個G點(dian),一下(xia)(xia)子興奮起來(lai)(lai)。越熬越濃的(de)心靈雞湯(tang),并(bing)不能(neng)解決(jue)我們吃飯(fan)的(de)生存現(xian)(xian)實問題(ti)。很(hen)(hen)多人,包括我,在學(xue)習的(de)時(shi)候(hou),都喜(xi)歡(huan)給自己樹(shu)立各種路線(xian)、計劃(hua)、日程表(biao)。制(zhi)定計劃(hua)時(shi)激情滿滿,熱情高漲,激動得睡不著(zhu)覺。計劃(hua)宏偉而飽滿,仿佛(fo)成功就在眼前。但是(shi)往(wang)往(wang)不切實際(ji),往(wang)往(wang)在早期,遇到各種困(kun)難,各種坑,各種拖延(yan)導致(zhi)沒(mei)有堅持(chi)(chi)下(xia)(xia)來(lai)(lai),最后夭折(zhe)。然后接著(zhu)制(zhi)定下(xia)(xia)一個宏偉的(de)計劃(hua),繼續夭折(zhe),生活周(zhou)(zhou)而復始,day after day。觀察我們生活周(zhou)(zhou)圍,真(zhen)正做出成績的(de)都是(shi)那些基(ji)于現(xian)(xian)實出發(fa),能(neng)一路堅持(chi)(chi)下(xia)(xia)來(lai)(lai)的(de)人,day by day。有時(shi)候(hou)你(ni)會(hui)(hui)發(fa)現(xian)(xian),并(bing)不覺得他們有多聰明。
其次,保持(chi)自己的(de)(de)興趣(qu),說(shuo)白了就是為了堅(jian)持(chi)下去。見過(guo)(guo)很多(duo)人想學(xue)習(xi)嵌入(ru)式,花了很多(duo)米買(mai)一(yi)塊(kuai)開發(fa)(fa)板,激情滿滿,過(guo)(guo)一(yi)段是過(guo)(guo)去再看,已(yi)經不(bu)折(zhe)(zhe)騰了。嵌入(ru)式開發(fa)(fa)難,難在哪里呢?主要在于開發(fa)(fa)環境的(de)(de)搭(da)建,軟件調試(shi)上,不(bu)像在Windows上使用VC開發(fa)(fa)程序,集成開發(fa)(fa)環境都幫你弄(nong)好了,各(ge)種(zhong)(zhong)斷點、單步、查看堆(dui)棧、寄存器、內(nei)存窗口。而(er)嵌入(ru)式不(bu)一(yi)樣(yang),硬(ying)件環境搭(da)建會遇到各(ge)種(zhong)(zhong)各(ge)樣(yang)的(de)(de)問題,各(ge)種(zhong)(zhong)電腦的(de)(de)兼容(rong)問題,各(ge)種(zhong)(zhong)莫名其妙(miao)的(de)(de)問題,有時候著實(shi)讓(rang)人抓(zhua)狂(kuang),時間(jian)久了,慢(man)慢(man)地學(xue)習(xi)的(de)(de)激情殆盡,也(ye)就不(bu)想學(xue)習(xi)了。這還不(bu)算什么(me),更(geng)嚴重的(de)(de)是,很多(duo)人學(xue)習(xi)嵌入(ru)式遇到挫折(zhe)(zhe),往往會打擊人的(de)(de)自信(xin),覺得自己能力不(bu)行,智商不(bu)夠,不(bu)適合干(gan)這行,在心理留下了陰影(ying)。
對于個(ge)(ge)(ge)人(ren)學(xue)習(xi)者來說,買了開(kai)(kai)發(fa)板,你(ni)(ni)不(bu)買配套的(de)(de)(de)(de)示波器(qi)等調試設備(bei),遇(yu)(yu)到硬(ying)(ying)件(jian)(jian)(jian)問題也是(shi)一(yi)(yi)籌莫展(zhan),無法(fa)解決。其實我(wo)們可(ke)以完全使用(yong)其它的(de)(de)(de)(de)平(ping)(ping)臺(tai)(tai)去開(kai)(kai)展(zhan)我(wo)們的(de)(de)(de)(de)研究和學(xue)習(xi),比如QEMU,一(yi)(yi)款可(ke)以仿真開(kai)(kai)發(fa)板的(de)(de)(de)(de)開(kai)(kai)源(yuan)軟(ruan)(ruan)件(jian)(jian)(jian),使用(yong)這(zhe)款開(kai)(kai)源(yuan)軟(ruan)(ruan)件(jian)(jian)(jian),我(wo)們可(ke)以在電腦上虛擬一(yi)(yi)個(ge)(ge)(ge)世面(mian)上流行的(de)(de)(de)(de)開(kai)(kai)發(fa)板,然后(hou)再在這(zhe)個(ge)(ge)(ge)仿真的(de)(de)(de)(de)開(kai)(kai)發(fa)板上跑(pao)u-boot、Linux內(nei)核(he)、掛載(zai)根文件(jian)(jian)(jian)系(xi)統,使用(yong)和開(kai)(kai)發(fa)板一(yi)(yi)樣(yang)的(de)(de)(de)(de)源(yuan)碼,運行效(xiao)果(guo)和真實的(de)(de)(de)(de)開(kai)(kai)發(fa)板是(shi)一(yi)(yi)樣(yang)的(de)(de)(de)(de)。而且,使用(yong)QEMU的(de)(de)(de)(de)好處就是(shi),“硬(ying)(ying)件(jian)(jian)(jian)”永(yong)遠不(bu)會出(chu)問題,可(ke)以讓我(wo)們避過硬(ying)(ying)件(jian)(jian)(jian)的(de)(de)(de)(de)各種坑,騰(teng)出(chu)更多(duo)的(de)(de)(de)(de)精力(li)去研究嵌(qian)入(ru)式軟(ruan)(ruan)件(jian)(jian)(jian)的(de)(de)(de)(de)各種架(jia)構、編程技能、內(nei)核(he)驅動。。。。,這(zhe)些才是(shi)嵌(qian)入(ru)式工程師(shi)的(de)(de)(de)(de)核(he)心競(jing)爭力(li),需要花大量(liang)的(de)(de)(de)(de)時間(jian)不(bu)斷(duan)地去積累,去磨(mo)合,去提高(gao)的(de)(de)(de)(de)。把大量(liang)的(de)(de)(de)(de)時間(jian)耗在一(yi)(yi)個(ge)(ge)(ge)本該不(bu)屬于學(xue)習(xi)范疇的(de)(de)(de)(de)硬(ying)(ying)件(jian)(jian)(jian)bug上或者硬(ying)(ying)件(jian)(jian)(jian)環境(jing)不(bu)兼容上,不(bu)劃(hua)算,因(yin)為(wei)你(ni)(ni)以后(hou)進(jin)公司后(hou),遇(yu)(yu)到同(tong)樣(yang)的(de)(de)(de)(de)問題,找(zhao)硬(ying)(ying)件(jian)(jian)(jian)工程師(shi),半分鐘幫(bang)你(ni)(ni)搞定。所以說,選擇(ze)一(yi)(yi)個(ge)(ge)(ge)理想的(de)(de)(de)(de)嵌(qian)入(ru)式學(xue)習(xi)平(ping)(ping)臺(tai)(tai),尤其對于初學(xue)者來說,很重要。
最后(hou),要保持學(xue)(xue)(xue)習(xi)的(de)深度,刻意練習(xi)。不(bu)要讓自(zi)己(ji)永遠待在(zai)學(xue)(xue)(xue)習(xi)的(de)舒適區(qu),要學(xue)(xue)(xue)會(hui)挑戰自(zi)己(ji),不(bu)斷(duan)去(qu)擴(kuo)展自(zi)己(ji)知識的(de)邊(bian)界,完善(shan)自(zi)己(ji)的(de)知識體系(xi)和技能。很多人買(mai)了(le)開飯,按照教程(cheng),“移植(zhi)”了(le)u-boot,Linux內核,制作了(le)根(gen)文(wen)件系(xi)統,然后(hou)就陷(xian)入(ru)(ru)了(le)迷茫:接(jie)著要干什么?要學(xue)(xue)(xue)習(xi)什么?想學(xue)(xue)(xue)習(xi)又(you)感覺深入(ru)(ru)不(bu)下去(qu),東一耙子(zi),西一耙子(zi),看(kan)看(kan)這,看(kan)看(kan)那,時間不(bu)知不(bu)覺就過(guo)去(qu)了(le)。其實,學(xue)(xue)(xue)習(xi)嵌入(ru)(ru)式,基(ji)本的(de)嵌入(ru)(ru)式知識和理論學(xue)(xue)(xue)習(xi)還(huan)是必(bi)要的(de),很多人推(tui)崇邊(bian)做邊(bian)學(xue)(xue)(xue),到項目中學(xue)(xue)(xue)習(xi),實踐出真知。
當然這也是(shi)(shi)一個(ge)(ge)方法,但是(shi)(shi)也有(you)(you)弊端,那就(jiu)是(shi)(shi)學習的(de)不系統(tong),很多有(you)(you)心(xin)人到后來還是(shi)(shi)得回來補課,完(wan)善自己的(de)知識(shi)體系和技能(neng)。很多人玩(wan)開(kai)發板,燒(shao)寫鏡(jing)像(xiang)(xiang),玩(wan)得賊溜,但是(shi)(shi)你(ni)知道這里面的(de)原理嗎(ma)?知道JTAG怎么(me)下(xia)載(zai)的(de)嗎(ma)?Jlink和JTAG有(you)(you)什(shen)么(me)區別?為(wei)什(shen)么(me)PC上(shang)要(yao)(yao)裝個(ge)(ge)JTAG軟件(jian)而Jlink不用?程序(xu)的(de)編(bian)譯和鏈接(jie)是(shi)(shi)怎么(me)樣的(de)?為(wei)什(shen)么(me)內(nei)核(he)鏡(jing)像(xiang)(xiang)要(yao)(yao)下(xia)載(zai)內(nei)存(cun)的(de)某個(ge)(ge)地址(zhi)?換個(ge)(ge)地址(zhi)行(xing)不行(xing)?為(wei)什(shen)么(me)我們編(bian)寫的(de)程序(xu)要(yao)(yao)在(zai)有(you)(you)OS的(de)環境下(xia)運(yun)行(xing),在(zai)ARM開(kai)發板裸機環境下(xia),你(ni)能(neng)寫一個(ge)(ge)跑起來的(de)程序(xu)嗎(ma)?只(zhi)有(you)(you)對這些問(wen)題深(shen)入(ru)思考,你(ni)才會對嵌入(ru)式有(you)(you)一個(ge)(ge)更深(shen)的(de)認識(shi),超越(yue)了(le)平臺,一通百通。
80%的嵌入式(shi)知識和技能,其實(shi)跟硬(ying)件(jian)平臺(tai)無關(guan)
嵌入(ru)式開發需要的(de)知識體系和技能(neng),80%其實跟硬件平(ping)臺無(wu)(wu)沒有無(wu)(wu)關系的(de)。比如計算機系統原(yuan)理(li)(li)、編程(cheng)技能(neng)、程(cheng)序的(de)編譯鏈(lian)接、你對Linux內核的(de)理(li)(li)解、設(she)備模型、驅動架構、項(xiang)目管理(li)(li)等(deng)等(deng)。
真正跟(gen)(gen)硬(ying)件(jian)平(ping)臺(tai)(tai)有關的(de),比(bi)如驅動(dong)開(kai)發(fa),上面的(de)框(kuang)架是跟(gen)(gen)平(ping)臺(tai)(tai)無關的(de),下面跟(gen)(gen)各個硬(ying)件(jian)平(ping)臺(tai)(tai)的(de)適配(pei)部分,可能跟(gen)(gen)硬(ying)件(jian)平(ping)臺(tai)(tai)就有關系了,寄(ji)存器配(pei)置、開(kai)發(fa)板硬(ying)件(jian)配(pei)置等。而對于嵌入(ru)式工程師來說,尤其是驅動(dong)開(kai)發(fa)工程師,等你工作后,你會發(fa)現,跟(gen)(gen)應用開(kai)發(fa)相(xiang)比(bi),真正要寫的(de)代(dai)碼量(liang)(liang)很少(shao),往往只需(xu)要改(gai)幾行代(dai)碼。但是往往這(zhe)幾行的(de)代(dai)碼量(liang)(liang),需(xu)要你深厚的(de)背景(jing)知(zhi)識:硬(ying)件(jian)知(zhi)識、通信協議、對芯片(pian)、開(kai)發(fa)平(ping)臺(tai)(tai)資源(yuan)掌握(wo)、對Linux內(nei)核架構、設備模型、驅動(dong)框(kuang)架的(de)理解,這(zhe)些才是嵌入(ru)式工程師的(de)核心競爭力。
如果你(ni)看到很(hen)多廣告還在(zai)(zai)以開發板或者平(ping)臺作為噱(xue)頭,能(neng)(neng)拿(na)多少工資作為宣傳,這時(shi)候(hou)你(ni)的(de)(de)(de)腦(nao)海里要(yao)有這種(zhong)意(yi)識,這是(shi)(shi)一(yi)種(zhong)推廣宣傳。工資多少是(shi)(shi)由你(ni)自(zi)(zi)己的(de)(de)(de)水(shui)(shui)平(ping)和(he)市(shi)場大行情決(jue)定的(de)(de)(de),雖然在(zai)(zai)面試時(shi)HR會(hui)(hui)對(dui)你(ni)本身的(de)(de)(de)水(shui)(shui)平(ping)評估(gu)有一(yi)些誤(wu)差,但是(shi)(shi)要(yao)相信,時(shi)間會(hui)(hui)證明(ming)你(ni)自(zi)(zi)己的(de)(de)(de)真實價值,不(bu)斷提(ti)(ti)高(gao)自(zi)(zi)己的(de)(de)(de)知識水(shui)(shui)平(ping)和(he)技(ji)(ji)(ji)能(neng)(neng)才是(shi)(shi)王道。真正的(de)(de)(de)技(ji)(ji)(ji)術需要(yao)自(zi)(zi)己花時(shi)間慢慢吸收、積累、消化(hua),內化(hua)為自(zi)(zi)己的(de)(de)(de)知識體系和(he)技(ji)(ji)(ji)能(neng)(neng)。外在(zai)(zai)的(de)(de)(de)心靈(ling)雞湯或高(gao)煲(bao)老鴨(ya)湯,只(zhi)能(neng)(neng)讓你(ni)一(yi)時(shi)地熱情高(gao)漲,產生暫(zan)時(shi)的(de)(de)(de)錯覺,并不(bu)能(neng)(neng)真正的(de)(de)(de)提(ti)(ti)高(gao)技(ji)(ji)(ji)能(neng)(neng)。

