10年老兵!從大學(xué)畢業(yè)生到嵌入式系統(tǒng)工程師的修煉之道……
一、什么是嵌入式產(chǎn)品系統(tǒng)?
嵌入式系統(tǒng)是一種用來控制特定的設(shè)備、實現(xiàn)特定功能,以MCU或微處理器、片上系統(tǒng)(SOC)作為核心,軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計算機(jī)系統(tǒng)。
通常,嵌入式系統(tǒng)是一個控制程序存儲在ROM中的嵌入式處理器控制板。
嵌入式系統(tǒng)的核心是由一個或幾個預(yù)先編程好以用來執(zhí)行少數(shù)幾項任務(wù)的微處理器或者M(jìn)CU組成。與通用計算機(jī)能夠讓用戶自由安裝軟件不同,嵌入式系統(tǒng)上的軟件通過編程器燒寫到ROM或Flash中,通常是暫時不變的;所以經(jīng)常把嵌入式系統(tǒng)中的軟件稱為“固件”。
我們身邊常見的手表、洗衣機(jī)、照相機(jī)、微波爐、汽車等都使用了嵌入式系統(tǒng),有的比較簡單由單個前后臺程序?qū)崿F(xiàn)整個控制邏輯,功能比較復(fù)雜的還包含嵌入式操作系統(tǒng)。
二、嵌入式系統(tǒng)開發(fā)做些什么?
1、硬件開發(fā)。 分析產(chǎn)品需求,選擇適合系統(tǒng)需求的MCU或片上系統(tǒng)(SOC)以及外圍的基本元器件(電阻、電容、電感),利用CAD(計算機(jī)輔助設(shè)計)軟件設(shè)計電路原理圖,PCB圖,當(dāng)然硬件設(shè)計還包括芯片設(shè)計,F(xiàn)PGA,CPLD的應(yīng)用。2、嵌入式軟件開發(fā)。 在硬件電路板完成設(shè)計后,根據(jù)嵌入式系統(tǒng)要實現(xiàn)的功能,利用集成開發(fā)環(huán)境,用匯編、C/C++等高級語言,編寫程序去實現(xiàn)硬件功能,最終實現(xiàn)整個嵌入式系統(tǒng)的特定功能。
3、軟硬件連調(diào) 、測試,BUG排除,直到產(chǎn)品穩(wěn)定的進(jìn)行批量生產(chǎn)。
4、做好軟件的版本管理, 根據(jù)功能需求不斷升級和更新軟件;
?
三、嵌入式系統(tǒng)的應(yīng)用領(lǐng)域
工業(yè)控制、交通管理、信息家電、智能家居、POS網(wǎng)絡(luò)、環(huán)境工程、國防航空、物聯(lián)網(wǎng)??梢哉f,嵌入式系統(tǒng)在我們的時代無處不在。?
四、嵌入式系統(tǒng)開發(fā)必備的知識體系
- 數(shù)字電路
- 計算機(jī)技術(shù),計算機(jī)的硬件架構(gòu)
- MCU微處理器架構(gòu)
- 大規(guī)模集成電路(芯片)應(yīng)用
- 熟練掌握一門高級編程語言,C或C++在嵌入式系統(tǒng)中應(yīng) 用比較廣泛,個人認(rèn)為,C語言是萬言之父,嵌入式系統(tǒng)開發(fā)的第一編程語言;
- 數(shù)據(jù)結(jié)構(gòu)和算法、操作系統(tǒng)、軟件工程、網(wǎng)絡(luò)、數(shù)據(jù)庫方面的知識
- 常用數(shù)字電路通訊接口,I2C、SPI、UART、USB。
- 通信協(xié)議及編程技術(shù):TCP/IP協(xié)議、802.11,Bluetooth, GPRS、GSM、CDMA等。
- 建議在開發(fā)中使用linux系統(tǒng),可以加深對操作系統(tǒng)的理解,熟悉并理解一種嵌入多實時操作系統(tǒng),如Vxworks,RTX,uCos、嵌入式linux。
- 離散數(shù)學(xué)
- 熟練掌握一種電路設(shè)計軟件,如Altium designer,Power PCB等。
- 良好的英文閱讀能力
?
五、嵌入式系統(tǒng)開發(fā)流程
嵌入式系統(tǒng)軟件開發(fā)常用平臺及工具:
- KEIL C51
- KEIL MDK
- IAR
- 51版,STM8版,STM32版,AVR版
- 嵌入式linux
- Arduino IDE
目前我們在使用的主流開發(fā)平臺是Arduino,Arduino開發(fā)平臺有以下優(yōu)勢:
無數(shù)全球開源的庫,使用C或C++均可以進(jìn)行開發(fā),全世界有無數(shù)工程師在為它貢獻(xiàn)開源代碼。
入門非常簡單容易,既適合業(yè)余的電子愛好者、創(chuàng)客、軟件工程師,也適合專業(yè)的電子嵌入式產(chǎn)品設(shè)計。
支持AVR的多款單片機(jī),STM32 、STM8的多款主流微處理器。
強(qiáng)大的資源庫讓你迅速實現(xiàn)你的產(chǎn)品原型。
?
六、嵌入式系統(tǒng)設(shè)計的職業(yè)規(guī)劃
職業(yè)規(guī)劃一:硬件工程師/電子工程師
初級階段(相關(guān)專業(yè)3個月到半年)-
熟悉電路原理圖,熟悉電子元器件種類,技術(shù)參數(shù),封裝等。
-
能根據(jù)電路原理圖進(jìn)行PCB布局、排板;
- 具備一定的電路板焊接技能;
能根據(jù)硬件設(shè)計原理框圖,元器件選型清單,在項目負(fù)責(zé)人的指導(dǎo)下繪制電路原理圖,繪制庫里沒有的元器件封裝,并能根據(jù)產(chǎn)品結(jié)構(gòu)安裝要求設(shè)計PCB各種外形,完成元器件布局,布線,知道完成整塊PCB板的設(shè)計,并能對接PCB生產(chǎn)商,完成PCB板的制作生產(chǎn)。
元器件選型采購 PCB樣板焊接,具備一定的焊接技能,焊接的過程中可以發(fā)現(xiàn)PCB設(shè)計中的問題和不太完美的地方,下次排板的時候進(jìn)行改進(jìn)。 電路板調(diào)試焊接可靠,板上的所有電源測試點正常,對接交付嵌入式軟件工程師。
高級階段
能根據(jù)項目或產(chǎn)品需求編寫整體設(shè)計方案,設(shè)計硬件系統(tǒng)框圖,完成實現(xiàn)電路功能所需的元器件選型,電路性能設(shè)計計算,可靠性分析與預(yù)計,產(chǎn)品成本核算,配合結(jié)構(gòu)工程師進(jìn)行產(chǎn)品的外殼設(shè)計,產(chǎn)品測試與檢驗標(biāo)準(zhǔn)制定,指導(dǎo)完成產(chǎn)品生產(chǎn)工藝制定。
職業(yè)規(guī)劃二:嵌入式軟件工程師
初級階段(相關(guān)專業(yè)3個月到半年)- 熟悉C語言的語法,數(shù)據(jù)結(jié)構(gòu)、指針、隊列、鏈表的這些C語言的基礎(chǔ)概念要有一個比較清晰的認(rèn)識;
- 能熟練使用一種基礎(chǔ)的嵌入式開發(fā)平臺,如KEIL、IAR、Arduino等,對怎么建立一個項目工程、編繹、鏈接、生成目標(biāo)代碼、如何把代碼燒寫到嵌入式硬件的MCU中,對這個流程要能熟練操作。
- 需要熟悉一種處理器、MCU的硬件組成,架構(gòu)、IO及外設(shè)的應(yīng)用、系統(tǒng)時鐘、運(yùn)行頻率、存儲代碼空間、堆、棧這些和編程相關(guān)的概念和知識一定要搞清楚。
- 具備讀和理解他人代碼的能力,能根據(jù)軟件流程圖和功能需求理清代碼的邏輯,要此基礎(chǔ)上要據(jù)功能變更對代碼進(jìn)行一些局部修改,并完成調(diào)試。
-
具備獨(dú)立編碼的能力,能根據(jù)軟件設(shè)計說明書、軟件開發(fā)需求獨(dú)立進(jìn)行一個產(chǎn)品或項目的程序框架構(gòu)思、代碼編寫、程序調(diào)試、軟硬件連調(diào)連測、Bug排除、功能交付。
-
能看懂嵌入式產(chǎn)品或項目的電路原理圖、清楚軟硬件在一個嵌入式產(chǎn)品的角色,用軟件去控制硬件、實現(xiàn)產(chǎn)品的整體功能;
-
能協(xié)助硬件工程師、產(chǎn)品經(jīng)理分析、排除和解決產(chǎn)品設(shè)計中存在的問題,實現(xiàn)軟硬件設(shè)計協(xié)同;
-
要能熟練掌握嵌入式硬件系統(tǒng)種常用的各種通信總線的編程和應(yīng)用,如I2C、SPI、USB、RS485、Modbus、CAN、以太網(wǎng)等。
-
至少熟悉一種嵌入式操作系統(tǒng)的架構(gòu)、能基于操作系統(tǒng)進(jìn)行一些較為復(fù)雜的項目編程,能較為清晰的理解嵌入式操作系統(tǒng)基于任務(wù)、進(jìn)程通訊的設(shè)計框架;并能在嵌入式操作系統(tǒng)下移植一些底層硬件的驅(qū)動程序。
-
建立軟件版本管理意識,能熟練利用一些工具進(jìn)行代碼版本管理;
- 具備一定的文檔編寫能力,如軟件流程圖、軟件測試說明書、軟件使用說明書等。
到這個階段,你已經(jīng)是一名合格的嵌入式軟件工程師了,接下來的工作除了不斷提升軟件代碼編寫的能力、效率,更重要是要提升你用軟件去解決實際問題的能力了。
-
能根據(jù)產(chǎn)品、項目的需求進(jìn)行較為復(fù)雜項目的軟件架構(gòu)設(shè)計、分析需求、整理和編寫軟件開發(fā)需求說明、編寫軟件設(shè)計功能說明書、能清晰的劃分軟件的各件功能模塊,組織團(tuán)隊進(jìn)行各個功能模塊的協(xié)同設(shè)計;
-
具備多人遵循共同的規(guī)則和接口協(xié)同編碼,并具備多人代碼的整合能力、代碼集成、BUG排除、系統(tǒng)連調(diào)能力;
-
能根據(jù)產(chǎn)品需求制定與其它硬件或軟件系統(tǒng)的通信協(xié)議、開發(fā)文檔,并組識進(jìn)行通信協(xié)議的編程實現(xiàn)、通信連調(diào)、具備與其它部門或公司的技術(shù)合作、協(xié)調(diào)、溝通能力。
-
具備專業(yè)、行業(yè)行業(yè)的英文技術(shù)文檔、論文、技術(shù)手冊的熟練、快速閱讀能力。
-
具備一定的互聯(lián)網(wǎng)、物聯(lián)網(wǎng)知識、對各種網(wǎng)絡(luò)通訊技術(shù)有豐富的知識積累,并能熟練運(yùn)用 ;如TCP/IP、WIFI、GSM、4G、LORA等等,具備連網(wǎng)類產(chǎn)品和項目的開發(fā)能力;
-
熟悉一種服務(wù)器或上位計算機(jī)的軟件設(shè)計架構(gòu),能理解和掌握面向?qū)ο缶幊?,理解嵌入式軟件編程和通用計算機(jī)軟件編程的區(qū)別和共同點,具備一定能通用計算機(jī)軟件設(shè)計能力,并能獨(dú)立實現(xiàn)計算機(jī)/服務(wù)器軟件和嵌入式系統(tǒng)軟件的通信、協(xié)同設(shè)計。
- 能熟練使用linux開源操作系統(tǒng),熟悉這種開源操作系統(tǒng)的架構(gòu)、常用命令操作、程序運(yùn)行機(jī)制,并能基于linux操作系統(tǒng)進(jìn)行軟件開發(fā)。
職業(yè)規(guī)劃三:系統(tǒng)架構(gòu)師
達(dá)到這個階段,就如它的名字一樣,架構(gòu),主要的工作就不是來進(jìn)行具體的軟件編碼了,當(dāng)然要達(dá)到這個水平,也是從編碼開始、了解細(xì)節(jié)、才能進(jìn)行架構(gòu)設(shè)計,因為編碼出現(xiàn)錯誤、影響的不過是一段代碼的執(zhí)行BUG。
但如果架構(gòu)也出現(xiàn)設(shè)計上錯誤或不合理,可能直接關(guān)系到一個產(chǎn)品或項目整體功能、性能、甚至是一個產(chǎn)品或項目研發(fā)的成敗。所以,一個好的系統(tǒng)架構(gòu)師,一定是一名優(yōu)秀的程序員。
-
到這個階段,如果你還在一個組織里,你已經(jīng)不太可能是孤軍奮戰(zhàn)了;在大企業(yè)里,你可能是一個技術(shù)主管,在小企業(yè)里,你應(yīng)該是技術(shù)總監(jiān)那一類的了,所以這個階段你除了擁用很好的技術(shù)功底,還要具備管理團(tuán)隊的能力了;
-
具備軟硬件協(xié)同進(jìn)行總體設(shè)計的能力、具備充分利用技術(shù)來解決問題的能力;
-
你需要站在公司的層面,對接業(yè)務(wù)、對接市場和客戶,根據(jù)市場和需求來設(shè)計產(chǎn)品或項目的實現(xiàn)技術(shù)路線、總體技術(shù)方案;
-
你需要站要整體的角度考慮產(chǎn)品項目的成本、按成本要求進(jìn)行技術(shù)路線優(yōu)化,充分利用好人資源、提高人效、降低研發(fā)成本,為公司創(chuàng)造效益;
- 你需要全方位擴(kuò)展你的知識面,對產(chǎn)品中所應(yīng)用到的技術(shù)都要有充分的風(fēng)險評估能力,要能解決團(tuán)隊在研發(fā)過程中出現(xiàn)的各種技術(shù)難題。
往期好文合集
最 后
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!