一個合格的嵌入式軟體開發工程師要掌握哪些知識?

本科階段及研究生階段不同的階段應該學習什麼知識


一個合格的嵌入式軟體開發工程師要掌握哪些知識?

跟著下面的學習步驟學習,如果都掌握了,我想了合格的嵌入式軟體開發工程師非你莫屬。加油了

嵌入式基礎課程

9天輕鬆掌握C語言

D1 必備Linux命令和C語言基礎D2 數據類型、常量、變數及運算符D3 C語言輸入輸出專題D4 C語言控制語句D5 C語言數組和字元串D6 指針專題一D7 指針專題二D8 函數專題1D9 函數專題2L2

Linux 及C語言高級開發

D1 軟體包管理及shell命令D2 Linux shell命令D3 Linux shell腳本編程D4 Linux C語言高級編程D5 MakefileL3

數據結構全攻略

D1 數據結構順序表D2 單鏈表上D3 單鏈表下D4 循環鏈表及線性表的應用D5 棧及其實現D6 隊列實現及應用舉例上D7 隊列實現及應用舉例下D8 樹和二叉樹上D9 樹和二叉樹下D10 查找上D11 查找下D12 排序

嵌入式底層核心課程

嵌入式Linux下文件I/O精講

D1 標準I/O上D2 標準I/O下D3 Linux下文件I/OD4 庫的製作及使用L5

Linux並發程序設計你該這麼學

D1 進程編程及守護進程D2 進程編程及守護進程2D3 線程專題D4 Unix進程間通信方式上D5 Unix進程間通信方式下D6 System V IPC對象上D7 System V IPC對象下L6

Linux網路編程必修篇

D1 網路基礎上D2 網路基礎下D3 TCP編程D4 並發伺服器D5 UDP編程D6 IO多路復用D7 TCP、IP協議原理D8 網路編程擴展上D9 網路編程擴展下L7

嵌入式資料庫之sqlite3

D1 嵌入式資料庫之sqlite3上D2 嵌入式資料庫之sqlite3下L8

在線詞典綜合實戰

D1 在線詞典項目介紹及框架搭建D2 在線詞典項目註冊登錄的實現D3 在線詞典項目功能實現

嵌入式底層核心課程

精通ARM體系結構及介面技術(基於4412開發板)

D1 ARM基礎(基於4412開發板)D2 ARM指令(基於4412開發板)D3 ARM異常處理D4 ARM裸機開發D5 ARM通訊介面D6 ARM中斷機制D7 ARM波形控制L10

全面掌握嵌入式系統移植

D1 系統移植概述及環境搭建上D2 系統移植概述及環境搭建下D3 Bootloader移植上D4 Bootloader移植下D5 Linux內核分析D6 Linux內核移植及網卡移植D7 第三方驅動移植D8 根文件系統製作L11

嵌入式內核及驅動開發初級

D1 設備驅動環境搭建D2 驅動模塊開發上D3 驅動模塊開發下D4 字元設備驅動基礎上D5 字元設備驅動基礎中D6 字元設備驅動基礎下D7 中斷編程1D8 中斷編程2D9 中斷編程3D10 中斷編程4D11 中斷編程5D12 平台匯流排專題1D13 平台匯流排專題2D14 平台匯流排專題3D15 平台匯流排專題4L12

嵌入式內核及驅動開發高級

D1 高級驅動學習方法D2 輸入子系統1D3 輸入子系統2D4 輸入子系統3D5 輸入子系統4D6 I2C子系統上D7 I2C子系統下D8 設備樹(上)D9 設備樹(下)

Android系統開發

一起學Android系統開發

D1 Android系統開發之系統概述及開發環境搭建D2 Android系統開發之系統編譯過程詳解D3 Android系統開發之模塊編程及fastboot使用D4 Android系統啟動流程分析上D5 Android系統啟動流程分析下D6 Android系統開發之HAL硬體抽象層的開發

嵌入式項目實戰

嵌入式項目

D1 ARM概述(基於210開發板)D2 彙編指令集及MDK環境安裝D3 GCC開發環境搭建D4 異常處理機制D5 中斷處理實現D6 時鐘系統D7 ARM GPIO編程D8 ARM串口編程D9 ARM nand flash編程D10 從0編寫Bootloader從0編寫Bootloader(上)D11 從0編寫Bootloader從0編寫Bootloader(下)D12 四軸飛行器開發技術解析D13 小米體重秤技術開發解析D14 智能WiFi小車開發技術大揭秘D15 小米手環軟硬體開發技術解析


