www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式微處理器
[導讀]根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義,嵌入式系統(tǒng)(Embedded System)是指以應用為中心、以計算機技術為基礎,軟件硬件可裁剪、適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。

整理?|?付斌

公眾號 | 嵌入式ARM




01

嵌入式的定義和舉例分析


官方定義:

根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義,嵌入式系統(tǒng)(Embedded System)是指以應用為中心、以計算機技術為基礎,軟件硬件可裁剪、適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。舉例來說,大到油田的集散控制系統(tǒng)和工廠流水線,小到家用VCD機或手機,甚至組成普通PC終端設備的鍵盤、鼠標、硬盤、Modem等均是由嵌入式處理器控制的。

這主要是從應用上加以定義的,從中可以看出嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機械等附屬裝置。

目前國內(nèi)一個普遍被認同的定義是:以應用為中心、以計算機技術為基礎,軟件硬件可裁剪,適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。

說白了就是先設計硬件,然后根據(jù)需求編寫能在該硬件上運行的軟件,就成了所謂的“智能硬件”。

嵌入式系統(tǒng)無疑是當前最熱門最有發(fā)展前途的IT應用領域之一。嵌入式系統(tǒng)用在一些特定專用設備上,通常這些設備的硬件資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實時響應要求很高等。特別是隨著消費家電的智能化,嵌入式更顯重要。

首先嵌入式技術主要分為嵌入式軟件和嵌入式硬件2大方向。?

嵌入式硬件方向

嵌入式硬件工程師主要工作職責是為產(chǎn)品設計硬件電路原理圖,設計硬件PCB板,選擇合適的元器件,焊接調(diào)試硬件電路板,保證硬件電路板的可靠性、穩(wěn)定性和抗干擾能力。因為現(xiàn)在集成電路發(fā)展迅速,大部分集成電路廠商都會提供參考電路,所以硬件電路原理圖的設計相對來說比較簡單,硬件工程師工作的含金量主要體現(xiàn)在產(chǎn)品的可靠性和穩(wěn)定性設計、以及電磁兼容設計,這才是硬件設計工程師的含金量所在。一個資深的嵌入式硬件工程師年薪都在15萬~40萬之間。?

要成為一個資深的嵌入式工程師相當難,一方面要有非常扎實的理論知識,同時也要有相當?shù)哪欠N大型的、高頻CPU、多層PCB板的設計經(jīng)驗。嵌入式硬件工程師要學的課程主要有模擬電路設計、數(shù)字電路設計、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設計和分析。?

嵌入式軟件方向?

嵌入式軟件工程師的職責主要是根據(jù)產(chǎn)品的功能需求設計好軟件,讓硬件工作起來。嵌入式電子產(chǎn)品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 幾大部分組成,而軟件就千差萬別了。產(chǎn)品的具體功能都是由軟件來實現(xiàn)的,一般來講一個產(chǎn)品的實現(xiàn),軟件設計的工作量是硬件設計的4~5倍。所以一般情況下,一個公司的軟件工程師數(shù)量是硬件硬件工程師的4~5倍,嵌入式軟件工程師需求比硬件工程師大很多,同時跟硬件工程師相比,嵌入式軟件工程師學起來相對容易些,所以這里21ic家重點和大家談一下嵌入式軟件工程的學習路線。 ?延伸閱讀:《 嵌入式有什么值得學習的軟硬件技術? 》、《 嵌入式軟件和硬件誰更重要? 》。

02

嵌入式設計應具備的基本技能


1、Linux 基礎

安裝Linux操作系統(tǒng)
Linux文件系統(tǒng)
Linux常用命令
Linux啟動過程詳解?
熟悉Linux服務能夠獨立安裝Linux操作系統(tǒng),能夠熟練使用Linux系統(tǒng)的基本命令?
認識Linux系統(tǒng)的常用服務安裝Linux操作系統(tǒng)?
Linux基本命令實踐?
設置Linux環(huán)境變量?
定制Linux的服務Shell?
編程基礎使用vi編輯文件?
使用Emacs編輯文件?
使用其他編輯器

2、Shell 編程基礎

Shell簡介
認識后臺程序Bash編程
熟悉Linux系統(tǒng)下的編輯環(huán)境?
熟悉Linux下的各種Shell?
熟練進行shell編程熟悉vi基本操作?
熟悉Emacs的基本操作?
比較不同shell的區(qū)別?
編寫一個測試服務器是否連通的shell腳本程序?
編寫一個查看進程是否存在的shell腳本程序?
編寫一個帶有循環(huán)語句的shell腳本程序

3、Linux下的C編程基礎

linux c語言環(huán)境概述?
Gcc使用方法?
Gdb調(diào)試技術?
AutoconfAutomake Makefile?代碼優(yōu)化?
熟悉Linux系統(tǒng)下的開發(fā)環(huán)境?
熟悉Gcc編譯器?
熟悉Makefile規(guī)則編寫Hello,World程序?
使用 make命令編譯程序?
編寫帶有一個循環(huán)的程序?
調(diào)試一個有問題的程序

