當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > IT培訓(xùn)問(wèn)題庫(kù) > 如何評(píng)價(jià)搞嵌入式底層的看不起嵌入式上層應(yīng)用開(kāi)發(fā)?
在攻城獅、程序猿的圈子里,文人相輕的現(xiàn)象可是非常普遍的,在程序設(shè)計(jì)的各個(gè)領(lǐng)域里都有著錯(cuò)綜復(fù)雜的「鄙視鏈」。從硬件到軟件,從程序語(yǔ)言到編輯器、從算法到操作系統(tǒng)。
做fpga表示誰(shuí)都瞧不起。瞧不起搞芯片的,天天折騰那幾個(gè)觸發(fā)器與非門,兩年就寫那么幾行代碼,真是浪費(fèi)生命,關(guān)鍵是做出來(lái)的東西還不能改。
做芯片的瞧不起搞驅(qū)動(dòng)的,有毛意思,天天就對(duì)著我給的寄存器配置一下,讀寫一下,里面的原理實(shí)現(xiàn)一竅不通,關(guān)鍵問(wèn)題定位還要我來(lái)搞。
做驅(qū)動(dòng)的瞧不起搞算法的,一副高冷的樣子,還不是對(duì)著別人的paper翻譯一下,那幾個(gè)公式又不是你推出來(lái)的,都是對(duì)著別人好多年前的公式抄一通,有啥牛逼的,最后資源優(yōu)化架構(gòu)優(yōu)化還不如靠我。
做算法的瞧不起搞上層的,只會(huì)調(diào)調(diào)api,連內(nèi)存在哪里都不知道。
做arm-linux的瞧不起搞單片機(jī)程序的,來(lái)個(gè)多任務(wù)多并行分分鐘把你搞死機(jī),管你上什么操作系統(tǒng)還是裸機(jī)。
做c語(yǔ)言瞧不起搞java的
做linux的瞧不起搞windows的
云云...
這種現(xiàn)象的存在其實(shí)是每個(gè)領(lǐng)域的開(kāi)發(fā)人員只看到自己工作的價(jià)值,只是從自己工作的角度去理解未知的領(lǐng)域或者知識(shí),就像FPGA最大的特點(diǎn)是在于可編程性,電路的可訂制性及保密性,那它適應(yīng)的領(lǐng)域就必然是那些需要對(duì)電路進(jìn)行專門設(shè)計(jì)的領(lǐng)域,通常在軍工,電力儀表行業(yè)應(yīng)用比較廣。
一般的領(lǐng)域,通用的電路就可以滿足用戶對(duì)硬件需求,所以我們看到通用的處理器在市場(chǎng)中得到了廣泛的應(yīng)用,開(kāi)發(fā)人員可以不需要把時(shí)間花在電路設(shè)計(jì)上,而把精力更多的放在如何根據(jù)用戶需求快速開(kāi)發(fā)出符合要求的產(chǎn)品上。
FPGA和芯片還是屬于硬件的范疇,最終做成能滿足用戶需求的產(chǎn)品,僅有硬件還是不夠的,如果沒(méi)有軟件,硬件的意義的作用如何發(fā)揮,這就是軟件存在的意義。軟件之于硬件就像精神之于物質(zhì),意識(shí)之于大腦。
軟件大體可以分為系統(tǒng)軟件和應(yīng)用軟件,系統(tǒng)軟件就是我們常說(shuō)的操作系統(tǒng),在嵌入式領(lǐng)域應(yīng)用最廣泛的是Linux,在個(gè)人桌面最廣泛的是windows,而題中所說(shuō)驅(qū)動(dòng)開(kāi)發(fā)就屬于系統(tǒng)軟件的范疇。
先說(shuō)下驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用開(kāi)發(fā)的區(qū)別。
以IPCamera為例,應(yīng)用開(kāi)發(fā)關(guān)注的是如何管理用戶連接,如何對(duì)音視頻數(shù)據(jù)進(jìn)行緩沖管理,如何處理多進(jìn)程或者多線程的并發(fā)等。
涉及到的知識(shí)可能就是文件io操作,多線程,網(wǎng)絡(luò)編程,有C語(yǔ)言的基礎(chǔ),掌握相關(guān)的系統(tǒng)調(diào)用(文件,線程,網(wǎng)絡(luò),同步機(jī)制)等操作接口就可以了。
而做IPCamera的驅(qū)動(dòng)重點(diǎn)就需要關(guān)注芯片的工作原理,如何在Linux操作系統(tǒng)把芯片驅(qū)動(dòng)起來(lái),對(duì)于驅(qū)動(dòng)的開(kāi)發(fā)者來(lái)說(shuō)除了需要具備操作系統(tǒng)原理相關(guān)的知識(shí)外還需要了解硬件相關(guān)的基本知識(shí),所以驅(qū)動(dòng)的要求會(huì)比較高。這也是為什么驅(qū)動(dòng)開(kāi)發(fā)的工資待遇會(huì)比招應(yīng)用開(kāi)發(fā)人員的高的原因,因?yàn)閷?duì)開(kāi)發(fā)者的要求高。
如果從嵌入式產(chǎn)品開(kāi)發(fā)周期的角度看每個(gè)階段都是不可或缺的,前期硬件pcb板的設(shè)計(jì),當(dāng)單板從產(chǎn)線上下來(lái)后,底層驅(qū)動(dòng)才開(kāi)始調(diào)試,這個(gè)階段也很重要,只有當(dāng)引導(dǎo)程序(bootloader)操作系統(tǒng)boot up成功之后,才能進(jìn)行后面的應(yīng)用程序開(kāi)發(fā)。
應(yīng)用程序也很重要,因?yàn)楹陀脩舻男枨笞罱瑧?yīng)用程序開(kāi)發(fā)好后,還要有測(cè)試團(tuán)隊(duì)負(fù)責(zé)給出測(cè)試數(shù)據(jù),對(duì)程序功能進(jìn)行測(cè)試,給出結(jié)果,開(kāi)發(fā)才能根據(jù)結(jié)果對(duì)程序進(jìn)行優(yōu)化調(diào)整,最終完全符合客戶的需求。
所以從產(chǎn)品開(kāi)發(fā)的完整周期看待硬件,軟件,驅(qū)動(dòng)和應(yīng)用,才不會(huì)狹隘的認(rèn)為只有某個(gè)部分比較重要。
(推薦《程序員的十層樓》,可以幫助程序員為找到自己的位置,到底在哪一層樓。)