嵌入式軟體開發涉及的知識點很多,我僅以自己多年的經驗簡單說一下:

1、具備簡單的硬體電路設計能力,包括數字電路和模擬電路;做嵌入式軟體對硬體一樣要有一定的基礎;

2、MCU設計與應用,從單片機到ARM到DSP等要具備根據客戶要求設計產品的能力;外圍埠和設備的設計使用以及驅動程序的編寫能力,包括ADC、FLASH、EEPROM、RTC、Timer、GPIO、CAN、UART、I2C、SPI、乙太網、液晶顯示器等等;

3、操作系統方面至少要精通一種嵌入式操作系統,比如uCOSIII、freeRTOS 、Vxworks等,並且一定要學嵌入式linux ,搞明白多任務調度、信號量、郵箱等的原理和使用;在實際的項目中使用這些操作系統並逐漸掌握它們;

4、能編寫常見的linux平台下的外圍設備驅動,包括但不限於ADC、GPIO、UART、I2C、攝像頭、SD卡、網卡、SPI等等,搞明白字元設備、塊設備以及網路設備的常用設備驅動程序架構;

5、具備GUI設計能力,可以學習Qt,它的跨平台特性使得一套設計可以應用於不同的平台包括windows以及linux;

6、具備多線程編程能力,弄懂線程池的原理並應用到實際工作中;

7、具備高並發網路通信編程能力,epoll以及libevent 的使用和設計;

8、精通C/C++,並涉獵其他編程語言比如python

9、具備至少一種資料庫編程能力,嵌入式可以學習SQLite ;

10、掌握常用數據結構及演算法的原理以及編程實現,包括鏈表、隊列、二叉樹等,掌握常用排序、查找等演算法的實現;多關注一些開源項目,從中學習編程能力,提高自己;

......

相信掌握這些已經基本具備嵌入式系統開發能力,一定要保持時刻學習的能力,接下來就是多做項目,多解決客戶問題,在實際工作中歷練自己提高自己。


嵌入式開發項目中,首先需要做需求分析,然後根據需求分析進行綜合考慮,這裡給出幾個特別要注意的問題.

1.MCU的選擇

選擇 MCU 時要考慮 MCU 所能夠完成的功能、MCU 的價格、功耗、供電電壓、I/O 口電平、管腳數目以及 MCU 的封裝等因素。MCU 的功耗可以從其電氣性能參數中查到。供電電壓有 5V、3.3V 以及 1.8V 超低電壓供電模式。為了能合理分配 MCU 的I/O資源,在 MCU 選型時可繪製一張引腳分配表,供以後的設計使用。

2.電源

(1)考慮系統對電源的需求,例如系統需要幾種電源,如24V、12V、5V或者3.3V等,估計各需要多少功率或最大電流(mA)。在計算電源總功率時要考慮一定的餘量,可按公式「電源總功率=2×器件總功率」來計算。

(2)考慮晶元與器件對電源波動性的需求。一般允許電源波動幅度在 ±5% 以內。對於A/D轉換晶元的參考電壓一般要求 ±1% 以內。

(3)考慮工作電源是使用電源模塊還是使用外接電源。

3.普通I/O口

(1)上拉、下拉電阻:考慮用內部或者外部上/下拉電阻,內部上/下拉阻值一般在 700Ω 左右,低功耗模式不宜使用。外部上/下拉電阻根據需要可選 10KΩ~1MΩ 之間。

(2)開關量輸入:一定要保證高低電壓分明。理想情況下高電平就是電源電壓,低電平就是地的電平。如果外部電路無法正確區分高低電平,但高低仍有較大壓差,可考慮用 A/D 採集的方式設計處理。對分壓方式中的採樣點,要考慮分壓電阻的選擇,使該點通過採樣埠的電流不小於採樣最小輸入電流,否則無法進行採樣。

(3)開關量輸出:基本原則是保證輸出高電平接近電源電壓,低電平接近地電平。I/O 口的吸納電流一般大於放出電流。對小功率元器件控制最好是採用低電平控制的方式。一般情況下,若負載要求小於10mA,則可用晶元引腳直接控制;電流在 10~100mA 時可用三極體控制,在 100mA~1A 時用 IC 控制;更大的電流則適合用繼電器控制,同時建議使用光電隔離晶元。