4、嵌入式系統(tǒng)開發(fā)基礎

嵌入式系統(tǒng)概述?
交叉編譯?
配置TFTP服務?
配置NFS服務?
下載Bootloader和內(nèi)核?
嵌入式Linux應用軟件開發(fā)流程熟悉嵌入式系統(tǒng)概念以及開發(fā)流程?
建立嵌入式系統(tǒng)開發(fā)環(huán)境制作cross_gcc工具鏈?
編譯并下載U-boot?
編譯并下載Linux內(nèi)核?
編譯并下載Linux應用程序

5、嵌入式系統(tǒng)移植

Linux內(nèi)核代碼?
平臺相關代碼分析?
ARM平臺介紹?
平臺移植的關鍵技術?
移植Linux內(nèi)核到 ARM平臺?
了解移植的概念?
能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到ARM9開發(fā)板

6、嵌入式 Linux 下串口通信

串行I/O的基本概念?
嵌入式Linux應用軟件開發(fā)流程?
Linux系統(tǒng)的文件和設備?
與文件相關的系統(tǒng)調(diào)用?
配置超級終端和MiniCOM?
能夠熟悉進行串口通信?
熟悉文件I/O?
編寫串口通信程序?
編寫多串口通信程序

7、嵌入式系統(tǒng)中多進程程序設計

Linux系統(tǒng)進程概述?
嵌入式系統(tǒng)的進程特點?
進程操作?
守護進程?
相關的系統(tǒng)調(diào)用了解Linux系統(tǒng)中進程的概念?
能夠編寫多進程程序編寫多進程程序?
編寫一個守護進程程序?
sleep系統(tǒng)調(diào)用任務管理
同步與通信Linux任務概述任務調(diào)度?
管道 信號 共享內(nèi)存 任務管理 API?
了解Linux系統(tǒng)任務管理機制?
熟悉進程間通信的幾種方式?
熟悉嵌入式Linux中的任務間同步與通信編寫一個簡單的管道程序?qū)崿F(xiàn)文件傳輸?
編寫一個使用共享內(nèi)存的程序

8、嵌入式系統(tǒng)中多線程程序設計

線程的基礎知識?
多線程編程方法?
線程應用中的同步問題了解線程的概念?
能夠編寫簡單的多線程程序編寫一個多線程程序

03

嵌入式軟件工程師學習流程


第一部分:Linux平臺搭建與環(huán)境熟悉

了解linux系統(tǒng);區(qū)分各種版本的Linux系統(tǒng),以便于拓展 Linux視野。

1、Linux 簡介;
2、Linux 系統(tǒng)的主要特點;
3、Linux 的組成;
4、主要的 Linux 版本;
5、嵌入式 Linux簡介與發(fā)展

第二部分:虛擬機安裝和LINUX系統(tǒng)安裝

1、虛擬機安裝;
2、Linux系統(tǒng)的安裝;
3、Linux系統(tǒng)的常用軟件的安裝;
4、Linux快速入門
5、 熟悉運用 Linux環(huán)境下,常用命令的操作與系統(tǒng)設置,如常用的 Shell;掌握基本的Shell 應用

第三部分:嵌入式LINUX環(huán)境搭建

1、 建立嵌入式 Linux開發(fā)環(huán)境
2、 熟悉嵌入式開發(fā)平臺
3、 嵌入式 Linux開發(fā)工具
4、 Linux下的調(diào)試技巧
5、 MAKE工程管理器
6、 硬件環(huán)境的搭建;arm-linux-gcc與 gcc安裝配置

第四部分:U-Boot

了解 U-Boot 的作用及工作流程;了解Bootloader 的代碼結構、編譯過程;移植U-Boot;掌握常用的U-Boot命令。

1、 Bootloader介紹
2、 u-boot工程介紹
3、 u-boot的編譯使用
4、 u-boot源碼分析
5、 u-boot資源分配
6、 配置編譯u-boot
7、 u-boot移植過程
8、 u-boot常用命令操作
9、 添加u-boot新命令
10、設置u-boot環(huán)境變量
11、 u-boot驅(qū)動添加如網(wǎng)卡:DM9000

第五部分:LINUX內(nèi)核移植

熟悉內(nèi)核的原碼結構和kbuild Makefile語法;掌握和內(nèi)核、驅(qū)動模塊編譯相關的原理及方法。

1、Linux內(nèi)核介紹
2、Linux內(nèi)核特點
3、Linux內(nèi)核源代碼結構
4、Linux內(nèi)核選項解析
5、Linux內(nèi)核編譯鏈接
6、內(nèi)核模塊編譯、使用方法

第六部分:LINUX根文件系統(tǒng)

