從單片機到嵌入式,需要學習哪些知識?
時間:2019-10-25 來源:西安中心,高老師
要想弄明白從單片機到嵌入式需要學習哪些知識,就必須先了解單片機工程師需要具備的技能和嵌入式工程師需要具備的技能。下面我先就單片機和嵌入式兩個方向的崗位需求出發,來分析一下,單片機工程師到嵌入式工程師之間的路有多長。

從我們對于單片機的崗位分析來看,大概分為兩個方向,即硬件方向和軟件方向。硬件方向的要求我簡單羅列為以下幾點:
1.熟悉模擬電路和數字電路的設計和運用
2.熟練使用硬件開發工具:AD10,等硬件程序開發以及PCB設計軟件
3.有過項目原理圖PCB設計
4.掌握VHDL、Verilog硬件描述語言,能夠編寫控制邏輯
5.有硬件調試經驗
軟件層面則有以下要求:
1.熟練AVR,STM32等MCU
2.會各種裸機驅動的編寫
3.熟悉SPI、IIC、UART、CAN
4.熟悉各類傳感器
5.精通C/C++語言,具備良好的代碼書寫規范
6.熟練使用至少一種單片機,如STM32系列,MSP430系列等
7.熟悉KEIL、IAR等集成開發環境的使用,調試,仿真,流程;
8.至少熟悉一種ARM架構,例如:Cortex-M3
9.了解實時操作系統原理,如UCOS/FreeRTOS/RT-thread
通過我們對于單片機工程師的崗位技能分析,總結如下:
想要成為一名合格的單片機工程師,需要如下一些技能:
1.熟悉模擬電路和數字電路(要求可以看懂原理圖且可以自主設計)
2.熟練使用一些硬件開發工具
3.能繪制PCB圖且能自主設計
4.掌握一門硬件描述語言,能夠編寫控制邏輯
5.有硬件調試經驗
6.熟練使用51、STM32、DSP等MCU
7.有一定的C語言開發功底
8.會編寫各種裸機驅動
9.熟悉各種總線,會編寫各種總線的驅動代碼
10.熟悉常見的各類傳感器
11.熟練使用一些裸機程序的集成開發環境例如:KEIL、IAR等
12.熟悉ARM架構的一些單板
13.了解一些實時操作系統
接著我們來分析一下嵌入式工程師的崗位需求和技能方向。進而了解一下如何成為一名合格的嵌入式工程師。我們先羅列一下嵌入式工程師的崗位分類,其分別為:嵌入式軟件開發工程師、嵌入式系統工程師、驅動工程師。
嵌入式軟件開發工程師的一些要求:
Linux平臺下的C開發(在一些做嵌入式產品的大型公司)
<1>C語言精通
<2>數據結構要熟悉(表,棧和隊列,樹(平衡二叉樹,霍夫曼樹,二叉排序樹,二叉查找樹,樹的應用),圖的存儲方式,圖的遍歷,圖的相關算法)求最短路徑
<3>對于常用查找,排序算法的了解和使用(靜態查找:(1)順序查找(線性查找)(2)折半查找(二分或對分查找)(3)分塊查找(索引順序查找)動態查找:(1)二叉排序樹(2)平衡二叉樹,哈希查找(哈希表))
<4>Linux環境的熟悉,shell腳本的編寫。對Linux操作系統的組成以及各個層次的實現,Makefile要能看懂
<5>IO
<6>多進程,多線程編程,要熟悉
<7>網絡編程要熟悉。(并發服務器的搭法)
<8>通信相關的知識要了解
<9>要至少掌握一種數據庫的使用
<10>良好的編程習慣
<11>具備一定問題分析與定位能力,并解決
嵌入式操作系統研發工程師:
<1> 精通C語言,了解匯編語言,熟悉數據結構和常用算法;
<2>熟練掌握一種CPU體系架構,熟悉常見CPU體系架構,對MMU、CACHE、內存、DMA等有深刻理解。
<3>精通一種嵌入式操作系統,熟悉多種常見的嵌入式操作系統,熟悉文件系統、協議棧。
<4>精通Linux操作系統移植、裁剪,驅動編程和調試;
<5>具有LCD,Touch,CAMERA,USB,BT/WIFI/GPS,Sensor等驅動3種以上的開發經驗。
<6>良好的英文能力和團隊精神。
Linux驅動開發的崗位需求:
<1>數模電
<2>能看懂原理圖
<3>熟悉各種硬件協議(SPI\IIC\UART\CAN等)
<4>相關的基礎理論
<5>熟悉Linux操作系統(驅動模塊)
<6>熟悉驅動框架
<7>shell腳本的編寫,makefile
<8>英文文檔的閱讀能力
<9>熟練掌握device tree、電源管理、內存管理、文件系統管理
從上面我們的分析可以看出我們單片機方向的入職要求和嵌入式方向的入職要求是不同的,單片機方向對于操作系統幾乎沒有什么要求,但是嵌入式對于操作系統的依賴性則是非常強。雖然C語言單片機的工程師也在用,但是使用的語法和復雜程度都比較低層次。所以要想從單片機方向轉入嵌入式方向在原有的知識體系上需要加入的有:
1.C/C++的高級語法
2.I/O操作
3.數據結構+算法
4.嵌入式操作系統
5.并發編程
6.網絡編程
7.系統移植
8.驅動開發
所以,單片機到嵌入式方向的轉換,最切合的自身特長的方向是驅動開發,因為單片機的工程師一般有著比較熟悉的硬件知識,只需要學一些結構和算法,深入學習一下Linux/其他嵌入式操作系統的源代碼和架構,學習一下Linux平臺下驅動開發的核心技術。就可以實現一個從單片機工程師到嵌入式驅動開發工程師的轉換。

