|
1 嵌入式系統的知識體系
嵌入式系統的應用范圍可以粗略分為兩大類(lèi):(1)電子系統的智能化(工業(yè)控制,現代農業(yè)、家用電器、汽車(chē)電子、測控系統、數據采集等等);(2)計算機應用的延伸(MP3、手機、通信、網(wǎng)絡(luò )、計算機外圍設備等)。從這些應用可以看出,要完成一個(gè)以MCU為核心的嵌入式系統應用產(chǎn)品設計,需要有硬件、軟件及行業(yè)領(lǐng)域相關(guān)知識。硬件主要有MCU的硬件最小系統、輸入/輸出外圍電路、人機接口設計。軟件設計有固化軟件的設計,也可能含PC機軟件的設計。行業(yè)知識需要通過(guò)協(xié)作、交流與總結獲得。
概括地說(shuō),學(xué)習以MCU為核心的嵌入式系統,需要以下軟件硬件基礎知識與實(shí)踐訓練:
1:硬件最小系統(包括電源、晶振、復位、寫(xiě)入調試接口);
2:通用I/O(開(kāi)關(guān)量輸入/輸出,涉及各種二值量檢測與控制);
3:模數轉換A/D(各種傳感器信號的采集與處理,如紅外、溫度、光敏、超聲波、方向等等);
4:數模轉換D/A(對模擬量設備利用數字進(jìn)行控制);
5:通信(串行通信接口SCI、串行外設接口SPI、集成電路互聯(lián)總線(xiàn)I2C,CAN、USB、嵌入式以太網(wǎng)、ZigBee技術(shù)等);
6:顯示(LED、LCD等等);
7:控制(控制各種設備,包含PWM等控制技術(shù));
8:數據處理(圖形、圖像、語(yǔ)音、視頻等處理或識別);
9:各種具體應用。
事實(shí)上,萬(wàn)變不離其宗,任何應用都可以歸入這幾類(lèi)。而應用中的硬件設計、軟件設計、測試等都必須遵循嵌入式軟件工程的方法、原理與基本原則。所以,嵌入式軟件工程也是嵌入式系統知識體系的有機組成部分,只不過(guò),它融于具體項目的開(kāi)發(fā)過(guò)程之中。
以上實(shí)踐訓練涉及硬件基礎、軟件基礎及相關(guān)領(lǐng)域知識。計算機語(yǔ)言、操作系統、開(kāi)發(fā)環(huán)境等均是完成這些目的的工具。有些初學(xué)者,容易把工具的使用與所要達到的真正目的相混淆。例如,有的學(xué)習者,學(xué)了很長(cháng)時(shí)間的嵌入式操作系統移植,而不進(jìn)行實(shí)際嵌入式系統產(chǎn)品的開(kāi)發(fā),到了最后,做不好一個(gè)嵌入式系統小產(chǎn)品,偏離了學(xué)習目標,甚至放棄了嵌入式系統領(lǐng)域。這就是進(jìn)入了嵌入式系統學(xué)習誤區的情況,下面對此做一些分析。
2 嵌入式系統的學(xué)習誤區
關(guān)于嵌入式系統的學(xué)習方法,因學(xué)習經(jīng)歷、學(xué)習環(huán)境、學(xué)習目的、已有的知識基礎等不同,可能在學(xué)習順序、內容選擇、實(shí)踐方式等方面有所不同。但是,應該明確哪些是必備的基礎知識,哪些應該先學(xué),哪些應該后學(xué),哪些必須通過(guò)實(shí)踐才能獲得的,哪些是與具體芯片無(wú)關(guān)的通用知識,哪些是與具體芯片或開(kāi)發(fā)環(huán)境相關(guān)的知識。
由于微處理器與微控制器種類(lèi)繁多,也可能由于不同公司、不同機構出于自身的利益,給出一些誤導性宣傳,特別是我國嵌入式微控制器制造技術(shù)的落后及其他相關(guān)情況,使得人們對微控制器的發(fā)展,在認識與理解上存在差異。導致一些初學(xué)者,進(jìn)入了嵌入式系統的學(xué)習誤區,浪費了寶貴的學(xué)習時(shí)間。下面分析初學(xué)者可能存在的幾個(gè)誤區。
1、操作系統的困惑
如果說(shuō),學(xué)習嵌入式系統不是為了開(kāi)發(fā)其應用產(chǎn)品,那就沒(méi)有具體目標了,許多諸如學(xué)習方法問(wèn)題也就不必談了。實(shí)際上,這正是許多人想學(xué),又不知從何開(kāi)始學(xué)習的關(guān)鍵問(wèn)題所在,不知道自己學(xué)習的具體目標。于是,看了一些培訓廣告,看了書(shū)店中書(shū)架上種類(lèi)繁多的嵌入式系統的書(shū)籍,或上網(wǎng)以“嵌入式系統”為關(guān)鍵詞進(jìn)行查詢(xún),然后參加培訓或看書(shū),開(kāi)始“學(xué)習起來(lái)”。對于有計算機閱歷的人,往往選擇一個(gè)嵌入式操作系統就開(kāi)始學(xué)習了。不好聽(tīng)的比喻,有點(diǎn)象“瞎子摸大象”,只了解其一個(gè)側面。這樣如何能對嵌入式產(chǎn)品的開(kāi)發(fā)過(guò)程有個(gè)全面了解呢?針對許多初學(xué)者選擇“xxx嵌入式操作系統+xxx處理器”的嵌入式系統入門(mén)學(xué)習模式,我認為是不合適的。我的建議是:首先把嵌入式系統軟件與硬件基礎打好了,再根據實(shí)際需要,選擇一種實(shí)時(shí)操作系統(RTOS)進(jìn)行學(xué)習實(shí)踐。要記。篟TOS是開(kāi)發(fā)某些類(lèi)嵌入式產(chǎn)品的輔助工具,是手段,不是目的。許多類(lèi)嵌入式產(chǎn)品,并不需要RTOS。所以,一開(kāi)始就學(xué)習RTOS,并不符合學(xué)習“由淺入深、循序漸進(jìn)”的學(xué)習規律。
RTOS本身由于種類(lèi)繁多,實(shí)際使用何種RTOS,一般需要工作單位確定;A階段主要學(xué)習RTOS的基本原理與在RTOS之上的軟件開(kāi)發(fā)方法,而不是學(xué)習如何設計RTOS。以開(kāi)發(fā)實(shí)際嵌入式產(chǎn)品為目標的學(xué)習者,不要把過(guò)多的精力花在設計或移植RTOS上面。正如很多人使用Windows操作系統,而設計Windows操作系統只有Microsoft。許多人“研究”Linux,但不使用它,浪費時(shí)間了,人的精力是有限的,學(xué)習必須有所選擇。
2、硬件與軟件的困惑
以MCU為核心的嵌入式技術(shù)的知識體系必須通過(guò)具體的MCU來(lái)體現、實(shí)踐與訓練。但是,選擇任何型號的MCU,其芯片相關(guān)的知識只占知識體系的20%,80%是通用知識。但是80%的通用知識,必須通過(guò)具體實(shí)踐才能進(jìn)行,所以學(xué)習嵌入式技術(shù)要選擇一個(gè)系列的MCU。但不論如何,系統含有硬件與軟件兩大部分,它們之間的關(guān)系如何?
有些學(xué)者,僅從電子角度認識嵌入式系統。認為“嵌入式系統=MCU硬件系統+小程序”。這些學(xué)者,大多學(xué)習背景是具有良好的電子技術(shù)基礎知識。實(shí)際情況是,早期MCU內部RAM小、程序存儲器外接,需要外擴各種I/O,沒(méi)有象現在這樣USB、嵌入式以太網(wǎng)等較復雜的接口,因此,程序占總設計量小于50%,使人們認為嵌入式系統(單片機)是“電子系統”,以硬件為主、程序為輔。但是,隨著(zhù)MCU制造技術(shù)的發(fā)展,不僅MCU內部RAM越來(lái)越大,Flash進(jìn)入MCU內部改變了傳統的嵌入式系統開(kāi)發(fā)與調試方式,固件程序可以被更方便地調試與在線(xiàn)升級,許多情況與開(kāi)發(fā)PC機程序方便程度相差無(wú)幾,只不過(guò)開(kāi)發(fā)環(huán)境與運行環(huán)境不是同一載體而已。這些情況使得嵌入式系統的軟件硬件設計方法發(fā)生了根本變化。
有些學(xué)者,僅從軟件開(kāi)發(fā)角度認識嵌入式系統,甚至有的僅從嵌入式操作系統認識嵌入式系統。這些學(xué)者,大多具有良好的計算機軟件開(kāi)發(fā)基礎知識,認為硬件是生產(chǎn)廠(chǎng)商的事,沒(méi)有認識到,嵌入式系統產(chǎn)品的軟件與硬件均是需要開(kāi)發(fā)者設計的。我常常接到一些關(guān)于嵌入式產(chǎn)品穩定性的咨詢(xún)電話(huà),發(fā)現大多數是由于軟件開(kāi)發(fā)者對底層硬件的基本原理不理解造成的。特別是,有些功能軟件開(kāi)發(fā)者,過(guò)分依賴(lài)于底層硬件的驅動(dòng)軟件設計完美,自己對底層驅動(dòng)原理知之甚少。實(shí)際上,一些功能軟件開(kāi)發(fā)者,名義上再做嵌入式軟件,實(shí)際上,僅僅使用嵌入式編輯、編譯環(huán)境而已,本質(zhì)與開(kāi)發(fā)通用PC機軟件沒(méi)有兩樣。而底層硬件驅動(dòng)軟件的開(kāi)發(fā),若不全面考慮高層功能軟件對底層硬件的可能調用,也會(huì )使得封裝或參數設計得不合理或不完備,導致高層功能軟件的調用困難。從這段描述可以看出,若把一個(gè)嵌入式系統的開(kāi)發(fā)孤立地分為硬件設計、底層硬件驅動(dòng)軟件設計、高層功能軟件設計,一旦出現了問(wèn)題,就可能難以定位。實(shí)際上,嵌入式系統設計是一個(gè)軟件、硬件協(xié)同設計工程,不能象通用計算機那樣,軟件、硬件完全分開(kāi)來(lái)看,要在一個(gè)大的框架內協(xié)調工作。 面對學(xué)習嵌入式系統以軟件為主還是以硬件為主,或是如何選擇切入點(diǎn),如何在軟件與硬件之間取得一些平衡。對于這個(gè)困惑的建議是:要想成為一名真正的嵌入式系統設計師,在初學(xué)階段,必須重視打好嵌入式系統的硬件與軟件基礎。以下是從事嵌入式系統設計二十多年的一個(gè)美國學(xué)者John Catsoulis 在《Designing Embedded Hardware》一書(shū)中關(guān)于這個(gè)問(wèn)題的總結:嵌入式系統與硬件緊密相關(guān),是軟件與硬件的綜合體,沒(méi)有對硬件的理解就不可能寫(xiě)好嵌入式軟件,同樣沒(méi)有對軟件的理解也不可能設計好嵌入式硬件。
嵌入式系統產(chǎn)品種類(lèi)繁多,應用領(lǐng)域各異。在2.1小節中,我們把嵌入式系統的應用范圍粗略分為電子系統的智能化與計算機應用的延伸兩大類(lèi),從初學(xué)者角度,可能有分別從這兩個(gè)角度片面認識嵌入式系統的問(wèn)題。因此,一些從電子系統智能化角度認識嵌入式系統的學(xué)習者,可能會(huì )忽視編程結構、編程規范、軟件工程的要求、操作系統等知識的積累。另一些從計算機應用的延伸角度認識嵌入式系統的學(xué)習者,可能會(huì )把通用計算機學(xué)習過(guò)程中的概念與方法生搬硬套到嵌入式系統的實(shí)踐中,忽視嵌入式系統與通用計算機的差異。
實(shí)際上,在嵌入式系統學(xué)習與實(shí)踐的初始階段,應該充分了解嵌入式系統的特點(diǎn),根據自身的已有知識結構,制定適合自身情況的學(xué)習計劃。目標應該是打好嵌入式系統的硬件與軟件基礎,通過(guò)實(shí)踐,為成為良好的嵌入式系統設計師建立起基本知識結構。學(xué)習過(guò)程,可以通過(guò)具體應用系統為實(shí)踐載體,但不能拘泥于具體系統,應該有一定的抽象與歸納。例如,有的初學(xué)者開(kāi)發(fā)一個(gè)實(shí)際控制系統,沒(méi)有使用實(shí)時(shí)操作系統,但不要認為實(shí)時(shí)操作系統不需要學(xué)習。又例如,有的初學(xué)者以一個(gè)帶有實(shí)時(shí)操作系統的樣例為藍本進(jìn)行學(xué)習,但不要認為,任何嵌入式系統都需要使用實(shí)時(shí)操作系統,甚至把一個(gè)十分簡(jiǎn)明的實(shí)際系統加上一個(gè)不必要的實(shí)時(shí)操作系統。因此,片面認識嵌入式系統,可能導致學(xué)習困惑。應該根據實(shí)際項目需要,鍛煉自己分析實(shí)際問(wèn)題、解決問(wèn)題的能力。這是一個(gè)比較長(cháng)期的學(xué)習與實(shí)踐過(guò)程,不能期望通過(guò)短期培訓完成整體知識體系的建立,應該重視自身實(shí)踐,全面地理解嵌入式系統的知識體系。
嵌入式系統的大部分初學(xué)者需要選擇一個(gè)微控制器(MCU)進(jìn)行入門(mén)級學(xué)習,面對眾多廠(chǎng)家生產(chǎn)的微控制器系列,不知如何是好。
首先是關(guān)于位數問(wèn)題,目前主要有8位、16位、32位,面對嵌入式系統應用的多樣性,不同位數的MCU各有應用領(lǐng)域,這一點(diǎn)與通用微機有很大不同。你做一個(gè)遙控器,不需要使用一個(gè)32位MCU,可能一個(gè)MCU芯片價(jià)格已經(jīng)超過(guò)遙控器價(jià)格需求。對于首次接觸嵌入式系統的學(xué)習者,可以根據自己的知識基礎選擇入門(mén)芯片的位數。建議大多數初學(xué)者,可以選擇一個(gè)8位MCU作為快速入門(mén)芯片,了解一些匯編與底層硬件知識,之后再選一個(gè)16位或32位芯片進(jìn)行學(xué)習實(shí)踐。
關(guān)于芯片選擇的另一個(gè)誤區,認為有“主流芯片”存在,嵌入式系統也可以形成芯片壟斷。這完全是一種誤解,是套用通用計算機系統的思維模式,而忽視了嵌入式系統應用的多樣性。
關(guān)于學(xué)習芯片選擇還有一個(gè)誤區,是系統的工作頻率。誤認為選擇工作頻率高的芯片進(jìn)行入門(mén)學(xué)習,表示更先進(jìn)。實(shí)際上,工作頻率高可能給初學(xué)者帶來(lái)學(xué)習過(guò)程中的不少困難。
實(shí)際嵌入式系統設計不是追求芯片位數、工作頻率、操作系統等因素,而是追求穩定可靠、維護、升級、功耗、價(jià)格等指標。而初學(xué)者選擇入門(mén)芯片,是通過(guò)某一MCU作為藍本獲得嵌入式系統知識體系的通用基礎,其基本原則是:入門(mén)時(shí)間較快、硬件成本較少,知識要素較多,學(xué)習難度較低。
3 基礎階段的學(xué)習建議
基于以上討論,下面對廣大渴望學(xué)習嵌入式系統的學(xué)子提出幾點(diǎn)基礎階段的學(xué)習建議:
(1)嵌入式系統軟件硬件密切相關(guān),一定要打好軟件硬件基礎。其實(shí),只要找到正確的方法,加上努力,任何理工科學(xué)生,甚至非理工科學(xué)生,都能學(xué)好嵌入式系統。
(2)選擇一個(gè)芯片及硬件評估板(入門(mén)芯片最好是簡(jiǎn)單一點(diǎn),例如8位MCU)、選擇一本好書(shū)(最好有規范的例子)、找一位好老師(最好是有經(jīng)驗且熱心的)。硬件評估板的價(jià)格一定要在1000元以下,不要太貴,最好能有自己動(dòng)手的空間。不花一分硬件錢(qián),要想學(xué)好嵌入式系統不實(shí)際。因為,這是實(shí)踐性很強的學(xué)科。好書(shū),可以使你少走彎路,不會(huì )被誤導,要知道有的書(shū)是會(huì )使人進(jìn)入學(xué)習誤區的。好老師也可以是做過(guò)一些實(shí)際項目的學(xué)長(cháng)(一定要找做過(guò)幾個(gè)成功項目的學(xué)長(cháng)或老師做指導,否則,經(jīng)驗不足也可能誤導),有教師指導,學(xué)習進(jìn)程會(huì )加快(人工智能學(xué)科里有個(gè)術(shù)語(yǔ)叫無(wú)教師指導學(xué)習模式與有教師指導學(xué)習模式,無(wú)教師指導學(xué)習模式比有教師指導學(xué)習模式復雜許多)。
(3)許多人怕硬件,其實(shí)嵌入式系統硬件比電子線(xiàn)路好學(xué)多了。只要深入理解MCU的硬件最小系統,對I/O口、串行通信、鍵盤(pán)、LED、LCD、SPI、I2C、PWM、A/D(包括一些傳感器)、D/A等逐個(gè)實(shí)驗理解,逐步實(shí)踐。再通過(guò)自己做一個(gè)實(shí)際的小系統,底層硬件基礎就有了。各個(gè)硬件模塊驅動(dòng)程序的編寫(xiě)是嵌入式系統的必備基礎。學(xué)習嵌入式系統的初期,這個(gè)過(guò)程是必須的。
(4)至于嵌入式實(shí)時(shí)操作系統RTOS,一定不要一開(kāi)始就學(xué),這樣會(huì )走很多彎路,也會(huì )使你對嵌入式系統感到畏懼。等你軟件硬件基礎打好了,再學(xué)習就感到容易理解。實(shí)際上,眾多嵌入式應用,并不一定需要操作系統。也可以根據實(shí)際項目需要再學(xué)習特定的RTOS。一定不要被一些嵌入式實(shí)時(shí)操作系統培訓班宣傳所誤導,而忽視實(shí)際嵌入式系統軟件硬件基礎知識的學(xué)習。
(5)要避免片面地單純從“電子”或“計算機軟件”角度認識嵌入式系統。前面說(shuō)過(guò),嵌入式系統是軟件與硬件的綜合體。因此,要逐步從MCU的最小系統開(kāi)始,一點(diǎn)一點(diǎn)理解硬件原理及底層硬件驅動(dòng)編程方法。要通過(guò)規范的例子,理解軟件工程封裝、可復用等思想。通過(guò)規范編程,積累底層構件(Component),也就是一個(gè)一個(gè)模塊,但是要封裝得比較好,可復用。
(6)注重實(shí)驗與實(shí)踐。這里說(shuō)的實(shí)驗主要指通過(guò)重復或驗證他人的工作,目的是學(xué)習基礎知識,這個(gè)過(guò)程一定要經(jīng)歷。實(shí)踐是自己設計,有具體的“產(chǎn)品”目標。如果你能花500元左右自己做一個(gè)具有一定功能的小產(chǎn)品,且能穩定運行1年以上,就可以說(shuō)接近入門(mén)了。
(7)關(guān)于入門(mén)芯片的選擇。不要選太復雜的微控制器作為入門(mén)芯片,不能超越學(xué)習過(guò)程。不要一下子學(xué)習幾種芯片,可以通過(guò)一個(gè)芯片入門(mén)并具有一個(gè)實(shí)踐經(jīng)驗后,根據實(shí)際需要選擇芯片開(kāi)發(fā)實(shí)際產(chǎn)品。注意,不要把微處理器(MPU)與微控制器(MCU)概念相混淆,微處理器只是微控制器的內核。
(8)關(guān)于操作系統的選擇?梢缘鹊侥憔哂幸欢▽(shí)踐后,選擇一個(gè)簡(jiǎn)單容易理解原理的進(jìn)行學(xué)習,不要一開(kāi)始就學(xué)習幾種操作系統,理解了基本原理,實(shí)踐中確有實(shí)際需要再學(xué)習也不遲。人總是要不斷學(xué)習的。
(9)關(guān)于匯編與C語(yǔ)言的取舍。隨著(zhù)MCU對C編譯的優(yōu)化支持,對于匯編可以只了解幾個(gè)必須的語(yǔ)句,直接使用C語(yǔ)言編程。但必須通過(guò)第一個(gè)程序理解芯片初始化過(guò)程、中斷機制、程序存儲情況等區別于PC機程序的內容。另外,為了測試的需要,最好掌握一門(mén)PC機編程語(yǔ)言。
(10)要明確自己的學(xué)習目的,并注意學(xué)習方法。關(guān)于學(xué)習目的要明確是打基礎,還是為了適應某些工作而進(jìn)行的短訓;而學(xué)習方法方面,要根據學(xué)習目的選擇合適的學(xué)習途徑,注意理論學(xué)習與實(shí)踐、通用知識與芯片相關(guān)知識、硬件知識與軟件知識的平衡,要在理解軟件工程基本原理基礎上理解硬件構件與軟件構件等基本概念。
以上建議,僅供參考。 當然,以上只是基礎階段的學(xué)習建議,要成為良好的嵌入式系統設計師,還需要在實(shí)際項目中鍛煉,并不斷學(xué)習與積累經(jīng)驗。
以下課程可免費試聽(tīng)C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、Python、安卓等。想學(xué)習的你和我聯(lián)系預約就可以免費聽(tīng)課了宋工QQ3524659088 Tel/VX17317951908
|
|