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