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