[導讀]整理自網絡,排版:付斌 對嵌入式系統工程師及嵌入式硬件工程師而言,2020年將是振奮人心的一年。隨著物聯網應用的普及,MCU市場將再次繁榮。因此,市場上對嵌入式系統工程師人才的需求也將出現新高。這些都是底層編程領域中即將出現的趨勢。 01 先搞清楚什么
整理自網絡,排版:付斌
對嵌入式系統工程師及嵌入式硬件工程師而言,2020年將是振奮人心的一年。隨著物聯網應用的普及,MCU市場將再次繁榮。因此,市場上對嵌入式系統工程師人才的需求也將出現新高。這些都是底層編程領域中即將出現的趨勢。
01
先搞清楚什么是嵌入式
我們已經習慣了使用強大的計算能力來處理機器學習,那么嵌入式是這樣的嗎?我們先和機器學習比一比。
AlexNet 需要727MFlops的運算能力(Flops=浮點運算)以及235Mb的內存才能處理小小的一張227 x 227像素的圖像。例如,Google Nexus S上的 ARM Cortex-A8的處理能力為每秒 66MFlops。因此,你必須等待大約 11 秒才能進行推斷。這也太慢了!
大學里我上了幾門與機器學習相關的課程。我們做了很多有趣的作業(yè)。但是當時即便是4GB GTX1050也不足以訓練所有模型。
一般的機器學習工程師很少考慮計算資源。而且他們也很少關心內存的使用情況。為什么?因為這些硬件都很便宜,甚至是你的手機都擁有相當不錯的CPU和大量內存。
你已經很久沒有過聚會拍照時發(fā)現自己手機上的存儲不夠的情況了吧?想象一下,你使用的是只有256KB閃存的TrueTouch感應控制器。沒錯,只有 256KB。而且由于固件占用了一部分, 因此你不能完全使用這點存儲。算下來,你能使用的也就是大約100KB?;仡^再看看你的上一個模型的大小。可能比這個大多了。
有意思吧?我們來繼續(xù)看。
當聽到“嵌入式設備”時你會想起什么?記住腦海中出現的第一印象。
1. 嵌入式設備可以是任何電動機械,甚至是微波爐和洗衣機
沒錯,你答對了!
如今,幾乎所有的電氣設備都是嵌入式的。這些設備內部可能擁有一個或多個控制器來負責每個功能:觸摸感應、發(fā)動機狀態(tài)監(jiān)控等。
2. Arduino 和樹莓派
恭喜你,再次答對了!
二者是 DIY 項目中最受歡迎和使用最廣泛的工具包之一。它們也是嵌入式設備。
3. Jetson Nano 及類似的產品
再次回答正確。
這是一種特殊的開發(fā)套件,簡稱迷你計算機,專門為運行機器學習模型而開發(fā)。它非常強大,而且非??帷?/span>
但似乎有些不對。
我有很多朋友都在做一些很棒的硬件業(yè)余項目。通常他們會使用Arduino或 STM32。
答案:微乎其微
想一想你家中有多少電氣設備,然后再想想汽車中包含的大量控制器,以及工作上用到的安保系統,等等。
假設你有一個微控制器。它的主要任務是處理手指觸摸屏幕。它擁有ARM Cortex-M0處理器,256KB內存(其中只有80–120KG可用)。這是一個實時系統,因此你只需很少的時間來推斷模型,例如100微秒。你的目標是改善算法或替換算法。
02
2020年軟硬件有什么值得學習的新技術
如果你想嘗試嵌入式編程,那么可以從下面幾個方面著手:
-
https://www.learn-c.org/
Learn-c.org 是 Ron Reiter 的私人項目。雖然這個項目與嵌入式或硬件的關系不大,但作為C語言入門還是很不錯的。
-
買個微處理器
就我個人而言,實際操作才是最佳的學習途徑。所以,你也可以買一個微處理器,實際接觸硬件,親眼看到實際結果才是你最應該做的事情。你可以購買 Arduino 等流行的處理器,然后從一個小項目開始,真正了解硬件的工作原理。
-
閱讀書籍和文檔
閱讀書籍和文檔是最關鍵的學習方式。你可以根據自己選擇的方向(嵌入式系統、固件開發(fā)、驅動程序開發(fā)等),選擇相應的書籍。
除了C/C++之外,該領域沒有真正占據實際市場份額的編程語言,但是下面的新起之秀值得關注。
Rust
相對于C,Rust 有幾大優(yōu)勢,最大的優(yōu)勢之一就在于內存的安全性。Medium 網站上有很多關于 Rust 的文章,你可以通過閱讀了解 Rust 的所有優(yōu)勢。此外,Rust 可以在許多微控制器上運行,這個 GitHub 代碼庫中匯總了大量信息(https://github.com/rust-embedded/awesome-embedded-rust)。
如果你想學習 Rust,那么我強烈建議你訪問 Rust 主頁(https://www.rust-lang.org/)。這個網站提供了大量的入門文檔和教程。還有這本書《The Rust Programming Language》也是很好的起點。Rust 網站專門提供了有關嵌入式的說明(https://www.rust-lang.org/what/embedded),可以幫助你了解嵌入式設備上的 Rust 編程。
Golang
Golang?Golang!Golang 這種編程語言的潛力也超過了你的想象。目前,它主要運行在用戶空間,可以替代 Ruby 等后端語言,或用作用戶空間的應用程序,因為它擁有良好的多處理器支持。
RISC-V
RISC-V 是一種開源硬件指令集體系結構。它基于精簡指令集計算機原理,即所謂的 RISC。與 Arm 相比,制造商不需要支付許可費用即可使用 RISC-V。
現在市場已有 RISC-V 的電路板,雖然價格仍然偏高,但值得關注。例如,眼前我的辦公桌上的這塊就是 SiFive HiFive Board。
big.LITTLE
最后我想談談 big.LITTLE 架構。最初它是由 ARM 發(fā)明的。原理是將低功耗的處理器(LITTLE)與功能強大、高功耗的(big)處理器相結合。同一時間內, LITTLE 或 big 只有一側處于活動狀態(tài)。這種架構應該能夠更好地適應當今的動態(tài)計算需求。
這并不是一個新想法,ARM 于2011年就提出了此項建議。但是似乎其他制造商也對 big.LITTLE 躍躍欲試。英特爾于2019年預覽的英特爾 Lakefield 異構處理器就采用了 big.LITTLE 架構。
03
除了這些還要學什么?
-
看懂電路圖 -
看懂芯片手冊 -
有編寫,移植驅動的能力 -
懂內核的實現機制 -
懂C語言,C++, JAVA等
-
《微機原理》,可以理解一個計算機的組成原理 -
《數字電路》,掌握一些邏輯運算,理解各種門電路的原理 -
《ARM體系結構與編程》,對ARM的運行原理解釋的很到位
-
Linux總線,設備,驅動模型的探究 -
Linux設備樹的深入理解 -
Linux的啟動流程 -
Linux設備和驅動的相遇 -
動手定制一個開發(fā)板
4、學習嵌入式Linux應用程序開發(fā)
-
LCD驅動程序 -
觸摸屏驅動程序 -
USB驅動程序 -
NAND FLASH驅動程序 -
NOR FLASH驅動程序 -
網卡驅動程序 -
聲卡驅動程序
6、根文件系統
-
Linux根文件系統目錄結構 -
移植Busybox -
init進程介紹及用戶程序啟動過程 -
使用glibc庫 -
制作/使用文件系統映象文件
-END-
推薦閱讀
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!