1、busybox 包移植、編譯
2、Linux跟文件系統(tǒng)制作過程
3、根文件系統(tǒng)介紹
4. nfs文件服務器系統(tǒng)搭建

第七部分:LINUX應用學習

嵌入式Linux應用開發(fā)和系統(tǒng)開發(fā)是嵌入式Linux中最重要的一部分,也是企業(yè)人才需求最廣的一部分。

主要目標是精通嵌入式Linux下的程序設計,熟練掌握嵌入式Linux的開發(fā)環(huán)境、系統(tǒng)編程以及網(wǎng)絡編程,熟悉C++、QT編程并且深刻體會整個嵌入式Linux項目開發(fā)流程,強化學員對Linux應用開發(fā)的能力。

1、Linux系統(tǒng)中的進程的概念,在應用程序中線程與父子進程的創(chuàng)建與應用
2、線程之間、進程之間的通信
3、進程間通信基本概念
4、管道(PIPE)
5、信號(SIGNAL)
6、內(nèi)存映射(MAPPED MEMORY)
7、消息隊列(MESSAGE QUEUE)
8、信號量(SEMAPHORE)
9、共享內(nèi)存(SHARE MEMORY)@
10、tcPip協(xié)議在應用程序中的編程開發(fā)(SOCKET套接字編程開發(fā))
10.1. ISO/OSI七層協(xié)議模型與IP網(wǎng)絡四層模式
10.2.TCP/IP協(xié)議簇
10.3. 基于嵌入式Linux的TCP/IP網(wǎng)絡結構
10.4. 基于嵌入式Linux的SOCKET編程
10.5.UDP與TCP的區(qū)別
10.6. UDP SERVER-CLIENT關系程
11、文件讀寫與存儲

04

嵌入式軟件工程師的內(nèi)功修煉


所謂嵌入式軟件開發(fā),抽象的講,就是在專用的硬件平臺借助宿主機交叉編譯環(huán)境通過編程、編譯、鏈接下載、調(diào)試達到目標需求;往細了分,嵌入式軟件開發(fā)可分為嵌入式驅(qū)動設計師(向下根據(jù)接口協(xié)議驅(qū)動硬件設備,向上提供應用API),嵌入式系統(tǒng)設計師(編寫固件程序,設計操作系統(tǒng)內(nèi)核或文件系統(tǒng),根據(jù)不同硬件平臺移植操作系統(tǒng),優(yōu)化系統(tǒng)功能),嵌入式界面設計師(嵌入式硬件平臺的上位機GUI設計,人機交互),嵌入式應用設計師(裸機或操作系統(tǒng)移植調(diào)度驅(qū)動API按照一定的算法邏輯實現(xiàn)相應的需求功能),嵌入式算法設計師(把相關數(shù)學算法設計成軟件程序精準優(yōu)化系統(tǒng)功能,如PID控算、卡爾曼濾波算法、低通濾波等)。

C語言就是嵌入式軟件的內(nèi)功,21ic家也曾經(jīng)多次強調(diào)。相信大家都看過武俠小說或電視,金老前輩的甚是出名,里面有“天下武功出少林”一說,為什么呢?

就是因為少林有一本《易筋經(jīng)》,“掃地僧”也就是當時江湖的大神,學了易筋經(jīng)的人想再學其他武功可謂是游刃有余,就像《射雕英雄傳》的郭靖郭大俠因為修煉了全真教馬鈺道長的內(nèi)功,再學洪七公、老頑童等的外功就很簡單了,而C語言就是所有各種編程語言(像Python、Java、C++、PHP、JavaScript等等)里面的“易筋經(jīng)”,達到精通C的境界,再學其他就很簡單了,因為C要整明白,必須了解底層、明白計算機系統(tǒng)的運行機制,當然一個沒學過匯編的人不能真正掌握C語言的真諦。

在如今Python、Java編程語言火熱的市場前景下,資深工程師的建議是,在學校讀書真心想搞IT技術,從C語言學起,會受益終生的。

學習C語言難嗎?資深工程師表示:不難。真正懂得用C語言難嗎?--難,但是按照心法不斷去實踐會化解“難”這顆頑石?,F(xiàn)在對C語言水平層次的定義有幾階:入門、掌握、熟悉、精通?,F(xiàn)在很多一線的軟件工程師都是至多在“熟悉”的水平階上。

內(nèi)功心法:用數(shù)學思維抽象化去學習,多編程、多調(diào)試、多實際應用,多看高手寫的優(yōu)秀代碼,可以嘗試去寫寫RTOS內(nèi)核;知錯就改,溫故知新,不斷學習

