搞硬件工資比搞軟件的低?是工作難度決定的
最近看到一件電子業(yè)界悲?。阂晃徊┦慨厴I(yè)的高才生,在硅谷排名前十的一家半導(dǎo)體公司工作近20年,最近工資被他女兒超過(guò)了。他女兒加州理工本科畢業(yè),在Facebook工作了2年。
這不禁讓人想到了那個(gè)老生常談的話題——做硬件有前途還是做軟件有前途?根據(jù)近些年調(diào)查數(shù)據(jù)顯示,單從美國(guó)方面看,電子工程師的工資增長(zhǎng)不僅沒(méi)有跟上軟件工程師的增長(zhǎng)速度,甚至還有下降。
個(gè)中原因,除了全球互聯(lián)網(wǎng)發(fā)展迅速,人才供求關(guān)系決定價(jià)格外,軟件行業(yè)基本靠人(硬件需要更多的設(shè)備投入),所以軟件工程師的薪資也相對(duì)更豐厚。另外硬件行業(yè)整體上已經(jīng)進(jìn)入Turnkey時(shí)代,同質(zhì)化嚴(yán)重,IC廠家會(huì)針對(duì)性的提供完善的、集成的芯片解決方案,這樣給硬件設(shè)計(jì)留出的發(fā)揮空間少之又少。
大多數(shù)嵌入式系統(tǒng)的硬件平臺(tái)。它包括兩部分:
1、以通用處理器為中心的協(xié)議處理模塊,用于網(wǎng)絡(luò)控制協(xié)議的處理;
2、以數(shù)字信號(hào)處理器(DSP)為中心的信號(hào)處理模塊,用于調(diào)制、解調(diào)和數(shù)/模信號(hào)轉(zhuǎn)換。
嵌入式系統(tǒng)的核心部件是各種類型的嵌入式處理器,目前據(jù)不完全統(tǒng)計(jì),當(dāng)前全世界嵌入式處理器的品種總量已經(jīng)超過(guò)1000多種,流行體系結(jié)構(gòu)有30幾個(gè)系列。由于嵌入式系統(tǒng)設(shè)計(jì)的差異性極大,因此選擇是多樣化的。
嵌入式處理器的功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等均受到應(yīng)用要求的制約。在選擇處理器時(shí)要考慮的主要因素在于調(diào)查上市的CPU供應(yīng)商、處理器的處理速度、技術(shù)指標(biāo)、處理器的低工耗、處理器的軟件支持工具、處理器是否內(nèi)置調(diào)試工具、處理器供應(yīng)商是否提供評(píng)估板等。
嵌入式軟件系統(tǒng)
盡管嵌入式系統(tǒng)有著無(wú)比廣闊的市場(chǎng)需求和發(fā)展前景,但嵌入式系統(tǒng)的發(fā)展多年來(lái)卻經(jīng)歷了一個(gè)曲折和痛苦的歷程。隨著微處理器的產(chǎn)生,價(jià)格低廉、結(jié)構(gòu)小巧的CPU和外設(shè)連接提供了穩(wěn)定可靠的硬件架構(gòu),那么限制嵌入式系統(tǒng)發(fā)展的瓶頸就突出表現(xiàn)在了軟件方面。
從運(yùn)行平臺(tái)來(lái)分,嵌入式軟件可以分為:
1、運(yùn)行在開(kāi)發(fā)平臺(tái)上的軟件:設(shè)計(jì)、開(kāi)發(fā)、測(cè)試工具等
2、運(yùn)行在嵌入式系統(tǒng)上的軟件:嵌入式操作系統(tǒng)、應(yīng)用程序、驅(qū)動(dòng)程序及部分開(kāi)發(fā)工具
可用于嵌入式系統(tǒng)軟件開(kāi)發(fā)的操作系統(tǒng)很多,但選擇一個(gè)適合的操作系統(tǒng),關(guān)鍵是從操作系統(tǒng)提供那些開(kāi)發(fā)工具、操作系統(tǒng)向硬件接口移植的難度、操作系統(tǒng)的內(nèi)存要求、開(kāi)發(fā)人員是否熟悉此操作系統(tǒng)及其提供的API、操作系統(tǒng)是否有提供硬件的驅(qū)動(dòng)程序、操作系統(tǒng)是否具有可剪裁、操作系統(tǒng)的實(shí)時(shí)性等方面進(jìn)行考慮。
嵌入式應(yīng)用軟件是實(shí)現(xiàn)嵌入式系統(tǒng)功能的關(guān)鍵,為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式軟件一般都固化在存儲(chǔ)器芯片或單片機(jī)本身中,而不是存儲(chǔ)于磁盤等載體中,軟件代碼要求高質(zhì)量、高可靠性和高實(shí)時(shí)性。
那么……
現(xiàn)在的情況是做硬件簡(jiǎn)單,做軟件難嗎?
或許是我個(gè)人對(duì)于硬件的偏見(jiàn)吧!但根據(jù)我多年來(lái)的觀察,在嵌入式領(lǐng)域的硬件設(shè)計(jì)一向比軟件設(shè)計(jì)更簡(jiǎn)單。我在此所指的主要是指數(shù)字硬件電路設(shè)計(jì),它能利用具有清楚定義輸入與輸出的邏輯模塊。幾年前,你只需利用幾個(gè)LSI(大規(guī)模整合)與MSI(中等規(guī)模整合)組件,加上一些內(nèi)存,然后連接在印刷電路板(PCB)上即可。這種硬件設(shè)計(jì)(至今仍然)是非常簡(jiǎn)單的。
如今,你可能會(huì)使用FPGA、內(nèi)存,甚至一顆MCU。你還會(huì)用到一、兩個(gè)電源模塊與連接器,以便連接到其他板卡或機(jī)箱。你甚至還可能利用一款無(wú)線外圍組件或一顆模擬數(shù)字轉(zhuǎn)換器(ADC)。
無(wú)論如何,這些都是非常明確定義的“模塊”,具有標(biāo)準(zhǔn)的接口與總線。即使是FPGA,你也只是用了相同的設(shè)計(jì)手法——除非你得將幾個(gè)預(yù)定義的功能(IP核心)連接至標(biāo)準(zhǔn)的總線、內(nèi)存以及幾個(gè)固定功能的外圍。
這樣的設(shè)計(jì)模式相當(dāng)簡(jiǎn)單,而且已經(jīng)成功實(shí)現(xiàn)數(shù)十年了。只需連接一些明確定義的高性能模塊(但我們?cè)诮M件或IP核心中整合的功能越多,這些模塊也越變?cè)酱?, ?就可以創(chuàng)造出所需的系統(tǒng)或子系統(tǒng)。一個(gè)搭載FPGA以及標(biāo)準(zhǔn)組件與連接器的典型電路板案例是Diligent Inc.針對(duì)Xilinx Zynq SoC ?FPGA系列推出的Zybo開(kāi)發(fā)工具包。
硬件設(shè)計(jì)并不難
然而,當(dāng)你必須為MCU或FPGA編寫(xiě)軟件時(shí),最棘手部份才算開(kāi)始。硬件設(shè)計(jì)人員解決問(wèn)題的方式可能是先問(wèn):“哪里有明確定義的模塊可讓我用來(lái)打造軟件設(shè)計(jì)?”
我們會(huì)期待有高性能模塊所用的接口、預(yù)先定義的內(nèi)存模塊來(lái)保存各種結(jié)構(gòu)、圖表與初始化向量。有許多時(shí)候,硬件模塊能夠輕松地利用參數(shù)與初始化緩存器加以客制化。但專為通用算法與結(jié)構(gòu)所用的客制化編碼模塊在哪里呢?
現(xiàn)在,我們也許能幸運(yùn)地找到馬達(dá)控制算法或一些相當(dāng)高階的數(shù)字訊號(hào)處理功能,但擁有無(wú)縫連接主模塊的通用接口或內(nèi)存緩沖結(jié)構(gòu)的機(jī)會(huì)有多大?也許目前有許 ? 多驅(qū)動(dòng)器可用于連接至UART或以太網(wǎng)絡(luò)(Ethernet)端口等接口組件,但那些通常只是較低階的功能,主要在于使其易于控制MCU或FPGA上的硬件。
所以,我認(rèn)為嵌入式軟件十分復(fù)雜,因?yàn)楣餐O(shè)計(jì)“流程”必須從頭開(kāi)始打造。嵌入式軟件設(shè)計(jì)并不容許直接套用硬件的設(shè)計(jì)“流程”——像硬件世界一樣提供一連串具有通用“總線”的標(biāo)準(zhǔn)軟件“組件”選擇。
但我經(jīng)常只是想編寫(xiě)幾個(gè)控制部份,可能再加上一種“特殊配方”的算法。
數(shù)字硬件領(lǐng)域可以采用這種模塊化的方式,為什么在軟件設(shè)計(jì)時(shí)卻不能?