嵌入式系統(tǒng)的學習誤區(qū)---蘇州大學王宜懷
關于嵌入式系統(tǒng)的學習方法,因?qū)W習經(jīng)歷、學習環(huán)境、學習目的、已有的知識基礎等不同,可能在學習順序、內(nèi)容選擇、實踐方式等方面有所不同。但是,應該明確哪些是必備的基礎知識,哪些應該先學,哪些應該后學,哪些必須通過實踐才能獲得的,哪些是與具體芯片無關的通用知識,哪些是與具體芯片與開發(fā)環(huán)境相關的知識。
由于微處理器與微控制器種類繁多,也可能由于不同公司、不同機構(gòu)出于自身的利益,做出一些誤導性宣傳,特別是我國嵌入式微控制器制造技術的落后及其他相關情況,使得人們對微控制器的發(fā)展,在認識與理解上存在差異。導致一些初學者,進入了嵌入式系統(tǒng)的學習誤區(qū),浪費了寶貴的學習時間。下面分析幾個可能的誤區(qū)。
1.嵌入式系統(tǒng)學習誤區(qū)1-操作系統(tǒng)的困惑
如果說,學習嵌入式系統(tǒng)不是為了開發(fā)其應用產(chǎn)品,那就沒有具體目標了,許多諸如學習方法問題也就不必談了。實際上,這正是許多人想學,又不知從何開始學習的關鍵問題所在,不知道自己學習的具體目標。于是,看了一些培訓廣告,看了書店中書架上種類繁多的嵌入式系統(tǒng)的書籍,或上網(wǎng)以“嵌入式系統(tǒng)”為關鍵詞進行查詢,然后參加培訓或看書,開始“學習起來”。對于有計算機閱歷的人,往往選擇一個嵌入式操作系統(tǒng)就開始學習了。不好聽的比喻,有點象“瞎子摸大象”,只了解其一個側(cè)面。這樣如何能對嵌入式產(chǎn)品的開發(fā)過程有個全面了解呢?針對許多選擇“xxx嵌入式操作系統(tǒng)+xxx處理器”的嵌入式系統(tǒng)入門學習模式,我的建議是:首先把嵌入式系統(tǒng)軟件與硬件基礎打好了,再根據(jù)實際需要,選擇一種嵌入式操作系統(tǒng)進行學習實踐。要記?。呵度胧讲僮飨到y(tǒng)是開發(fā)某些類嵌入式產(chǎn)品的輔助工具,是手段,不是目的。許多類嵌入式產(chǎn)品,并不需要嵌入式操作系統(tǒng)。所以,一開始就學習嵌入式操作系統(tǒng),并不符合學習“由淺入深、循序漸進”的學習規(guī)律。
2.嵌入式系統(tǒng)學習誤區(qū)2-硬件與軟件的困惑
有一些有電子閱歷的人,僅從電子角度認識嵌入式系統(tǒng)選擇FPGA來學習嵌入式系統(tǒng)。實際上,這也是嵌入式系統(tǒng)的一個方式、一個側(cè)面。而大多數(shù)嵌入式系統(tǒng)的設計以MCU為核心進行。原因很簡單,生產(chǎn)可靠的MCU,需要近千道工序,非通用硬件能夠替代。既然大多數(shù)嵌入式系統(tǒng)的設計以MCU為核心,下面就談這種模式所可能遇到的學習困惑。
有些學者,僅從電子角度認識嵌入式系統(tǒng)。認為“嵌入式系統(tǒng)=MCU硬件系統(tǒng)+小程序”。這些學者,大多學習背景是具有良好的電子技術基礎知識。但對于嵌入式系統(tǒng)來說,沒有深刻認識到,嵌入式系統(tǒng)在發(fā)展,早期的MCU內(nèi)部RAM小、程序存儲器外接,需要外擴各種I/O,沒有象現(xiàn)在這樣USB、嵌入式以太網(wǎng)等較復雜的接口,因此,程序占總設計量小于50%,使人們認為嵌入式系統(tǒng)(單片機)是“電子系統(tǒng)”,以硬件為主、程序為輔。但是,隨著MCU制造技術的發(fā)展,不僅MCU內(nèi)部RAM越來越大,F(xiàn)lash進入MCU內(nèi)部改變了傳統(tǒng)的嵌入式系統(tǒng)開發(fā)與調(diào)試方式,固件程序可以被更方便地調(diào)試與在線升級,許多情況與開發(fā)PC機程序方便程度相差無幾,只不過開發(fā)環(huán)境與運行環(huán)境不是同一載體而已。這些情況使得嵌入式系統(tǒng)的軟件硬件設計方法發(fā)生了根本變化。
相反,有些學者,僅從嵌入式操作系統(tǒng)認識嵌入式系統(tǒng),或只從軟件開發(fā)角度認識嵌入式系統(tǒng)。這些學者,大多具有良好的計算機軟件開發(fā)基礎知識,認為硬件是生產(chǎn)廠商的事,沒有認識到,嵌入式系統(tǒng)產(chǎn)品的軟件與硬件均是需要開發(fā)者設計的。我常常接到一些關于嵌入式產(chǎn)品穩(wěn)定性的咨詢電話,發(fā)現(xiàn)大多數(shù)是由于軟件開發(fā)者底層硬件的基本原理不理解,對底層硬件的驅(qū)動軟件設計不周到造成的。特別是,有些功能軟件開發(fā)者,過分依賴于底層硬件的驅(qū)動軟件設計完美,自己對底層驅(qū)動原理知之甚少。實際上,一些功能軟件開發(fā)者,名義上再做嵌入式軟件,實際上,僅僅使用嵌入式軟件編輯、編譯環(huán)境而已,本質(zhì)是在開發(fā)通用PC機軟件。而底層硬件驅(qū)動軟件的開發(fā),若不全面考慮高層功能軟件對底層硬件的可能調(diào)用,也會使得封裝或參數(shù)設計得不合理或不完備,導致高層功能軟件的調(diào)用困難。從這段描述可以看出,若把一個嵌入式系統(tǒng)的開發(fā)孤立地分為硬件設計、底層硬件驅(qū)動軟件設計、高層功能軟件設計,一旦出現(xiàn)了問題,就會出現(xiàn)責任不清,難以定位。實際上,嵌入式系統(tǒng)設計是一個軟件、硬件協(xié)同設計工程,不能象通用計算機那樣,軟件、硬件完全分開來看。
面對學習嵌入式系統(tǒng)以軟件為主還是以硬件為主,或是如何選擇切入點,如何在軟件與硬件之間取得一些平衡。有些人認為,學習嵌入式系統(tǒng)可以只學習軟件知識或學習嵌入式系統(tǒng)可以只學習硬件知識。對于這個困惑,可以概括回答:
嵌入式系統(tǒng)與硬件緊密相關,是軟件與硬件的綜合體,沒有對硬件的理解就不可能寫好嵌入式軟件,同樣沒有對軟件的理解也不可能設計好嵌入式硬件。