內(nèi)功大綱:結構體、數(shù)組、指針、函數(shù)、內(nèi)存管理

  1. 深度理解ANSI標準定義的C語言預處理指令用法,文件結構問題
  2. 明確定義及聲明,深度解析C語言的32個關鍵字,sizeof是關鍵字
  3. 標準C語言的20個基本符號深度熟練怎么用,還有表達式的優(yōu)先級問題
  4. 深度理解內(nèi)存管理與內(nèi)存泄漏問題,野指針的問題,棧、堆、靜態(tài)區(qū)的問題
  5. 深度解析指針和數(shù)組的內(nèi)存布局,它們之間的相互訪問形式以及地址的強制轉換 ,還有多維數(shù)組和多級指針問題
  6. 深度理解函數(shù)設計的原則和技巧,養(yǎng)成良好的編程風格和編程習慣

順便提提軟件面試一般考察的問題,也就是面試官想通過面試了解的問題:

  1. 在需求實現(xiàn)的前提下,看你的編程風格;
  2. 編程邏輯不可能一步到位,很多時候需要不斷修改,看你出錯問題的處理能力;
  3. 對你代碼算法復雜度進行分析,是否提高系統(tǒng)性能。

05

嵌入式軟硬件界限又不是那么深



嵌入式系統(tǒng)的應用范圍可以粗略分為兩大類:

(1)電子系統(tǒng)的智能化(工業(yè)控制,現(xiàn)代農(nóng)業(yè)、家用電器、汽車電子、測控系統(tǒng)、數(shù)據(jù)采集等等);

(2)計算機應用的延伸(MP3、手機、通信、網(wǎng)絡、計算機外圍設備等)。從這些應用可以看出,要完成一個以MCU為核心的嵌入式系統(tǒng)應用產(chǎn)品設計,需要有硬件、軟件及行業(yè)領域相關知識。硬件主要有MCU的硬件最小系統(tǒng)、輸入/輸出外圍電路、人機接口設計。軟件設計有固化軟件的設計,也可能含PC機軟件的設計。行業(yè)知識需要通過協(xié)作、交流與總結獲得。

概括地說,學習以MCU為核心的嵌入式系統(tǒng),需要以下軟件硬件基礎知識與實踐訓練:

1:硬件最小系統(tǒng)(包括電源、晶振、復位、寫入調(diào)試接口);
2:通用I/O(開關量輸入/輸出,涉及各種二值量檢測與控制);
3:模數(shù)轉換A/D(各種傳感器信號的采集與處理,如紅外、溫度、光敏、超聲波、方向等等);
4:數(shù)模轉換D/A(對模擬量設備利用數(shù)字進行控制);
5:通信(串行通信接口SCI、串行外設接口SPI、集成電路互聯(lián)總線I2C,CAN、USB、嵌入式以太網(wǎng)、ZigBee技術等);
6:顯示(LED、LCD等等);
7:控制(控制各種設備,包含PWM等控制技術);
8:數(shù)據(jù)處理(圖形、圖像、語音、視頻等處理或識別);
9:各種具體應用。

事實上,萬變不離其宗,任何應用都可以歸入這幾類。而應用中的硬件設計、軟件設計、測試等都必須遵循嵌入式軟件工程的方法、原理與基本原則。所以,嵌入式軟件工程也是嵌入式系統(tǒng)知識體系的有機組成部分,只不過,它融于具體項目的開發(fā)過程之中。21ic家多次強調(diào),雖然嵌入式工程師有軟件和硬件工程師的分別,但是其實對于嵌入式工程師來說,兩手都要硬,只不過相關領域工程師的深淺不同。更多相關內(nèi)容可以在21ic中國電子網(wǎng)查閱查看。

以上實踐訓練涉及硬件基礎、軟件基礎及相關領域知識。計算機語言、操作系統(tǒng)、開發(fā)環(huán)境等均是完成這些目的的工具。有些初學者,容易把工具的使用與所要達到的真正目的相混淆。例如,有的學習者,學了很長時間的嵌入式操作系統(tǒng)移植,而不進行實際嵌入式系統(tǒng)產(chǎn)品的開發(fā),到了最后,做不好一個嵌入式系統(tǒng)小產(chǎn)品,偏離了學習目標,甚至放棄了嵌入式系統(tǒng)領域。這就是進入了嵌入式系統(tǒng)學習誤區(qū)的情況,下面對此做一些分析。

06

嵌入式系統(tǒng)的學習誤區(qū)


關于嵌入式系統(tǒng)的學習方法,因?qū)W習經(jīng)歷、學習環(huán)境、學習目的、已有的知識基礎等不同,可能在學習順序、內(nèi)容選擇、實踐方式等方面有所不同。但是,應該明確哪些是必備的基礎知識,哪些應該先學,哪些應該后學,哪些必須通過實踐才能獲得的,哪些是與具體芯片無關的通用知識,哪些是與具體芯片或開發(fā)環(huán)境相關的知識。

