創(chuàng)新是海思的靈魂,也是海思得以快速發(fā)展的根本保障。隨著海思BACnet、LonWorks技術(shù)應(yīng)用領(lǐng)域的不斷拓展,越來越多地需要嵌入式產(chǎn)品開發(fā)、技術(shù)探索。
從技術(shù)實(shí)現(xiàn)上講,嵌入式的產(chǎn)品分為兩大類:一類沒有操作系統(tǒng)支持的;一類有操作系統(tǒng)的。就目前發(fā)展方向看,后一種是趨勢(shì)。前一種從程序?qū)崿F(xiàn)上可分為3層:硬件層,驅(qū)動(dòng)層,應(yīng)用層;后一種分為4層:硬件層,驅(qū)動(dòng)層,系統(tǒng)層,應(yīng)用層。所以嵌入式的開發(fā)大致需要嵌入式硬件開發(fā)、嵌入式驅(qū)動(dòng)開發(fā)、嵌入式系統(tǒng)開發(fā)、嵌入式軟件開發(fā)。下面談?wù)勄度胧介_發(fā)所要具備的基礎(chǔ)知識(shí)。
一、嵌入式開發(fā)人才分類
1、嵌入式硬件開發(fā):這是硬件工程師來做,一般出身為自動(dòng)化,電子,通信等專業(yè)。要求熟悉電路等知識(shí),非常熟悉各種常用元器件,掌握模擬電路和數(shù)字電路設(shè)計(jì)的開發(fā)能力,熟悉硬件開發(fā)模式和設(shè)計(jì)模式,熟悉各種芯片及外圍設(shè)備,熟悉8位16位32位處理器嵌入式硬件平臺(tái)開發(fā)。有的要求有FPGA的開發(fā)經(jīng)驗(yàn),精通常用的硬件設(shè)計(jì)工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般要有4~8層高速PCB設(shè)計(jì)經(jīng)驗(yàn)。
2、嵌入式驅(qū)動(dòng)開發(fā):這個(gè)可以硬件工程師來做,也可以軟件工程師來做,主要還是取決于設(shè)備。目前驅(qū)動(dòng)開發(fā),除非是簡單的設(shè)備驅(qū)動(dòng),實(shí)際上很多時(shí)候都是移植,所以更多的是需要掌握目標(biāo)平臺(tái)的硬件和系統(tǒng)特性。所以至少得掌握一些操作系統(tǒng)、系統(tǒng)結(jié)構(gòu)、計(jì)算機(jī)組成原理、數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)。熟悉嵌入式ARM/MIPS/PowerPC架構(gòu)。具有單片機(jī)、某種或多種32位嵌入式處理器的移植開發(fā)能力,熟悉bootloader過程,具有扎實(shí)的硬件知識(shí),理解硬件原理圖,能獨(dú)立完成相關(guān)硬件驅(qū)動(dòng)調(diào)試,能夠根據(jù)芯片手冊(cè)編寫軟件驅(qū)動(dòng)程序。如果涉及到網(wǎng)絡(luò)設(shè)備,或許還要掌握很多高層的網(wǎng)絡(luò)協(xié)議的原理。
3、嵌入式系統(tǒng)開發(fā):熟悉操作系統(tǒng)的原理是必不可少的,比如內(nèi)存管理,比如線程調(diào)度,比如文件系統(tǒng)等等;還要精通處理器體系結(jié)構(gòu)、指令集、尋址方式、調(diào)試、匯編和混合編程等方面的內(nèi)容;熟悉操作系統(tǒng)啟動(dòng)流程。對(duì)于linux,要熟悉Linux配置文件的修改,掌握內(nèi)核裁減、內(nèi)核移植、交叉編譯、內(nèi)核調(diào)試、啟動(dòng)程序Bootloader編寫、根文件系統(tǒng)制作和集成部署Linux系統(tǒng)等整個(gè)流程。這一塊要是真寫起來,困難程度那是相當(dāng)恐怖的,好在大多都是移植,很少聽說有公司要去開發(fā)個(gè)操作系統(tǒng)的。
4、嵌入式軟件開發(fā):沒有操作系統(tǒng)的話,程序一般不會(huì)特別復(fù)雜,如果有操作系統(tǒng)的支持,又和一般的軟件開發(fā)很接近,所以盡可以看作是搞桌面開發(fā)。這個(gè)要求就是熟悉系統(tǒng)的API,精通C語言的高級(jí)編程知識(shí),包括函數(shù)與程序結(jié)構(gòu)、指針、數(shù)組、常用算法、庫函數(shù)的使用等知識(shí)、數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)內(nèi)容;掌握面向?qū)ο缶幊痰幕舅枷耄约癈++語言的基礎(chǔ)內(nèi)容;精通嵌入式Linux下的程序設(shè)計(jì),精通嵌入式Linux開發(fā)環(huán)境,包括系統(tǒng)編程、文件I/O、多進(jìn)程和多線程、網(wǎng)絡(luò)編程、GUI圖形界面編程、數(shù)據(jù)庫;熟悉常用的圖形庫的編程,如QT、GTK、miniGUI、fltk、nano-x等,掌握各種應(yīng)用層的網(wǎng)絡(luò)協(xié)議使用,以及各種音視頻技術(shù)等。
二,嵌入式開發(fā)技能要求
1, 基礎(chǔ)技能
a) 開發(fā)平臺(tái)的熟悉,目前的嵌入式開發(fā)大多數(shù)是在linux或者類linux下的環(huán)境下進(jìn)行的,linux的使用應(yīng)該熟悉吧,shell腳本得會(huì)寫,配置文件得會(huì)改,GCC GDB 得會(huì)用,Make工具得會(huì)。
b) 比如項(xiàng)目管理工具的使用,會(huì)用CVS、SVN。
c) 數(shù)據(jù)結(jié)構(gòu)和算法,搞軟件開發(fā),要懂?dāng)?shù)據(jù)結(jié)構(gòu),會(huì)算法優(yōu)化,會(huì)衡量復(fù)雜度,這個(gè)不是要求啥算法都會(huì),啥數(shù)據(jù)結(jié)構(gòu)都記得住,最起碼得知道有那么種東西,有什么作用。
d) 編程語言,JAVA的異軍突起,很是震動(dòng)了編程語言界,但是在嵌入式開發(fā)下,C或者C++語言是必須的。當(dāng)然現(xiàn)在很多手機(jī)應(yīng)用完全用java寫的,如果你只想搞嵌入式的上層軟件開發(fā)又不想深入下去,只用JAVA也未嘗不可。關(guān)于匯編,嗯,這個(gè)可能挺難,畢竟跟具體的硬件架構(gòu)(主要是CPU)有關(guān),但是真的很有意思,而且在某些時(shí)候,它是不可替代的。
2, 特殊技能
a) 數(shù)字電路。主要是了解一些基本的電路知識(shí),如門電路、邏輯電路、存儲(chǔ)器、寄存器,為了更好的理解嵌入式芯片,存儲(chǔ)器,外圍設(shè)備等硬件的設(shè)計(jì),但往往在軟件開發(fā)中未必能用的到。因?yàn)榇蟛糠钟布继峁┝撕芡暾能浖涌凇?/span>
b) 操作系統(tǒng),這個(gè)說的是平臺(tái)上選用的操作系統(tǒng)。嵌入式產(chǎn)品操作系統(tǒng)是在太多了。但操作系統(tǒng)的內(nèi)部設(shè)計(jì)原理都是殊途同歸。首先要去學(xué)習(xí)的是操作系統(tǒng)原理,去了解進(jìn)程通信、內(nèi)存管理、文件系統(tǒng)等幾個(gè)重要的部分,因?yàn)檫@些在軟件開發(fā)尤其是內(nèi)核驅(qū)動(dòng)開發(fā)時(shí)會(huì)用到。接下來可以去熟悉至少一種主流的操作系統(tǒng),Linux是一個(gè)很好的選擇,去了解它的內(nèi)核架構(gòu),設(shè)備驅(qū)動(dòng)架構(gòu),如何去編譯,裁剪,編寫應(yīng)用程序,以及如何使用在具體的嵌入式產(chǎn)品上
c) 計(jì)算機(jī)的組成/微機(jī)原理,主要是為了了解微型計(jì)算機(jī)的硬件工作原理,明白CPU、總線、I/O、存儲(chǔ)器等一些關(guān)鍵結(jié)構(gòu)是怎么工作的,雖然是很枯燥的知識(shí),但是對(duì)熟悉外圍設(shè)備硬件工作方式,及操作系統(tǒng),軟件架構(gòu)的設(shè)計(jì)及優(yōu)化相當(dāng)關(guān)鍵。
3, 擴(kuò)展的能力
a) 通信協(xié)議,對(duì)于非應(yīng)用層的通信協(xié)議,很多操作系統(tǒng)是沒有網(wǎng)絡(luò)部分的,但是在很多方面它又是由操作系統(tǒng)提供。當(dāng)然這些下層通信協(xié)議,貌似不用太關(guān)心,因?yàn)樘嗟拈_源協(xié)議棧了。應(yīng)用層的網(wǎng)絡(luò)協(xié)議可能就要關(guān)心了,比如http,ftp,rtsp,rtmp,mms等等。
b) 音視頻處理,比如文件封裝啊,音視頻的編解碼啊,各種音視頻的標(biāo)準(zhǔn)啊,還有流媒體什么的。Ffmpeg是一個(gè)很好的東西,建議學(xué)習(xí)一下。
c) 信息安全。
d) 數(shù)據(jù)庫,唉,嵌入式設(shè)備能力越來越強(qiáng)啊!再搞搞我看也不用交叉編譯了。