嵌入式的定義和舉例分析
目前國內一個普遍被認同的定義是:以應用為中心、以計算機技術為基礎,軟件硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
說白了就是先設計硬件,然后根據需求編寫能在該硬件上運行的軟件,就成了所謂的“智能硬件”。
或者說得還不夠明白,那行,我們說一說具體的嵌入式產品有哪些,嵌入式是做什么的:
傳統嵌入式產品:空調主控模塊、冰箱主控模塊、家用遙控器、智能手機、教學投影儀、音響系統、雷達系統、路由器等等;
前沿嵌入式產品:無人機、智能音響、機器人控制、城市天眼系統、智能家具、自動駕駛汽車、掃地機器人、手環等等;
一起看一些前沿的嵌入式產品!
下面是大疆無人機,可應用在高空拍攝、軍事偵查、高空作業、自動巡邏、農業工作、礦業勘測、地形測繪等方面。
下面是自動駕駛汽車,自動駕駛是一個前沿的科技,在我國還沒本真正實施,不僅是技術方面,它還得得到政府支持和認同。
看完這些前沿科技產品后可發現,這些形形色色的“高端產品”都離不開嵌入式技術,離不開傳感器技術,離不開軟件程序。
那么我現在可以告訴你,嵌入式開發的工作就是去開發以上等一系列產品,這就是嵌入式,相信此刻你對嵌入式行業已有“形而上學”的了解。
嵌入式工程師在企業工作的真實內容
嵌入式軟件開發具體可以分三類:
嵌入式驅動工程師:編寫和移植各種芯片驅動(如音頻芯片),優化硬件設備驅動(如溫濕度傳感器),得精通各種硬件接口協議(如I2C協議)、系統調度、信號量、鎖機制等等,開發難度。該類開發者一般是軟硬件綜合型人才,一般的嵌入式驅動工程師指Linux上的驅動開發工程師,需要精通Linux驅動框架(platform框架、input子系統框架等),結合芯片本身去編寫驅動,驅動的好壞很大程度上決定一個產品的好壞。
業界對驅動人才的定義是三年才算入門,可見此門檻之高。
嵌入式系統工程師:主要是編寫固件,根據不同平臺移植操作系統,根據應用場景來優化系統,需要熟悉整個操作系統組成與調度,對固件的穩定性高求很高,如果系統不穩定,驅動和應用也是白做的。
嵌入式應用工程師:編寫業務邏輯程序,調用驅動工程師提供的接口控制設備,軟件開發過程所涉內容范圍非常廣,主要使用C語言開發,但經常會涉及C++、Java、python、Java、PHP等各類語言以及各種腳本語言、數據庫、前端后臺、各種通訊協議、甚至一些從來沒聽過的協議或概念。這需要很強的學習能力,該職位也是各大公司需量的,一般10人的開發小組,驅動開發與系統開發與應用開發的比例是1:2:7。
根據我的經驗,世界上可以分成兩種嵌入式工程師,一種是大公司的嵌入式工程師,另一種是小公司的嵌入式工程師,我知道這樣分類很不妥,但并非毫無道理,請聽我一一下概述:
大公司:大公司的特色是什么?答案:人多!
人多導致的后果是什么?答案:項目分工非常細,都遵循“術業有專攻”這一哲學道理。例如職位是嵌入式驅動開發,那么大公司可能還會細分嵌入式顯示屏驅動工程師、嵌入式音頻驅動工程師、嵌入式電源驅動工程師等。在大公司記住一點,你做的東西都是很“精”的;同時,大公司的薪資水平和福利也是相當可觀的,有完善的晉升路線,離職率一般不高。
小公司:小公司的特色是什么?答案:人少!
人少導致的后果是什么?答案:項目分工不明確,什么都得干,它給你灌溉的思想是“小陳,我們培養的是綜合性人才,在這里你就是全棧工程師”。估計很多人都沒聽明白,意思是說這里人少活多,你什么都得干。小公司才不會管你是嵌入式驅動工程師還是嵌入式應用工程師(有的公司還是區分的,的確不能以片蓋全)。
小公司還有一個特色就是:“節奏快”,大公司里面可能開展一個項目會花上幾個月的時間或者更長,在小公司是不存在的,領導都是指望著你幾天或者兩三周完成。
的確,在小公司你可以得到飛速的進步,很強的綜合性技能,前提是比人家花出更多的時間,把每一個項目理解清楚,而不是應付心態。堅持下來,兩年后必能獨當一面。
小公司提供給應屆生的薪資水平相對與到大公司來說要低,其福利不完善和晉升路線也一般比較模糊,所以小公司的離職率會比較高,經常出現兩年三跳的情況。
還有一個經驗分享給年輕人:無論哪種語言,程序代碼只是一個簡單的工具,真正留下的只有原理、協議、框架、思維。
嵌入式發展前景與當今狀況
目前的嵌入式開發更傾向于智能化,也就是我們所說的智能硬件(硬件+軟件),從現在各種前沿的嵌入式產品來看的確如此,嵌入式產品的一個發展趨勢是更傾向與自動化控制和人機交互,而不是強調“算法”這一塊。
要區分你僅僅是一名嵌入式工程師而不是算法工程師,什么一大堆“人工智能”、“阿爾法狗”、“深度學習”、“神經網絡”都不需要深入理解,那是研究生、博士生做的。
筆者并不是說你的能力不足,而是“術業有專攻”,這并不是一名嵌入式工程師的工作量,你需要做的僅僅是與他們的“云端大腦”進行對接,調用他們API就完事了。
由于人工智能、深度學習、神經網絡、區塊鏈、大數據等先進學科的崛起,很多人都產生質疑:“嵌入式還有發展前景嗎”?
這個問題我在這里可以很肯定地告訴你:“嵌入式有很好的發展前景,前沿嵌入式技術即將崛起,或者說已經崛起”。
的確,人工智能、大數據這些學科會給嵌入式帶來沖擊,就目前來看,大學生更傾向與python編程語言、機器學習這一塊,而嵌入式學者的確比往年有所下降。
但學者少了并不代表他的需求就少了,并不代表他的薪資水平下降了,目前的一個嵌入式技術更傾向于與智能學科相結合的趨勢。
以百度機器人為例,機器人的核心是大腦,即是“數據和算法”,但機器人大腦想機器人身軀能夠像人類一樣活動,能說會道,行走自如,那么就必須得依靠嵌入式技術。
這就是我所說的嵌入式+智能學科應用,從長久來看,嵌入式只會越來越火,智能學科的崛起必定帶動新型的嵌入式技術發展。
嵌入式工程師應具備哪些能力
據調查顯示,現在有越來越多工程師的工作同時牽涉硬件與軟件技術,需要軟硬件技術能力兼備。同時嵌入式技術日進千里,工程師要如何確保自己學習到的新技術是關鍵的?
1.學習利用搜索引擎
不要閉門造車,要善用開放源碼世界的信息,很多常見的設計問題其實透過因特網就能找到同領域菁英貢獻的程序代碼;嵌入式工程師們要走出自己的小世界擁抱社群,與同領域的其他工程師們相互交流、互相幫助,而這也是開放源碼世界的精神。
2.離開舒適圈!
不斷更新并提升原本擅長的技術雖然很重要,但嵌入式工程師若能擴展自己的知識領域會更有益。走出舒適圈,挑戰自我、去學習原本不熟悉的東西,包括工程以外的知識,例如與客戶、同事之間的互動,將會收獲良多。
3.熟悉實時操作系統(RTOS)
目前產業界對于熟悉RTOS的工程師需求很高,也愿意提供更高的薪資水平;因此他鼓勵沒有接觸過RTOS的嵌入式工程師從一些較小型的系統著手,累積相關技術經驗。
4.培養多元化技能與系統觀
原本從事較小型系統架構(例如MCU)開發的工程師,可以開始去熟悉更大的系統(例如Linux驅動程序),反之亦然。嘗試著去開發手機應用程序、或者是學習后端服務器的相關技術,能開啟完全不同的觀點;建議工程師去熟悉開放性硬件,現在市面上有不少現成的開發板,能讓工程師專注于學習獨特算法的開發。
5.要能熟悉開放源碼軟件
客戶往往會要求在系統中整合一大堆軟件,因此所有的嵌入式工程師需要熟悉各種軟件;工程師應避免只專長單一領域,因為那可能會阻礙你的成長。對嵌入式工程師來說,確保自己對軟硬件技術都很了解,是非常寶貴的價值。
6.建立系統級的工程思維
嵌入式工程師擁有系統導向的思維是很重要的,有不少開發案遇到問題,就是因為沒有在開發初期充分考慮基準、驗證策略以及兼容性驗證計劃等項目;此外每個嵌入式工程師都應該具備優良的項目管理技巧,力求準時完成負責的項目。具備能明智因應技術與項目風險的能力,對職業生涯發展會很有幫助。
7.要能明確表達自己的想法與意見透過文字或繪圖
往往有些菜鳥工程師無法清晰表達自己的想法,因為抓不到重點,而的解決方法是練習將之圖形化,例如畫出流程圖。這聽起來好像有點過時,但有時利用各種圖框組合來整理自己的思緒、表達想法會是很有用的,例如iPad的iThoughts應用程序。