由于微處理器與微控制器種類繁多,也可能由于不同公司、不同機構出于自身的利益,給出一些誤導性宣傳,特別是我國嵌入式微控制器制造技術的落后及其他相關情況,使得人們對微控制器的發(fā)展,在認識與理解上存在差異。導致一些初學者,進入了嵌入式系統(tǒng)的學習誤區(qū),浪費了寶貴的學習時間。下面分析初學者可能存在的幾個誤區(qū)。

如果說,學習嵌入式系統(tǒng)不是為了開發(fā)其應用產(chǎn)品,那就沒有具體目標了,許多諸如學習方法問題也就不必談了。實際上,這正是許多人想學,又不知從何開始學習的關鍵問題所在,不知道自己學習的具體目標。于是,看了一些培訓廣告,看了書店中書架上種類繁多的嵌入式系統(tǒng)的書籍,或上網(wǎng)以“嵌入式系統(tǒng)”為關鍵詞進行查詢,然后參加培訓或看書,開始“學習起來”。對于有計算機閱歷的人,往往選擇一個嵌入式操作系統(tǒng)就開始學習了。不好聽的比喻,有點象“瞎子摸大象”,只了解其一個側面。這樣如何能對嵌入式產(chǎn)品的開發(fā)過程有個全面了解呢?針對許多初學者選擇“xxx嵌入式操作系統(tǒng)+xxx處理器”的嵌入式系統(tǒng)入門學習模式,我認為是不合適的。我的建議是:首先把嵌入式系統(tǒng)軟件與硬件基礎打好了,再根據(jù)實際需要,選擇一種實時操作系統(tǒng)(RTOS)進行學習實踐。要記住:RTOS是開發(fā)某些類嵌入式產(chǎn)品的輔助工具,是手段,不是目的。許多類嵌入式產(chǎn)品,并不需要RTOS。所以,一開始就學習RTOS,并不符合學習“由淺入深、循序漸進”的學習規(guī)律。

RTOS本身由于種類繁多,實際使用何種RTOS,一般需要工作單位確定。基礎階段主要學習RTOS的基本原理與在RTOS之上的軟件開發(fā)方法,而不是學習如何設計RTOS。以開發(fā)實際嵌入式產(chǎn)品為目標的學習者,不要把過多的精力花在設計或移植RTOS上面。正如很多人使用Windows操作系統(tǒng),而設計Windows操作系統(tǒng)只有Microsoft。許多人“研究”Linux,但不使用它,浪費時間了,人的精力是有限的,學習必須有所選擇。

硬件與軟件的困惑

以MCU為核心的嵌入式技術的知識體系必須通過具體的MCU來體現(xiàn)、實踐與訓練。但是,選擇任何型號的MCU,其芯片相關的知識只占知識體系的20%,80%是通用知識。但是80%的通用知識,必須通過具體實踐才能進行,所以學習嵌入式技術要選擇一個系列的MCU。但不論如何,系統(tǒng)含有硬件與軟件兩大部分,它們之間的關系如何?

有些學者,僅從電子角度認識嵌入式系統(tǒng)。認為“嵌入式系統(tǒng)=MCU硬件系統(tǒng)+小程序”。這些學者,大多學習背景是具有良好的電子技術基礎知識。實際情況是,早期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ā)生了根本變化。

有些學者,僅從軟件開發(fā)角度認識嵌入式系統(tǒng),甚至有的僅從嵌入式操作系統(tǒng)認識嵌入式系統(tǒng)。這些學者,大多具有良好的計算機軟件開發(fā)基礎知識,認為硬件是生產(chǎn)廠商的事,沒有認識到,嵌入式系統(tǒng)產(chǎn)品的軟件與硬件均是需要開發(fā)者設計的。我常常接到一些關于嵌入式產(chǎn)品穩(wěn)定性的咨詢電話,發(fā)現(xiàn)大多數(shù)是由于軟件開發(fā)者對底層硬件的基本原理不理解造成的。特別是,有些功能軟件開發(fā)者,過分依賴于底層硬件的驅(qū)動軟件設計完美,自己對底層驅(qū)動原理知之甚少。實際上,一些功能軟件開發(fā)者,名義上再做嵌入式軟件,實際上,僅僅使用嵌入式編輯、編譯環(huán)境而已,本質(zhì)與開發(fā)通用PC機軟件沒有兩樣。

