日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

整理?|?付斌

公眾號 | 嵌入式ARM




01

嵌入式的定義和舉例分析


官方定義:

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

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

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

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

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

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

嵌入式硬件方向

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

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

嵌入式軟件方向?

嵌入式軟件工程師的職責主要是根據產品的功能需求設計好軟件,讓硬件工作起來。嵌入式電子產品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 幾大部分組成,而軟件就千差萬別了。產品的具體功能都是由軟件來實現的,一般來講一個產品的實現,軟件設計的工作量是硬件設計的4~5倍。所以一般情況下,一個公司的軟件工程師數量是硬件硬件工程師的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調試技術?
AutoconfAutomake Makefile?代碼優(yōu)化?
熟悉Linux系統(tǒng)下的開發(fā)環(huán)境?
熟悉Gcc編譯器?
熟悉Makefile規(guī)則編寫Hello,World程序?
使用 make命令編譯程序?
編寫帶有一個循環(huán)的程序?
調試一個有問題的程序

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

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

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

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

6、嵌入式 Linux 下串口通信

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

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

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

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下的調試技巧
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驅動添加如網卡:DM9000

第五部分:LINUX內核移植

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

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

第六部分: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)編程以及網絡編程,熟悉C++、QT編程并且深刻體會整個嵌入式Linux項目開發(fā)流程,強化學員對Linux應用開發(fā)的能力。

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

04

嵌入式軟件工程師的內功修煉


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

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

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

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

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

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

內功大綱:結構體、數組、指針、函數、內存管理

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

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

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

05

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



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

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

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

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

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

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

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

06

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


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

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

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

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

硬件與軟件的困惑

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

有些學者,僅從電子角度認識嵌入式系統(tǒng)。認為“嵌入式系統(tǒng)=MCU硬件系統(tǒng)+小程序”。這些學者,大多學習背景是具有良好的電子技術基礎知識。實際情況是,早期MCU內部RAM小、程序存儲器外接,需要外擴各種I/O,沒有象現在這樣USB、嵌入式以太網等較復雜的接口,因此,程序占總設計量小于50%,使人們認為嵌入式系統(tǒng)(單片機)是“電子系統(tǒng)”,以硬件為主、程序為輔。但是,隨著MCU制造技術的發(fā)展,不僅MCU內部RAM越來越大,Flash進入MCU內部改變了傳統(tǒng)的嵌入式系統(tǒng)開發(fā)與調試方式,固件程序可以被更方便地調試與在線升級,許多情況與開發(fā)PC機程序方便程度相差無幾,只不過開發(fā)環(huán)境與運行環(huán)境不是同一載體而已。這些情況使得嵌入式系統(tǒng)的軟件硬件設計方法發(fā)生了根本變化。

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

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

嵌入式系統(tǒng)產品種類繁多,應用領域各異。在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)的特點,根據自身的已有知識結構,制定適合自身情況的學習計劃。目標應該是打好嵌入式系統(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),可能導致學習困惑。應該根據實際項目需要,鍛煉自己分析實際問題、解決問題的能力。這是一個比較長期的學習與實踐過程,不能期望通過短期培訓完成整體知識體系的建立,應該重視自身實踐,全面地理解嵌入式系統(tǒng)的知識體系。

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

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

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

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

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

07
基礎階段的學習建議

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

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

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

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

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

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

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

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

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

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

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

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

附:嵌入式 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 語言深度剖析》
  • 《高質量C++編程指南》
  • TheCprogramminglanguage《C程序設計語言》?
  • Ctrapsandpitfalls《C陷阱與缺陷》?
  • ExpertCLanuage《專家C編程》?
  • WritingCleanCode-----MicrosoftTechiniquesforDevelopingBug-freeCPrograms《編程精粹--Microsoft編寫優(yōu)質無錯C程序秘訣》?
  • ProgrammingEmbeddedSystemsinCandC++《嵌入式系統(tǒng)編程》?
  • 《高質量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)境編程:從應用到內核》
  • 《GNU Linux 編程指南》
  • 《Linux 程序設計》
  • 《Linux 系統(tǒng)編程》
  • 《UNIX 環(huán)境高級編程》

6、Linux 內核基礎原理

  • 《Linux 內核設計與實現》
  • 《Linux 設備驅動程序》
  • 《深入 Linux 內核架構》
  • 《深入Linux 設備驅動程序內核機制》
  • 《Mastering Linux Kernel Development》

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

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

8、Linux應用開發(fā)

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

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

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

【參考文獻】

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

-END-


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

|?如有侵權,請聯系刪除?|


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

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

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

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

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



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

嵌入式ARM

掃描二維碼,關注更多精彩內容

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

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