4.A/D電路與D/A電路

(1)A/D電路:要清楚前端採樣基本原理,對電阻型、電流型和電壓型感測器採用不同的採集電路。如果採集的信號微弱,還要考慮如何進行信號放大。

(2)D/A電路:考慮 MCU 的引腳通過何種輸出電路控制實際對象。

5.控制電路

對外控制電路要注意設計的冗餘與反測,要有合適的信號隔離措施等。在評估設計的布板時,一定要在構件的輸入輸出端引出檢測孔,以方便排查錯誤時測量。

6. 考慮低功耗

低功耗設計並不僅僅是為了省電,更多的好處在於降低了電源模塊及散熱系統的成本。由於電流的減小也減少了電磁輻射和熱雜訊的干擾。隨著設備溫度的降低,器件壽命則相應延長,要做到低功耗一般需要注意以下幾點:

(1)並不是所有的匯流排信號都要上拉。上下拉電阻也有功耗問題需要考慮。上下拉電阻拉一個單純的輸入信號,電流也就幾十微安以下。但拉一個被驅動了的信號,其電流將達毫安級。所以需要考慮上下拉電阻對系統總功耗的影響。

(2)不用的I/O口不要懸空,如果懸空的話,受外界的一點點干擾就可能成為反覆振蕩的輸入信號,而MOS器件的功耗基本取決於門電路的翻轉次數。

(3)對一些外圍小晶元的功耗也需要考慮。對於內部不太複雜的晶元功耗是很難確定的,它主要由引腳上的電流確定。例如有的晶元引腳在沒有負載時,耗電大概不到1毫安,但負載增大以後,可能功耗很大。

7.考慮低成本

(1)正確選擇電阻值與電容值。比如一個上拉電阻,可以使用4.5K-5.3K的電阻,你覺得就選個整數5K,事實上市場上不存在5K的阻值,最接近的是4.99K(精度1%),其次是5.1K(精度5%),其成本分別比精度為20%的4.7K高4倍和2倍。20%精度的電阻阻值只有1、1.5、2.2、3.3、4.7、6.8幾個類別(含10的整數倍);類似地,20%精度的電容也只有以上幾種值,如果選了其它的值就必須使用更高的精度,成本就翻了幾倍,卻不能帶來任何好處。

(2)指示燈的選擇。面板上的指示燈選什麼顏色呢?有些人按顏色選,比如自己喜歡藍色就選藍色。但是其它紅綠黃橙等顏色的不管大小(5mm以下)封裝如何,都已成熟了幾十年,價格一般都在5毛錢以下,而藍色卻是近三四年才發明的,技術成熟度和供貨穩定度都較差,價格卻要貴四五倍。 (注: 這一已經是幾年前的看法了.)

(3)不要什麼都選最好的。在一個高速系統中並不是每一部分都工作在高速狀態,而器件速度每提高一個等級,價格差不多要翻倍,另外還給信號完整性問題帶來極大的負面影響.


習武之人都懂得,要想成為武林高手,除了學得武功招式,還需內功心法。武功招式更多得靠學靠練,而內功心法更多得靠思靠悟。

武功招式是為術,內功心法是為道。

老子云:有道無術,術尚可求也;有術無道,止於術。

嵌入式工程師的術有哪些?電路知識、處理器知識、介面知識、操作系統知識、驅動知識、應用軟體知識。這些知識網上內容多如牛毛,不再贅述。

嵌入式工程師的道是什麼?我認為,在於軟硬體聯合設計能力。

術當然要學,但術是永遠學不完的,也不需要都學完。只有上升為道,方可駕馭各種術。

具體內容,請參考我的知乎文章:嵌入式老司機論道

相關回答:

袈裟披肩上:嵌入式工程師有發展前途嗎?

袈裟披肩上:嵌入式工程師的生活生活是怎樣的?或者做單片機的 和程序員的生活一樣嗎?


推薦閱讀:

為什麼晶元同一組的引腳不在同一側,而是四側都有?
做32位/64位跨版本編程,有什麼需要注意的么?
學好C/C++,Linux。可以從事什麼工作?
斷網焦慮症?
玩 Arduino 需要做哪些準備?

TAG:嵌入式系統 | 嵌入式開發 | 嵌入式設計 | 嵌入式軟體開發 | 嵌入式系統開發 |