而底層硬件驅(qū)動軟件的開發(fā),若不全面考慮高層功能軟件對底層硬件的可能調(diào)用,也會使得封裝或參數(shù)設計得不合理或不完備,導致高層功能軟件的調(diào)用困難。從這段描述可以看出,若把一個嵌入式系統(tǒng)的開發(fā)孤立地分為硬件設計、底層硬件驅(qū)動軟件設計、高層功能軟件設計,一旦出現(xiàn)了問題,就可能難以定位。實際上,嵌入式系統(tǒng)設計是一個軟件、硬件協(xié)同設計工程,不能象通用計算機那樣,軟件、硬件完全分開來看,要在一個大的框架內(nèi)協(xié)調(diào)工作。?面對學習嵌入式系統(tǒng)以軟件為主還是以硬件為主,或是如何選擇切入點,如何在軟件與硬件之間取得一些平衡。對于這個困惑的建議是:要想成為一名真正的嵌入式系統(tǒng)設計師,在初學階段,必須重視打好嵌入式系統(tǒng)的硬件與軟件基礎。以下是從事嵌入式系統(tǒng)設計二十多年的一個美國學者John Catsoulis 在《Designing Embedded Hardware》一書中關于這個問題的總結:嵌入式系統(tǒng)與硬件緊密相關,是軟件與硬件的綜合體,沒有對硬件的理解就不可能寫好嵌入式軟件,同樣沒有對軟件的理解也不可能設計好嵌入式硬件。

嵌入式系統(tǒng)產(chǎn)品種類繁多,應用領域各異。在2.1小節(jié)中,我們把嵌入式系統(tǒng)的應用范圍粗略分為電子系統(tǒng)的智能化與計算機應用的延伸兩大類,從初學者角度,可能有分別從這兩個角度片面認識嵌入式系統(tǒng)的問題。因此,一些從電子系統(tǒng)智能化角度認識嵌入式系統(tǒng)的學習者,可能會忽視編程結構、編程規(guī)范、軟件工程的要求、操作系統(tǒng)等知識的積累。另一些從計算機應用的延伸角度認識嵌入式系統(tǒng)的學習者,可能會把通用計算機學習過程中的概念與方法生搬硬套到嵌入式系統(tǒng)的實踐中,忽視嵌入式系統(tǒng)與通用計算機的差異。

實際上,在嵌入式系統(tǒng)學習與實踐的初始階段,應該充分了解嵌入式系統(tǒng)的特點,根據(jù)自身的已有知識結構,制定適合自身情況的學習計劃。目標應該是打好嵌入式系統(tǒng)的硬件與軟件基礎,通過實踐,為成為良好的嵌入式系統(tǒng)設計師建立起基本知識結構。學習過程,可以通過具體應用系統(tǒng)為實踐載體,但不能拘泥于具體系統(tǒng),應該有一定的抽象與歸納。例如,有的初學者開發(fā)一個實際控制系統(tǒng),沒有使用實時操作系統(tǒng),但不要認為實時操作系統(tǒng)不需要學習。又例如,有的初學者以一個帶有實時操作系統(tǒng)的樣例為藍本進行學習,但不要認為,任何嵌入式系統(tǒng)都需要使用實時操作系統(tǒng),甚至把一個十分簡明的實際系統(tǒng)加上一個不必要的實時操作系統(tǒng)。因此,片面認識嵌入式系統(tǒng),可能導致學習困惑。應該根據(jù)實際項目需要,鍛煉自己分析實際問題、解決問題的能力。這是一個比較長期的學習與實踐過程,不能期望通過短期培訓完成整體知識體系的建立,應該重視自身實踐,全面地理解嵌入式系統(tǒng)的知識體系。

嵌入式系統(tǒng)的大部分初學者需要選擇一個微控制器(MCU)進行入門級學習,面對眾多廠家生產(chǎn)的微控制器系列,不知如何是好。

首先是關于位數(shù)問題,目前主要有8位、16位、32位,面對嵌入式系統(tǒng)應用的多樣性,不同位數(shù)的MCU各有應用領域,這一點與通用微機有很大不同。你做一個遙控器,不需要使用一個32位MCU,可能一個MCU芯片價格已經(jīng)超過遙控器價格需求。對于首次接觸嵌入式系統(tǒng)的學習者,可以根據(jù)自己的知識基礎選擇入門芯片的位數(shù)。建議大多數(shù)初學者,可以選擇一個8位MCU作為快速入門芯片,了解一些匯編與底層硬件知識,之后再選一個16位或32位芯片進行學習實踐。

關于芯片選擇的另一個誤區(qū),認為有“主流芯片”存在,嵌入式系統(tǒng)也可以形成芯片壟斷。這完全是一種誤解,是套用通用計算機系統(tǒng)的思維模式,而忽視了嵌入式系統(tǒng)應用的多樣性。

關于學習芯片選擇還有一個誤區(qū),是系統(tǒng)的工作頻率。誤認為選擇工作頻率高的芯片進行入門學習,表示更先進。實際上,工作頻率高可能給初學者帶來學習過程中的不少困難。

實際嵌入式系統(tǒng)設計不是追求芯片位數(shù)、工作頻率、操作系統(tǒng)等因素,而是追求穩(wěn)定可靠、維護、升級、功耗、價格等指標。而初學者選擇入門芯片,是通過某一MCU作為藍本獲得嵌入式系統(tǒng)知識體系的通用基礎,其基本原則是:入門時間較快、硬件成本較少,知識要素較多,學習難度較低。

07
基礎階段的學習建議

