當前位置: 華文問答 > 數碼

微控制器學到什麽程度才可以去工作?

2024-01-17數碼

我從用人部門的角度說說。

首先你要拋棄硬件,專攻軟件。不是說硬件不行,而是硬件有專門的人做,重點也不在 MCU 這塊。從硬件的角度,微控制器本身沒什麽好學的。

如果你強行軟硬件一起學,大概率都學不深,都會一點。當然迷你型公司會喜歡這種工程師,一人當一個團隊用非常省開發成本。這種公司有多迷你?大概率是初創公司,只有一兩個技術人員,同時負責軟硬件設計,要布板焊板偵錯、要出工藝小批次、要下廠生產指導和返廠維修,有些甚至還要做結構設計和生產組裝。稍微有點規模的公司,就不會軟硬件同體了。

所以不做硬件板卡,對硬件的要求就很低了,一般要求看得懂簡單的原理圖即可。數電模電不用學,懂得簡單的電路分析即可,我說的是基爾霍夫定律、戴維南定律、節點法網孔法等,這些就夠跟硬件打交道了!

確定了軟件方向後,如果你有點C語言基礎,直接買個STM32或ESP32的開發板開始學起來。不要專門去學組譯,一般公司都是搞套用的,99%用不上。C語言也不用刻意的學,遇到不懂的,再翻出來學,這樣效率會高得多。

不要學Arduino,那玩意不是不好,但畢竟還只是個玩意,靈活性和效能是個問題,所以正經公司都不用它。Arduino 是給學生玩的,我給我小孩(小學生)買了一塊,讓他找點硬件編程的感覺,他很喜歡。

開發板裏面帶的各種外設常式,像 GPIO、ADC、DAC、Timer(PWM)、UART、SPI/IIC 都是非常常用的外設,一般專案都會用到,所以你不但要知道他有什麽作用,主要套用場景是什麽,主要工作原理是什麽,你還要一行一行程式碼自己敲一遍調通。中斷至少要會 ADC、Timer、UART。對於常用通訊介面,你至少要分得清同步/異步/單雙工/全雙工,它們各自的用途是什麽。你不要只會呼叫廠家封裝好的函數,你還得深入到寄存器層面,老老實實翻看MCU廠家內建的【軟件設計手冊】和【數據手冊】中關於各個外設的詳細說明,不要害怕,對於裏面的 主要 寄存器,你要理清他們的使用場景,要有能力寫程式碼直接配置或控制寄存器。

這還不夠,你還得學一個嵌入式作業系統,比如 FreeRTOS 或 RT-Thread,學會寫任務和中斷銜接程式這些核心功能就好。不用花精力去學習怎麽移植到不同芯片,直接用別人移植好的就行,因為對於企業專案,一般都有人或廠商幫你移植好了。至少要學會多工的協調工作,不要以為能寫一個個獨立任務就OK了。最少要熟悉一個命令列系統(如 RT-Thread 的 FinSH,FreeRTOS沒帶)的使用,能快速的寫出需要的偵錯命令。像 RT-Thread 這類 IoT 系統一般還有器材驅動模型、檔案系統、乙太網路及TCP/IP協定棧等高級功能,可以先不學。

你最好能把這些學習經歷包裝一下,包裝成一個真實專案的樣子,你要想好這個虛構的產品有哪些功能,都有什麽作用,目標使用者是誰,能幫使用者解決哪些問題。對於這個產品,你是怎麽開發的。千萬不要把所有外設都往產品上搬,這樣顯得很假。有不少工作了的工程師,對於專案和產品,居然一問三不知,只當自己是螺絲釘,只顧自己那塊技術,這樣會給面試管或領導很不好的印象,即使入職後,大概率不受待見,對於自己的成長非常不利。

經歷了這個階段,如果你有985/211名校或碩士學位的加持,基本上能找到一份還不錯的工作了,入職就能上手公司的專案。

如果沒有名校或學位的加持,你還得再努力一把,才能從激烈的競爭中勝出。以下這些技能可以給你加分,你看情況學,不同行業對這些元件會有取舍:

  • Cortex-M 內核:理解MCU內核各部件的工作機制,比如啟動流程、指令集、儲存對映、SysTick、異常和中斷等
  • IoT作業系統:比如RT-Thread或鴻蒙,學習裏面的器材驅動模型、檔案系統、低功耗、乙太網路及TCP/IP協定棧等,你可以把它當作 Linux 的乞丐版學習,以後對你學習 Linux 也有幫助。
  • RS485 & Modbus:學會Modbus協定的套用場景、各類報文格式、通訊時序、各個常用命令。很多工業產品都會用 Modbus 通訊。
  • CAN:學會 CAN 協定報文格式、通訊時序、各個常用命令。汽車行業必用。
  • 藍芽或USB:要學習它們的協定棧結構、通訊時序、各種常用的套用層端點等。這個不用說了,物聯網必用。
  • PID:學會一種 PID 演算法的原理,並會快速偵錯 PID 參數。工業控制必用。
  • 傳感器:各種傳感器,如陀螺儀、溫濕度等
  • LCD&UI:學會一種UI庫的常用控制項。同理,初學者可以不學底層驅動的移植
  • Bootloader:學習Bootloader的原理、空間分配、線上升級及通訊等
  • TCP/IP:學會TCP/IP分層模型、鏈路層常用協定、SOCKET編程介面。為什麽要專門學習分層模型和鏈路層協定?因為可以從中借鑒很多通訊經驗,都是業界大神走過的路趟過的坑,以後針對不同套用場景設計出來的協定(棧)會成熟可靠很多,而不是隨意弄私有的、不健壯的包格式。
  • C++:主要學習物件導向的基本特性,像異常、RTTI、STL 等高級特性,可以先不學。如果上層業務邏輯能使用 C++,整個專案的可讀性都會好很多,能輕松應對大型專案,個人認為 C++ 在微控制器中會越來越多套用。
  • 運動控制演算法:比較專業的領域了,不解釋
  • 再後面的技術方向,就脫離了微控制器了,一般有以下選擇:

  • 硬件
  • Linux + 驅動
  • QT C++ 套用
  • Android/iOS/Java Web 套用
  • 架構師
  • 最好,祝大家職場順意!

    我是折騰總監,喜歡從第一性原理講解一些有趣的技術,歡迎關註,讓我們一起探討學習,一起馳騁於浩瀚的知識海洋。