[導(dǎo)讀]根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義,嵌入式系統(tǒng)(Embedded System)是指以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ),軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機系統(tǒng)。
整理?|?付斌
公眾號 | 嵌入式ARM
01
嵌入式的定義和舉例分析
根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義,嵌入式系統(tǒng)(Embedded System)是指以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ),軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機系統(tǒng)。舉例來說,大到油田的集散控制系統(tǒng)和工廠流水線,小到家用VCD機或手機,甚至組成普通PC終端設(shè)備的鍵盤、鼠標(biāo)、硬盤、Modem等均是由嵌入式處理器控制的。
這主要是從應(yīng)用上加以定義的,從中可以看出嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機械等附屬裝置。
目前國內(nèi)一個普遍被認(rèn)同的定義是:以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機系統(tǒng)。
說白了就是先設(shè)計硬件,然后根據(jù)需求編寫能在該硬件上運行的軟件,就成了所謂的“智能硬件”。
嵌入式系統(tǒng)無疑是當(dāng)前最熱門最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。嵌入式系統(tǒng)用在一些特定專用設(shè)備上,通常這些設(shè)備的硬件資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實時響應(yīng)要求很高等。特別是隨著消費家電的智能化,嵌入式更顯重要。
首先嵌入式技術(shù)主要分為嵌入式軟件和嵌入式硬件2大方向。?
嵌入式硬件工程師主要工作職責(zé)是為產(chǎn)品設(shè)計硬件電路原理圖,設(shè)計硬件PCB板,選擇合適的元器件,焊接調(diào)試硬件電路板,保證硬件電路板的可靠性、穩(wěn)定性和抗干擾能力。因為現(xiàn)在集成電路發(fā)展迅速,大部分集成電路廠商都會提供參考電路,所以硬件電路原理圖的設(shè)計相對來說比較簡單,硬件工程師工作的含金量主要體現(xiàn)在產(chǎn)品的可靠性和穩(wěn)定性設(shè)計、以及電磁兼容設(shè)計,這才是硬件設(shè)計工程師的含金量所在。一個資深的嵌入式硬件工程師年薪都在15萬~40萬之間。?
要成為一個資深的嵌入式工程師相當(dāng)難,一方面要有非常扎實的理論知識,同時也要有相當(dāng)?shù)哪欠N大型的、高頻CPU、多層PCB板的設(shè)計經(jīng)驗。嵌入式硬件工程師要學(xué)的課程主要有模擬電路設(shè)計、數(shù)字電路設(shè)計、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設(shè)計和分析。?
嵌入式軟件工程師的職責(zé)主要是根據(jù)產(chǎn)品的功能需求設(shè)計好軟件,讓硬件工作起來。嵌入式電子產(chǎn)品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 幾大部分組成,而軟件就千差萬別了。產(chǎn)品的具體功能都是由軟件來實現(xiàn)的,一般來講一個產(chǎn)品的實現(xiàn),軟件設(shè)計的工作量是硬件設(shè)計的4~5倍。所以一般情況下,一個公司的軟件工程師數(shù)量是硬件硬件工程師的4~5倍,嵌入式軟件工程師需求比硬件工程師大很多,同時跟硬件工程師相比,嵌入式軟件工程師學(xué)起來相對容易些,所以這里21ic家重點和大家談一下嵌入式軟件工程的學(xué)習(xí)路線。
?延伸閱讀:《
嵌入式有什么值得學(xué)習(xí)的軟硬件技術(shù)?
》、《
嵌入式軟件和硬件誰更重要?
》。
02
嵌入式設(shè)計應(yīng)具備的基本技能
熟悉Linux服務(wù)能夠獨立安裝Linux操作系統(tǒng),能夠熟練使用Linux系統(tǒng)的基本命令?
認(rèn)識Linux系統(tǒng)的常用服務(wù)安裝Linux操作系統(tǒng)?
熟悉Linux系統(tǒng)下的編輯環(huán)境?
熟練進(jìn)行shell編程熟悉vi基本操作?
編寫一個測試服務(wù)器是否連通的shell腳本程序?
編寫一個查看進(jìn)程是否存在的shell腳本程序?
編寫一個帶有循環(huán)語句的shell腳本程序
AutoconfAutomake Makefile?代碼優(yōu)化?
熟悉Linux系統(tǒng)下的開發(fā)環(huán)境?
熟悉Makefile規(guī)則編寫Hello,World程序?
4、嵌入式系統(tǒng)開發(fā)基礎(chǔ)
嵌入式Linux應(yīng)用軟件開發(fā)流程熟悉嵌入式系統(tǒng)概念以及開發(fā)流程?
建立嵌入式系統(tǒng)開發(fā)環(huán)境制作cross_gcc工具鏈?
能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到ARM9開發(fā)板
嵌入式Linux應(yīng)用軟件開發(fā)流程?
Linux系統(tǒng)的文件和設(shè)備?
與文件相關(guān)的系統(tǒng)調(diào)用?
7、嵌入式系統(tǒng)中多進(jìn)程程序設(shè)計
相關(guān)的系統(tǒng)調(diào)用了解Linux系統(tǒng)中進(jìn)程的概念?
能夠編寫多進(jìn)程程序編寫多進(jìn)程程序?
sleep系統(tǒng)調(diào)用任務(wù)管理
同步與通信Linux任務(wù)概述任務(wù)調(diào)度?
管道 信號 共享內(nèi)存 任務(wù)管理 API?
了解Linux系統(tǒng)任務(wù)管理機制?
熟悉嵌入式Linux中的任務(wù)間同步與通信編寫一個簡單的管道程序?qū)崿F(xiàn)文件傳輸?
8、嵌入式系統(tǒng)中多線程程序設(shè)計
03
嵌入式軟件工程師學(xué)習(xí)流程
第一部分:Linux平臺搭建與環(huán)境熟悉
了解linux系統(tǒng);區(qū)分各種版本的Linux系統(tǒng),以便于拓展 Linux視野。
第二部分:虛擬機安裝和LINUX系統(tǒng)安裝
5、 熟悉運用 Linux環(huán)境下,常用命令的操作與系統(tǒng)設(shè)置,如常用的 Shell;掌握基本的Shell 應(yīng)用
1、 建立嵌入式 Linux開發(fā)環(huán)境
6、 硬件環(huán)境的搭建;arm-linux-gcc與 gcc安裝配置
了解 U-Boot 的作用及工作流程;了解Bootloader 的代碼結(jié)構(gòu)、編譯過程;移植U-Boot;掌握常用的U-Boot命令。
10、設(shè)置u-boot環(huán)境變量
11、 u-boot驅(qū)動添加如網(wǎng)卡:DM9000
熟悉內(nèi)核的原碼結(jié)構(gòu)和kbuild Makefile語法;掌握和內(nèi)核、驅(qū)動模塊編譯相關(guān)的原理及方法。
3、Linux內(nèi)核源代碼結(jié)構(gòu)
4. nfs文件服務(wù)器系統(tǒng)搭建
第七部分:LINUX應(yīng)用學(xué)習(xí)
嵌入式Linux應(yīng)用開發(fā)和系統(tǒng)開發(fā)是嵌入式Linux中最重要的一部分,也是企業(yè)人才需求最廣的一部分。
主要目標(biāo)是精通嵌入式Linux下的程序設(shè)計,熟練掌握嵌入式Linux的開發(fā)環(huán)境、系統(tǒng)編程以及網(wǎng)絡(luò)編程,熟悉C++、QT編程并且深刻體會整個嵌入式Linux項目開發(fā)流程,強化學(xué)員對Linux應(yīng)用開發(fā)的能力。
1、Linux系統(tǒng)中的進(jìn)程的概念,在應(yīng)用程序中線程與父子進(jìn)程的創(chuàng)建與應(yīng)用
6、內(nèi)存映射(MAPPED MEMORY)
9、共享內(nèi)存(SHARE MEMORY)@
10、tcPip協(xié)議在應(yīng)用程序中的編程開發(fā)(SOCKET套接字編程開發(fā))
10.1. ISO/OSI七層協(xié)議模型與IP網(wǎng)絡(luò)四層模式
10.3. 基于嵌入式Linux的TCP/IP網(wǎng)絡(luò)結(jié)構(gòu)
10.4. 基于嵌入式Linux的SOCKET編程
10.6. UDP SERVER-CLIENT關(guān)系程
04
嵌入式軟件工程師的內(nèi)功修煉
所謂嵌入式軟件開發(fā),抽象的講,就是在專用的硬件平臺借助宿主機交叉編譯環(huán)境通過編程、編譯、鏈接下載、調(diào)試達(dá)到目標(biāo)需求;往細(xì)了分,嵌入式軟件開發(fā)可分為嵌入式驅(qū)動設(shè)計師(向下根據(jù)接口協(xié)議驅(qū)動硬件設(shè)備,向上提供應(yīng)用API),嵌入式系統(tǒng)設(shè)計師(編寫固件程序,設(shè)計操作系統(tǒng)內(nèi)核或文件系統(tǒng),根據(jù)不同硬件平臺移植操作系統(tǒng),優(yōu)化系統(tǒng)功能),嵌入式界面設(shè)計師(嵌入式硬件平臺的上位機GUI設(shè)計,人機交互),嵌入式應(yīng)用設(shè)計師(裸機或操作系統(tǒng)移植調(diào)度驅(qū)動API按照一定的算法邏輯實現(xiàn)相應(yīng)的需求功能),嵌入式算法設(shè)計師(把相關(guān)數(shù)學(xué)算法設(shè)計成軟件程序精準(zhǔn)優(yōu)化系統(tǒng)功能,如PID控算、卡爾曼濾波算法、低通濾波等)。
C語言就是嵌入式軟件的內(nèi)功,21ic家也曾經(jīng)多次強調(diào)。相信大家都看過武俠小說或電視,金老前輩的甚是出名,里面有“天下武功出少林”一說,為什么呢?
就是因為少林有一本《易筋經(jīng)》,“掃地僧”也就是當(dāng)時江湖的大神,學(xué)了易筋經(jīng)的人想再學(xué)其他武功可謂是游刃有余,就像《射雕英雄傳》的郭靖郭大俠因為修煉了全真教馬鈺道長的內(nèi)功,再學(xué)洪七公、老頑童等的外功就很簡單了,而C語言就是所有各種編程語言(像Python、Java、C++、PHP、JavaScript等等)里面的“易筋經(jīng)”,達(dá)到精通C的境界,再學(xué)其他就很簡單了,因為C要整明白,必須了解底層、明白計算機系統(tǒng)的運行機制,當(dāng)然一個沒學(xué)過匯編的人不能真正掌握C語言的真諦。
在如今Python、Java編程語言火熱的市場前景下,資深工程師的建議是,在學(xué)校讀書真心想搞IT技術(shù),從C語言學(xué)起,會受益終生的。
學(xué)習(xí)C語言難嗎?資深工程師表示:不難。真正懂得用C語言難嗎?--難,但是按照心法不斷去實踐會化解“難”這顆頑石?,F(xiàn)在對C語言水平層次的定義有幾階:入門、掌握、熟悉、精通?,F(xiàn)在很多一線的軟件工程師都是至多在“熟悉”的水平階上。
內(nèi)功心法:用數(shù)學(xué)思維抽象化去學(xué)習(xí),多編程、多調(diào)試、多實際應(yīng)用,多看高手寫的優(yōu)秀代碼,可以嘗試去寫寫RTOS內(nèi)核;知錯就改,溫故知新,不斷學(xué)習(xí)
內(nèi)功大綱:結(jié)構(gòu)體、數(shù)組、指針、函數(shù)、內(nèi)存管理
-
深度理解ANSI標(biāo)準(zhǔn)定義的C語言預(yù)處理指令用法,文件結(jié)構(gòu)問題
-
明確定義及聲明,深度解析C語言的32個關(guān)鍵字,sizeof是關(guān)鍵字
-
標(biāo)準(zhǔn)C語言的20個基本符號深度熟練怎么用,還有表達(dá)式的優(yōu)先級問題
-
深度理解內(nèi)存管理與內(nèi)存泄漏問題,野指針的問題,棧、堆、靜態(tài)區(qū)的問題
-
深度解析指針和數(shù)組的內(nèi)存布局,它們之間的相互訪問形式以及地址的強制轉(zhuǎn)換 ,還有多維數(shù)組和多級指針問題
-
深度理解函數(shù)設(shè)計的原則和技巧,養(yǎng)成良好的編程風(fēng)格和編程習(xí)慣
順便提提軟件面試一般考察的問題,也就是面試官想通過面試了解的問題:
-
在需求實現(xiàn)的前提下,看你的編程風(fēng)格;
-
編程邏輯不可能一步到位,很多時候需要不斷修改,看你出錯問題的處理能力;
-
對你代碼算法復(fù)雜度進(jìn)行分析,是否提高系統(tǒng)性能。
05
嵌入式軟硬件界限又不是那么深
嵌入式系統(tǒng)的應(yīng)用范圍可以粗略分為兩大類:
(1)電子系統(tǒng)的智能化(工業(yè)控制,現(xiàn)代農(nóng)業(yè)、家用電器、汽車電子、測控系統(tǒng)、數(shù)據(jù)采集等等);
(2)計算機應(yīng)用的延伸(MP3、手機、通信、網(wǎng)絡(luò)、計算機外圍設(shè)備等)。從這些應(yīng)用可以看出,要完成一個以MCU為核心的嵌入式系統(tǒng)應(yīng)用產(chǎn)品設(shè)計,需要有硬件、軟件及行業(yè)領(lǐng)域相關(guān)知識。硬件主要有MCU的硬件最小系統(tǒng)、輸入/輸出外圍電路、人機接口設(shè)計。軟件設(shè)計有固化軟件的設(shè)計,也可能含PC機軟件的設(shè)計。行業(yè)知識需要通過協(xié)作、交流與總結(jié)獲得。
概括地說,學(xué)習(xí)以MCU為核心的嵌入式系統(tǒng),需要以下軟件硬件基礎(chǔ)知識與實踐訓(xùn)練:
1:硬件最小系統(tǒng)(包括電源、晶振、復(fù)位、寫入調(diào)試接口);
2:通用I/O(開關(guān)量輸入/輸出,涉及各種二值量檢測與控制);
3:模數(shù)轉(zhuǎn)換A/D(各種傳感器信號的采集與處理,如紅外、溫度、光敏、超聲波、方向等等);
4:數(shù)模轉(zhuǎn)換D/A(對模擬量設(shè)備利用數(shù)字進(jìn)行控制);
5:通信(串行通信接口SCI、串行外設(shè)接口SPI、集成電路互聯(lián)總線I2C,CAN、USB、嵌入式以太網(wǎng)、ZigBee技術(shù)等);
7:控制(控制各種設(shè)備,包含PWM等控制技術(shù));
8:數(shù)據(jù)處理(圖形、圖像、語音、視頻等處理或識別);
事實上,萬變不離其宗,任何應(yīng)用都可以歸入這幾類。而應(yīng)用中的硬件設(shè)計、軟件設(shè)計、測試等都必須遵循嵌入式軟件工程的方法、原理與基本原則。所以,嵌入式軟件工程也是嵌入式系統(tǒng)知識體系的有機組成部分,只不過,它融于具體項目的開發(fā)過程之中。21ic家多次強調(diào),雖然嵌入式工程師有軟件和硬件工程師的分別,但是其實對于嵌入式工程師來說,兩手都要硬,只不過相關(guān)領(lǐng)域工程師的深淺不同。更多相關(guān)內(nèi)容可以在21ic中國電子網(wǎng)查閱查看。
以上實踐訓(xùn)練涉及硬件基礎(chǔ)、軟件基礎(chǔ)及相關(guān)領(lǐng)域知識。計算機語言、操作系統(tǒng)、開發(fā)環(huán)境等均是完成這些目的的工具。有些初學(xué)者,容易把工具的使用與所要達(dá)到的真正目的相混淆。例如,有的學(xué)習(xí)者,學(xué)了很長時間的嵌入式操作系統(tǒng)移植,而不進(jìn)行實際嵌入式系統(tǒng)產(chǎn)品的開發(fā),到了最后,做不好一個嵌入式系統(tǒng)小產(chǎn)品,偏離了學(xué)習(xí)目標(biāo),甚至放棄了嵌入式系統(tǒng)領(lǐng)域。這就是進(jìn)入了嵌入式系統(tǒng)學(xué)習(xí)誤區(qū)的情況,下面對此做一些分析。
06
嵌入式系統(tǒng)的學(xué)習(xí)誤區(qū)
關(guān)于嵌入式系統(tǒng)的學(xué)習(xí)方法,因?qū)W習(xí)經(jīng)歷、學(xué)習(xí)環(huán)境、學(xué)習(xí)目的、已有的知識基礎(chǔ)等不同,可能在學(xué)習(xí)順序、內(nèi)容選擇、實踐方式等方面有所不同。但是,應(yīng)該明確哪些是必備的基礎(chǔ)知識,哪些應(yīng)該先學(xué),哪些應(yīng)該后學(xué),哪些必須通過實踐才能獲得的,哪些是與具體芯片無關(guān)的通用知識,哪些是與具體芯片或開發(fā)環(huán)境相關(guān)的知識。
由于微處理器與微控制器種類繁多,也可能由于不同公司、不同機構(gòu)出于自身的利益,給出一些誤導(dǎo)性宣傳,特別是我國嵌入式微控制器制造技術(shù)的落后及其他相關(guān)情況,使得人們對微控制器的發(fā)展,在認(rèn)識與理解上存在差異。導(dǎo)致一些初學(xué)者,進(jìn)入了嵌入式系統(tǒng)的學(xué)習(xí)誤區(qū),浪費了寶貴的學(xué)習(xí)時間。下面分析初學(xué)者可能存在的幾個誤區(qū)。
如果說,學(xué)習(xí)嵌入式系統(tǒng)不是為了開發(fā)其應(yīng)用產(chǎn)品,那就沒有具體目標(biāo)了,許多諸如學(xué)習(xí)方法問題也就不必談了。實際上,這正是許多人想學(xué),又不知從何開始學(xué)習(xí)的關(guān)鍵問題所在,不知道自己學(xué)習(xí)的具體目標(biāo)。于是,看了一些培訓(xùn)廣告,看了書店中書架上種類繁多的嵌入式系統(tǒng)的書籍,或上網(wǎng)以“嵌入式系統(tǒng)”為關(guān)鍵詞進(jìn)行查詢,然后參加培訓(xùn)或看書,開始“學(xué)習(xí)起來”。對于有計算機閱歷的人,往往選擇一個嵌入式操作系統(tǒng)就開始學(xué)習(xí)了。不好聽的比喻,有點象“瞎子摸大象”,只了解其一個側(cè)面。這樣如何能對嵌入式產(chǎn)品的開發(fā)過程有個全面了解呢?針對許多初學(xué)者選擇“xxx嵌入式操作系統(tǒng)+xxx處理器”的嵌入式系統(tǒng)入門學(xué)習(xí)模式,我認(rèn)為是不合適的。我的建議是:首先把嵌入式系統(tǒng)軟件與硬件基礎(chǔ)打好了,再根據(jù)實際需要,選擇一種實時操作系統(tǒng)(RTOS)進(jìn)行學(xué)習(xí)實踐。要記?。篟TOS是開發(fā)某些類嵌入式產(chǎn)品的輔助工具,是手段,不是目的。許多類嵌入式產(chǎn)品,并不需要RTOS。所以,一開始就學(xué)習(xí)RTOS,并不符合學(xué)習(xí)“由淺入深、循序漸進(jìn)”的學(xué)習(xí)規(guī)律。
RTOS本身由于種類繁多,實際使用何種RTOS,一般需要工作單位確定?;A(chǔ)階段主要學(xué)習(xí)RTOS的基本原理與在RTOS之上的軟件開發(fā)方法,而不是學(xué)習(xí)如何設(shè)計RTOS。以開發(fā)實際嵌入式產(chǎn)品為目標(biāo)的學(xué)習(xí)者,不要把過多的精力花在設(shè)計或移植RTOS上面。正如很多人使用Windows操作系統(tǒng),而設(shè)計Windows操作系統(tǒng)只有Microsoft。許多人“研究”Linux,但不使用它,浪費時間了,人的精力是有限的,學(xué)習(xí)必須有所選擇。
以MCU為核心的嵌入式技術(shù)的知識體系必須通過具體的MCU來體現(xiàn)、實踐與訓(xùn)練。但是,選擇任何型號的MCU,其芯片相關(guān)的知識只占知識體系的20%,80%是通用知識。但是80%的通用知識,必須通過具體實踐才能進(jìn)行,所以學(xué)習(xí)嵌入式技術(shù)要選擇一個系列的MCU。但不論如何,系統(tǒng)含有硬件與軟件兩大部分,它們之間的關(guān)系如何?
有些學(xué)者,僅從電子角度認(rèn)識嵌入式系統(tǒng)。認(rèn)為“嵌入式系統(tǒng)=MCU硬件系統(tǒng)+小程序”。這些學(xué)者,大多學(xué)習(xí)背景是具有良好的電子技術(shù)基礎(chǔ)知識。實際情況是,早期MCU內(nèi)部RAM小、程序存儲器外接,需要外擴各種I/O,沒有象現(xiàn)在這樣USB、嵌入式以太網(wǎng)等較復(fù)雜的接口,因此,程序占總設(shè)計量小于50%,使人們認(rèn)為嵌入式系統(tǒng)(單片機)是“電子系統(tǒng)”,以硬件為主、程序為輔。但是,隨著MCU制造技術(shù)的發(fā)展,不僅MCU內(nèi)部RAM越來越大,F(xiàn)lash進(jìn)入MCU內(nèi)部改變了傳統(tǒng)的嵌入式系統(tǒng)開發(fā)與調(diào)試方式,固件程序可以被更方便地調(diào)試與在線升級,許多情況與開發(fā)PC機程序方便程度相差無幾,只不過開發(fā)環(huán)境與運行環(huán)境不是同一載體而已。這些情況使得嵌入式系統(tǒng)的軟件硬件設(shè)計方法發(fā)生了根本變化。
有些學(xué)者,僅從軟件開發(fā)角度認(rèn)識嵌入式系統(tǒng),甚至有的僅從嵌入式操作系統(tǒng)認(rèn)識嵌入式系統(tǒng)。這些學(xué)者,大多具有良好的計算機軟件開發(fā)基礎(chǔ)知識,認(rèn)為硬件是生產(chǎn)廠商的事,沒有認(rèn)識到,嵌入式系統(tǒng)產(chǎn)品的軟件與硬件均是需要開發(fā)者設(shè)計的。我常常接到一些關(guān)于嵌入式產(chǎn)品穩(wěn)定性的咨詢電話,發(fā)現(xiàn)大多數(shù)是由于軟件開發(fā)者對底層硬件的基本原理不理解造成的。特別是,有些功能軟件開發(fā)者,過分依賴于底層硬件的驅(qū)動軟件設(shè)計完美,自己對底層驅(qū)動原理知之甚少。實際上,一些功能軟件開發(fā)者,名義上再做嵌入式軟件,實際上,僅僅使用嵌入式編輯、編譯環(huán)境而已,本質(zhì)與開發(fā)通用PC機軟件沒有兩樣。
而底層硬件驅(qū)動軟件的開發(fā),若不全面考慮高層功能軟件對底層硬件的可能調(diào)用,也會使得封裝或參數(shù)設(shè)計得不合理或不完備,導(dǎo)致高層功能軟件的調(diào)用困難。從這段描述可以看出,若把一個嵌入式系統(tǒng)的開發(fā)孤立地分為硬件設(shè)計、底層硬件驅(qū)動軟件設(shè)計、高層功能軟件設(shè)計,一旦出現(xiàn)了問題,就可能難以定位。實際上,嵌入式系統(tǒng)設(shè)計是一個軟件、硬件協(xié)同設(shè)計工程,不能象通用計算機那樣,軟件、硬件完全分開來看,要在一個大的框架內(nèi)協(xié)調(diào)工作。?面對學(xué)習(xí)嵌入式系統(tǒng)以軟件為主還是以硬件為主,或是如何選擇切入點,如何在軟件與硬件之間取得一些平衡。對于這個困惑的建議是:要想成為一名真正的嵌入式系統(tǒng)設(shè)計師,在初學(xué)階段,必須重視打好嵌入式系統(tǒng)的硬件與軟件基礎(chǔ)。以下是從事嵌入式系統(tǒng)設(shè)計二十多年的一個美國學(xué)者John Catsoulis 在《Designing Embedded Hardware》一書中關(guān)于這個問題的總結(jié):嵌入式系統(tǒng)與硬件緊密相關(guān),是軟件與硬件的綜合體,沒有對硬件的理解就不可能寫好嵌入式軟件,同樣沒有對軟件的理解也不可能設(shè)計好嵌入式硬件。
嵌入式系統(tǒng)產(chǎn)品種類繁多,應(yīng)用領(lǐng)域各異。在2.1小節(jié)中,我們把嵌入式系統(tǒng)的應(yīng)用范圍粗略分為電子系統(tǒng)的智能化與計算機應(yīng)用的延伸兩大類,從初學(xué)者角度,可能有分別從這兩個角度片面認(rèn)識嵌入式系統(tǒng)的問題。因此,一些從電子系統(tǒng)智能化角度認(rèn)識嵌入式系統(tǒng)的學(xué)習(xí)者,可能會忽視編程結(jié)構(gòu)、編程規(guī)范、軟件工程的要求、操作系統(tǒng)等知識的積累。另一些從計算機應(yīng)用的延伸角度認(rèn)識嵌入式系統(tǒng)的學(xué)習(xí)者,可能會把通用計算機學(xué)習(xí)過程中的概念與方法生搬硬套到嵌入式系統(tǒng)的實踐中,忽視嵌入式系統(tǒng)與通用計算機的差異。
實際上,在嵌入式系統(tǒng)學(xué)習(xí)與實踐的初始階段,應(yīng)該充分了解嵌入式系統(tǒng)的特點,根據(jù)自身的已有知識結(jié)構(gòu),制定適合自身情況的學(xué)習(xí)計劃。目標(biāo)應(yīng)該是打好嵌入式系統(tǒng)的硬件與軟件基礎(chǔ),通過實踐,為成為良好的嵌入式系統(tǒng)設(shè)計師建立起基本知識結(jié)構(gòu)。學(xué)習(xí)過程,可以通過具體應(yīng)用系統(tǒng)為實踐載體,但不能拘泥于具體系統(tǒng),應(yīng)該有一定的抽象與歸納。例如,有的初學(xué)者開發(fā)一個實際控制系統(tǒng),沒有使用實時操作系統(tǒng),但不要認(rèn)為實時操作系統(tǒng)不需要學(xué)習(xí)。又例如,有的初學(xué)者以一個帶有實時操作系統(tǒng)的樣例為藍(lán)本進(jìn)行學(xué)習(xí),但不要認(rèn)為,任何嵌入式系統(tǒng)都需要使用實時操作系統(tǒng),甚至把一個十分簡明的實際系統(tǒng)加上一個不必要的實時操作系統(tǒng)。因此,片面認(rèn)識嵌入式系統(tǒng),可能導(dǎo)致學(xué)習(xí)困惑。應(yīng)該根據(jù)實際項目需要,鍛煉自己分析實際問題、解決問題的能力。這是一個比較長期的學(xué)習(xí)與實踐過程,不能期望通過短期培訓(xùn)完成整體知識體系的建立,應(yīng)該重視自身實踐,全面地理解嵌入式系統(tǒng)的知識體系。
嵌入式系統(tǒng)的大部分初學(xué)者需要選擇一個微控制器(MCU)進(jìn)行入門級學(xué)習(xí),面對眾多廠家生產(chǎn)的微控制器系列,不知如何是好。
首先是關(guān)于位數(shù)問題,目前主要有8位、16位、32位,面對嵌入式系統(tǒng)應(yīng)用的多樣性,不同位數(shù)的MCU各有應(yīng)用領(lǐng)域,這一點與通用微機有很大不同。你做一個遙控器,不需要使用一個32位MCU,可能一個MCU芯片價格已經(jīng)超過遙控器價格需求。對于首次接觸嵌入式系統(tǒng)的學(xué)習(xí)者,可以根據(jù)自己的知識基礎(chǔ)選擇入門芯片的位數(shù)。建議大多數(shù)初學(xué)者,可以選擇一個8位MCU作為快速入門芯片,了解一些匯編與底層硬件知識,之后再選一個16位或32位芯片進(jìn)行學(xué)習(xí)實踐。
關(guān)于芯片選擇的另一個誤區(qū),認(rèn)為有“主流芯片”存在,嵌入式系統(tǒng)也可以形成芯片壟斷。這完全是一種誤解,是套用通用計算機系統(tǒng)的思維模式,而忽視了嵌入式系統(tǒng)應(yīng)用的多樣性。
關(guān)于學(xué)習(xí)芯片選擇還有一個誤區(qū),是系統(tǒng)的工作頻率。誤認(rèn)為選擇工作頻率高的芯片進(jìn)行入門學(xué)習(xí),表示更先進(jìn)。實際上,工作頻率高可能給初學(xué)者帶來學(xué)習(xí)過程中的不少困難。
實際嵌入式系統(tǒng)設(shè)計不是追求芯片位數(shù)、工作頻率、操作系統(tǒng)等因素,而是追求穩(wěn)定可靠、維護(hù)、升級、功耗、價格等指標(biāo)。而初學(xué)者選擇入門芯片,是通過某一MCU作為藍(lán)本獲得嵌入式系統(tǒng)知識體系的通用基礎(chǔ),其基本原則是:入門時間較快、硬件成本較少,知識要素較多,學(xué)習(xí)難度較低。
基于以上討論,21ic家總結(jié)了渴望學(xué)習(xí)嵌入式系統(tǒng)的學(xué)子提出幾點基礎(chǔ)階段的學(xué)習(xí)建議:
(1)嵌入式系統(tǒng)軟件硬件密切相關(guān),一定要打好軟件硬件基礎(chǔ)。其實,只要找到正確的方法,加上努力,任何理工科學(xué)生,甚至非理工科學(xué)生,都能學(xué)好嵌入式系統(tǒng)。
(2)選擇一個芯片及硬件評估板(入門芯片最好是簡單一點,例如8位MCU)、選擇一本好書(最好有規(guī)范的例子)、找一位好老師(最好是有經(jīng)驗且熱心的)。硬件評估板的價格一定要在1000元以下,不要太貴,最好能有自己動手的空間。不花一分硬件錢,要想學(xué)好嵌入式系統(tǒng)不實際。因為,這是實踐性很強的學(xué)科。好書,可以使你少走彎路,不會被誤導(dǎo),要知道有的書是會使人進(jìn)入學(xué)習(xí)誤區(qū)的。好老師也可以是做過一些實際項目的學(xué)長(一定要找做過幾個成功項目的學(xué)長或老師做指導(dǎo),否則,經(jīng)驗不足也可能誤導(dǎo)),有教師指導(dǎo),學(xué)習(xí)進(jìn)程會加快(人工智能學(xué)科里有個術(shù)語叫無教師指導(dǎo)學(xué)習(xí)模式與有教師指導(dǎo)學(xué)習(xí)模式,無教師指導(dǎo)學(xué)習(xí)模式比有教師指導(dǎo)學(xué)習(xí)模式復(fù)雜許多)。
(3)許多人怕硬件,其實嵌入式系統(tǒng)硬件比電子線路好學(xué)多了。只要深入理解MCU的硬件最小系統(tǒng),對I/O口、串行通信、鍵盤、LED、LCD、SPI、I2C、PWM、A/D(包括一些傳感器)、D/A等逐個實驗理解,逐步實踐。再通過自己做一個實際的小系統(tǒng),底層硬件基礎(chǔ)就有了。各個硬件模塊驅(qū)動程序的編寫是嵌入式系統(tǒng)的必備基礎(chǔ)。學(xué)習(xí)嵌入式系統(tǒng)的初期,這個過程是必須的。
(4)至于嵌入式實時操作系統(tǒng)RTOS,一定不要一開始就學(xué),這樣會走很多彎路,也會使你對嵌入式系統(tǒng)感到畏懼。等你軟件硬件基礎(chǔ)打好了,再學(xué)習(xí)就感到容易理解。實際上,眾多嵌入式應(yīng)用,并不一定需要操作系統(tǒng)。也可以根據(jù)實際項目需要再學(xué)習(xí)特定的RTOS。一定不要被一些嵌入式實時操作系統(tǒng)培訓(xùn)班宣傳所誤導(dǎo),而忽視實際嵌入式系統(tǒng)軟件硬件基礎(chǔ)知識的學(xué)習(xí)。
(5)要避免片面地單純從“電子”或“計算機軟件”角度認(rèn)識嵌入式系統(tǒng)。前面說過,嵌入式系統(tǒng)是軟件與硬件的綜合體。因此,要逐步從MCU的最小系統(tǒng)開始,一點一點理解硬件原理及底層硬件驅(qū)動編程方法。要通過規(guī)范的例子,理解軟件工程封裝、可復(fù)用等思想。通過規(guī)范編程,積累底層構(gòu)件(Component),也就是一個一個模塊,但是要封裝得比較好,可復(fù)用。
(6)注重實驗與實踐。這里說的實驗主要指通過重復(fù)或驗證他人的工作,目的是學(xué)習(xí)基礎(chǔ)知識,這個過程一定要經(jīng)歷。實踐是自己設(shè)計,有具體的“產(chǎn)品”目標(biāo)。如果你能花500元左右自己做一個具有一定功能的小產(chǎn)品,且能穩(wěn)定運行1年以上,就可以說接近入門了。
(7)關(guān)于入門芯片的選擇。不要選太復(fù)雜的微控制器作為入門芯片,不能超越學(xué)習(xí)過程。不要一下子學(xué)習(xí)幾種芯片,可以通過一個芯片入門并具有一個實踐經(jīng)驗后,根據(jù)實際需要選擇芯片開發(fā)實際產(chǎn)品。注意,不要把微處理器(MPU)與微控制器(MCU)概念相混淆,微處理器只是微控制器的內(nèi)核。
(8)關(guān)于操作系統(tǒng)的選擇。可以等到你具有一定實踐后,選擇一個簡單容易理解原理的進(jìn)行學(xué)習(xí),不要一開始就學(xué)習(xí)幾種操作系統(tǒng),理解了基本原理,實踐中確有實際需要再學(xué)習(xí)也不遲。人總是要不斷學(xué)習(xí)的。
(9)關(guān)于匯編與C語言的取舍。隨著MCU對C編譯的優(yōu)化支持,對于匯編可以只了解幾個必須的語句,直接使用C語言編程。但必須通過第一個程序理解芯片初始化過程、中斷機制、程序存儲情況等區(qū)別于PC機程序的內(nèi)容。另外,為了測試的需要,最好掌握一門PC機編程語言。
(10)要明確自己的學(xué)習(xí)目的,并注意學(xué)習(xí)方法。關(guān)于學(xué)習(xí)目的要明確是打基礎(chǔ),還是為了適應(yīng)某些工作而進(jìn)行的短訓(xùn);而學(xué)習(xí)方法方面,要根據(jù)學(xué)習(xí)目的選擇合適的學(xué)習(xí)途徑,注意理論學(xué)習(xí)與實踐、通用知識與芯片相關(guān)知識、硬件知識與軟件知識的平衡,要在理解軟件工程基本原理基礎(chǔ)上理解硬件構(gòu)件與軟件構(gòu)件等基本概念。
以上建議,僅供參考。?當(dāng)然,以上只是基礎(chǔ)階段的學(xué)習(xí)建議,要成為良好的嵌入式系統(tǒng)設(shè)計師,還需要在實際項目中鍛煉,并不斷學(xué)習(xí)與積累經(jīng)驗。如果還沒有看夠,可以在21ic中國電子網(wǎng)的專欄進(jìn)行查閱。
附:嵌入式 Arm Linux 入門必讀書籍推薦
-
-
-
-
《Linux C 編程一站式學(xué)習(xí)》
-
-
-
-
《ARM嵌入式?Linux 系統(tǒng)開發(fā)從入門到精通》
-
-
《LINUX命令行與SHELL腳本編程大全》第三版
-
-
-
-
-
-
-
TheCprogramminglanguage《C程序設(shè)計語言》?
-
Ctrapsandpitfalls《C陷阱與缺陷》?
-
-
WritingCleanCode-----MicrosoftTechiniquesforDevelopingBug-freeCPrograms《編程精粹--Microsoft編寫優(yōu)質(zhì)無錯C程序秘訣》?
-
ProgrammingEmbeddedSystemsinCandC++《嵌入式系統(tǒng)編程》?
-
-
《ARM 嵌入式系統(tǒng)開發(fā)-軟件設(shè)計與優(yōu)化》
-
《ARM系列處理器應(yīng)用技術(shù)完全手冊》
-
-
-
《The_Definitive_Guide_to_ARM_Corte_M3&M4》
-
-
-
《Linux 環(huán)境編程:從應(yīng)用到內(nèi)核》
-
-
-
-
-
《Linux 內(nèi)核設(shè)計與實現(xiàn)》
-
-
《深入 Linux 內(nèi)核架構(gòu)》
-
《深入Linux 設(shè)備驅(qū)動程序內(nèi)核機制》
-
《Mastering Linux Kernel Development》
-
《Linux 設(shè)備驅(qū)動開發(fā)詳解》
-
《精通 Linux設(shè)備驅(qū)動開發(fā)》
-
-
《構(gòu)建嵌入式 Linux 系統(tǒng)》
-
《深入 Linux 內(nèi)核架構(gòu)》
-
《Linux 內(nèi)核完全注釋(帶源碼中文注釋)》
-
-
-
-
《韋東山嵌入式 Linux 應(yīng)用開發(fā)完全手冊》
-
《Linux 學(xué)習(xí)資料(華為)》
-
-
-
《給編程初學(xué)者的7本書+高級Linux編程(開源書下載)
-
-
《Operating Systems:Three Easy Pieces》
1、《嵌入式Linux 學(xué)習(xí)經(jīng)驗及推薦資料》
2、《嵌入式工程師:親身軟件內(nèi)功修煉心法》
3、《十年資深嵌入式大神教你如何從零開始學(xué)習(xí)》
-END-
|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|
|?如有侵權(quán),請聯(lián)系刪除?|
【1】嵌入式研發(fā)10多年,工程師悟出這些道理
【2】當(dāng)談起嵌入式工程師,究竟在談些什么
【3】嵌入式工程師出路之我見:就業(yè),技術(shù),行業(yè)...
【4】為什么嵌入式工程師會對8位MCU有誤解?
【5】嵌入式工程師結(jié)合經(jīng)歷聊硬件工程師和軟件工程師哪個更有前途?
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!
掃描二維碼,關(guān)注更多精彩內(nèi)容
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。
關(guān)鍵字:
阿維塔
塞力斯
華為
加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...
關(guān)鍵字:
AWS
AN
BSP
數(shù)字化
倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...
關(guān)鍵字:
汽車
人工智能
智能驅(qū)動
BSP
北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...
關(guān)鍵字:
亞馬遜
解密
控制平面
BSP
8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。
關(guān)鍵字:
騰訊
編碼器
CPU
8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。
關(guān)鍵字:
華為
12nm
EDA
半導(dǎo)體
8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。
關(guān)鍵字:
華為
12nm
手機
衛(wèi)星通信
要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...
關(guān)鍵字:
通信
BSP
電信運營商
數(shù)字經(jīng)濟
北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...
關(guān)鍵字:
VI
傳輸協(xié)議
音頻
BSP
北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...
關(guān)鍵字:
BSP
信息技術(shù)
山海路引?嵐悅新程 三亞2024年8月27日 /美通社/ --?近日,海南地區(qū)六家凱悅系酒店與中國高端新能源車企嵐圖汽車(VOYAH)正式達(dá)成戰(zhàn)略合作協(xié)議。這一合作標(biāo)志著兩大品牌在高端出行體驗和環(huán)保理念上的深度融合,將...
關(guān)鍵字:
新能源
BSP
PLAYER
ASIA
上海2024年8月28日 /美通社/ -- 8月26日至8月28日,AHN LAN安嵐與股神巴菲特的孫女妮可?巴菲特共同開啟了一場自然和藝術(shù)的療愈之旅。 妮可·巴菲特在療愈之旅活動現(xiàn)場合影 ...
關(guān)鍵字:
MIDDOT
BSP
LAN
SPI
8月29日消息,近日,華為董事、質(zhì)量流程IT總裁陶景文在中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式上表示,中國科技企業(yè)不應(yīng)怕美國對其封鎖。
關(guān)鍵字:
華為
12nm
EDA
半導(dǎo)體
上海2024年8月26日 /美通社/ -- 近日,全球領(lǐng)先的消費者研究與零售監(jiān)測公司尼爾森IQ(NielsenIQ)迎來進(jìn)入中國市場四十周年的重要里程碑,正式翻開在華發(fā)展新篇章。自改革開放以來,中國市場不斷展現(xiàn)出前所未有...
關(guān)鍵字:
BSP
NI
SE
TRACE
上海2024年8月26日 /美通社/ -- 第二十二屆跨盈年度B2B營銷高管峰會(CC2025)將于2025年1月15-17日在上海舉辦,本次峰會早鳥票注冊通道開啟,截止時間10月11日。 了解更多會議信息:cc.co...
關(guān)鍵字:
BSP
COM
AI
INDEX
上海2024年8月26日 /美通社/ -- 今日,高端全合成潤滑油品牌美孚1號攜手品牌體驗官周冠宇,開啟全新旅程,助力廣大車主通過駕駛?cè)ヌ剿鞲鼜V闊的世界。在全新發(fā)布的品牌視頻中,周冠宇及不同背景的消費者表達(dá)了對駕駛的熱愛...
關(guān)鍵字:
BSP
汽車制造
此次發(fā)布標(biāo)志著Cision首次為亞太市場量身定制全方位的媒體監(jiān)測服務(wù)。 芝加哥2024年8月27日 /美通社/ -- 消費者和媒體情報、互動及傳播解決方案的全球領(lǐng)導(dǎo)者Cis...
關(guān)鍵字:
CIS
IO
SI
BSP
上海2024年8月27日 /美通社/ -- 近來,具有強大學(xué)習(xí)、理解和多模態(tài)處理能力的大模型迅猛發(fā)展,正在給人類的生產(chǎn)、生活帶來革命性的變化。在這一變革浪潮中,物聯(lián)網(wǎng)成為了大模型技術(shù)發(fā)揮作用的重要陣地。 作為全球領(lǐng)先的...
關(guān)鍵字:
模型
移遠(yuǎn)通信
BSP
高通
北京2024年8月27日 /美通社/ -- 高途教育科技公司(紐約證券交易所股票代碼:GOTU)("高途"或"公司"),一家技術(shù)驅(qū)動的在線直播大班培訓(xùn)機構(gòu),今日發(fā)布截至2024年6月30日第二季度未經(jīng)審計財務(wù)報告。 2...
關(guān)鍵字:
BSP
電話會議
COM
TE
8月26日消息,華為公司最近正式啟動了“華為AI百校計劃”,向國內(nèi)高校提供基于昇騰云服務(wù)的AI計算資源。
關(guān)鍵字:
華為
12nm
EDA
半導(dǎo)體