基于以上討論,21ic家總結了渴望學習嵌入式系統(tǒng)的學子提出幾點基礎階段的學習建議:

(1)嵌入式系統(tǒng)軟件硬件密切相關,一定要打好軟件硬件基礎。其實,只要找到正確的方法,加上努力,任何理工科學生,甚至非理工科學生,都能學好嵌入式系統(tǒng)。

(2)選擇一個芯片及硬件評估板(入門芯片最好是簡單一點,例如8位MCU)、選擇一本好書(最好有規(guī)范的例子)、找一位好老師(最好是有經(jīng)驗且熱心的)。硬件評估板的價格一定要在1000元以下,不要太貴,最好能有自己動手的空間。不花一分硬件錢,要想學好嵌入式系統(tǒng)不實際。因為,這是實踐性很強的學科。好書,可以使你少走彎路,不會被誤導,要知道有的書是會使人進入學習誤區(qū)的。好老師也可以是做過一些實際項目的學長(一定要找做過幾個成功項目的學長或老師做指導,否則,經(jīng)驗不足也可能誤導),有教師指導,學習進程會加快(人工智能學科里有個術語叫無教師指導學習模式與有教師指導學習模式,無教師指導學習模式比有教師指導學習模式復雜許多)。

(3)許多人怕硬件,其實嵌入式系統(tǒng)硬件比電子線路好學多了。只要深入理解MCU的硬件最小系統(tǒng),對I/O口、串行通信、鍵盤、LED、LCD、SPI、I2C、PWM、A/D(包括一些傳感器)、D/A等逐個實驗理解,逐步實踐。再通過自己做一個實際的小系統(tǒng),底層硬件基礎就有了。各個硬件模塊驅(qū)動程序的編寫是嵌入式系統(tǒng)的必備基礎。學習嵌入式系統(tǒng)的初期,這個過程是必須的。

(4)至于嵌入式實時操作系統(tǒng)RTOS,一定不要一開始就學,這樣會走很多彎路,也會使你對嵌入式系統(tǒng)感到畏懼。等你軟件硬件基礎打好了,再學習就感到容易理解。實際上,眾多嵌入式應用,并不一定需要操作系統(tǒng)。也可以根據(jù)實際項目需要再學習特定的RTOS。一定不要被一些嵌入式實時操作系統(tǒng)培訓班宣傳所誤導,而忽視實際嵌入式系統(tǒng)軟件硬件基礎知識的學習。

(5)要避免片面地單純從“電子”或“計算機軟件”角度認識嵌入式系統(tǒng)。前面說過,嵌入式系統(tǒng)是軟件與硬件的綜合體。因此,要逐步從MCU的最小系統(tǒng)開始,一點一點理解硬件原理及底層硬件驅(qū)動編程方法。要通過規(guī)范的例子,理解軟件工程封裝、可復用等思想。通過規(guī)范編程,積累底層構件(Component),也就是一個一個模塊,但是要封裝得比較好,可復用。

(6)注重實驗與實踐。這里說的實驗主要指通過重復或驗證他人的工作,目的是學習基礎知識,這個過程一定要經(jīng)歷。實踐是自己設計,有具體的“產(chǎn)品”目標。如果你能花500元左右自己做一個具有一定功能的小產(chǎn)品,且能穩(wěn)定運行1年以上,就可以說接近入門了。

(7)關于入門芯片的選擇。不要選太復雜的微控制器作為入門芯片,不能超越學習過程。不要一下子學習幾種芯片,可以通過一個芯片入門并具有一個實踐經(jīng)驗后,根據(jù)實際需要選擇芯片開發(fā)實際產(chǎn)品。注意,不要把微處理器(MPU)與微控制器(MCU)概念相混淆,微處理器只是微控制器的內(nèi)核。

(8)關于操作系統(tǒng)的選擇??梢缘鹊侥憔哂幸欢▽嵺`后,選擇一個簡單容易理解原理的進行學習,不要一開始就學習幾種操作系統(tǒng),理解了基本原理,實踐中確有實際需要再學習也不遲。人總是要不斷學習的。

(9)關于匯編與C語言的取舍。隨著MCU對C編譯的優(yōu)化支持,對于匯編可以只了解幾個必須的語句,直接使用C語言編程。但必須通過第一個程序理解芯片初始化過程、中斷機制、程序存儲情況等區(qū)別于PC機程序的內(nèi)容。另外,為了測試的需要,最好掌握一門PC機編程語言。

(10)要明確自己的學習目的,并注意學習方法。關于學習目的要明確是打基礎,還是為了適應某些工作而進行的短訓;而學習方法方面,要根據(jù)學習目的選擇合適的學習途徑,注意理論學習與實踐、通用知識與芯片相關知識、硬件知識與軟件知識的平衡,要在理解軟件工程基本原理基礎上理解硬件構件與軟件構件等基本概念。

以上建議,僅供參考。?當然,以上只是基礎階段的學習建議,要成為良好的嵌入式系統(tǒng)設計師,還需要在實際項目中鍛煉,并不斷學習與積累經(jīng)驗。如果還沒有看夠,可以在21ic中國電子網(wǎng)的專欄進行查閱。

附:嵌入式 Arm Linux 入門必讀書籍推薦


1、Linux基礎入門

  • 《笨辦法學 Linux?》
  • 《嵌入式 Linux 基礎教程》
  • 《Linux 就該這么學》
  • 《Linux C 編程一站式學習》
  • 《嵌入式 Linux 開發(fā)教程》
  • 《鳥哥的 Linux 私房菜》
  • 《Linux 自學大全》
  • 《ARM嵌入式?Linux 系統(tǒng)開發(fā)從入門到精通》
  • 《ARM Linux 入門與實踐》

2、Linux 系統(tǒng)環(huán)境

  • 《LINUX命令行與SHELL腳本編程大全》第三版
  • 《Shell 編程大全》
  • 《Shellbook》
  • 《Shell 命令行操作》

3、Git 版本管理

  • 《GitHub 入門與實踐》
  • 《Pro Git》第二版

4、C 語言和匯編

  • 《C 和 指針》
  • 《C 語言深度剖析》
  • 《高質(zhì)量C++編程指南》
  • TheCprogramminglanguage《C程序設計語言》?
  • Ctrapsandpitfalls《C陷阱與缺陷》?
  • ExpertCLanuage《專家C編程》?
  • WritingCleanCode-----MicrosoftTechiniquesforDevelopingBug-freeCPrograms《編程精粹--Microsoft編寫優(yōu)質(zhì)無錯C程序秘訣》?
  • ProgrammingEmbeddedSystemsinCandC++《嵌入式系統(tǒng)編程》?
  • 《高質(zhì)量C++/C編程指南》林銳?

5、Arm 體系結構

  • 《ARM 嵌入式系統(tǒng)開發(fā)-軟件設計與優(yōu)化》
  • 《ARM系列處理器應用技術完全手冊》
  • ARM 官方文檔
  • 編程指南:
    • 《The_Definitive_Guide_to_ARM_Corte_M3&M4》
    • 《Arm Cortex-A 編程指南》
    • 《Armv8-A 編程指南》

6、Linux 應用編程

  • 《Linux 環(huán)境編程:從應用到內(nèi)核》
  • 《GNU Linux 編程指南》
  • 《Linux 程序設計》
  • 《Linux 系統(tǒng)編程》
  • 《UNIX 環(huán)境高級編程》

6、Linux 內(nèi)核基礎原理

  • 《Linux 內(nèi)核設計與實現(xiàn)》
  • 《Linux 設備驅(qū)動程序》
  • 《深入 Linux 內(nèi)核架構》
  • 《深入Linux 設備驅(qū)動程序內(nèi)核機制》
  • 《Mastering Linux Kernel Development》

7、Linux 內(nèi)核開發(fā)與實踐

  • 《Linux 設備驅(qū)動開發(fā)詳解》
  • 《精通 Linux設備驅(qū)動開發(fā)》
  • 《嵌入式 Linux 基礎教程》
  • 《構建嵌入式 Linux 系統(tǒng)》
  • 《深入 Linux 內(nèi)核架構》
  • 《Linux 內(nèi)核完全注釋(帶源碼中文注釋)》
  • 《一幅漫畫解讀 Linux 內(nèi)核》
  • 《快速理解什么是 Linux 內(nèi)核》
  • 《嵌入式 Linux 框架的理解》

8、Linux應用開發(fā)

  • 《韋東山嵌入式 Linux 應用開發(fā)完全手冊》
  • 《Linux 學習資料(華為)》
  • 《樹莓派開始,玩轉 Linux》
  • 《書單:頂級Linux大神告訴你該看哪些書》
  • 《給編程初學者的7本書+高級Linux編程(開源書下載)

9、操作系統(tǒng)理論與基礎

  • 《深入理解計算機系統(tǒng)》
  • 《Operating Systems:Three Easy Pieces》

【參考文獻】

1、《嵌入式Linux 學習經(jīng)驗及推薦資料》
2、《嵌入式工程師:親身軟件內(nèi)功修煉心法》
3、《十年資深嵌入式大神教你如何從零開始學習》

-END-


|?整理文章為傳播相關技術,版權歸原作者所有?|

|?如有侵權,請聯(lián)系刪除?|


【1】嵌入式研發(fā)10多年,工程師悟出這些道理

【2】當談起嵌入式工程師,究竟在談些什么

【3】嵌入式工程師出路之我見:就業(yè),技術,行業(yè)...

【4】為什么嵌入式工程師會對8位MCU有誤解?

【5】嵌入式工程師結合經(jīng)歷聊硬件工程師和軟件工程師哪個更有前途?



免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