背景介紹
“你的下一個項目準備選用什么語言?”如果誰這樣去問一個嵌入式工程師,可能會顯得有點多余。不是只有C語言可以用來搞嵌入式開發嗎?
差不多十多年前,情況的確是這樣。那時候還沒有一個像ARM Cortex-M這樣能占據半壁江山的統一核心,嵌入式處理器碎片化極為嚴重。絕大多數MCU本身性能不高,各種資源都比較有限,業務模型通常也比較簡單,連RTOS都用不上,直接裸奔即可解決大部分業務邏輯,嵌入式工程師絕大多數時間都在跟原廠的底層驅動作斗爭。也只有C這樣接近底層,各種編譯鏈極其完善的語言才能得到所有人的認可。
隨著ARM Cortex-M核的MCU逐漸占據市場主導地位, MCU的性能逐漸追上了90年代中后期的通用CPU,使用原廠提供的API來進行開發,逐漸取代了寄存器開發方式,而底層硬件的操作變得大同小異。
最近幾年,隨著物聯網、IOT、AI這些概念越來越火熱,MCU的業務模型也開始變得越來越復雜,各種通信協議棧被塞了進去,各種復雜算法被塞了進去,越來越多非EE出身的程序員、DIY愛好者也開始進入嵌入式開發領域。
市場需求
有需求就有市場,Arduino就是在這樣的背景下誕生的。 一些新的開發者對MCU底層硬件細節并不關心,只想快速實現自己的想法和創意,Arduino通過C++對底層硬件進行層層包裝,給最終用戶提供了一套極為簡潔的API。簡潔到什么程度?只要稍微學習,中小學生都可以做出像模像樣的作品。 盡管Arduino這種將硬件API化的開發方式讓資深嵌入式工程師頗為“瞧不上”,它卻實實在在地掀起了一陣變革的風向。無論業界巨頭還是創新者,都開始幻想著能有一套較為統一的嵌入式開發方法。 Arm基于C++做了一套mbed框架,采用類似Arduino的簡潔API,為多種Arm平臺做了適配移植。 這都是一些較為傳統的嘗試,還有一些更為激進的極客開發者,覺得既然硬件操作都已經抽象為標準API了,我為什么還要受限于偏底層的C和讓人無比困惑的C++?為什么不可以用我熟悉的語言去操作MCU?事實證明,這些想法并不是天方夜譚,以下僅列出部分現代語言的MCU操作框架:
Python: MicroPython
JavaScript: Espruino
Golang: TinyGo
Swift語言介紹
既然已經有各種新的嘗試了,為什么又要多一個Swift?而且聽到Swift,大家第一反應可能是“那不是Mac和iOS的專用語言嗎?” 其實不然,Swift的創始人Chris Lattner對Swift愿景便是“統治世界” 它從最開始的設計就是要成為一門系統級編程語言,源代碼全部開放,由社區主導開發進化。
以下僅列出一些Swift的特性:
Swift公布于2014年,極為年輕,無歷史包袱,廣泛吸收了近年各種編程語言的優勢
純編譯型靜態語言,無GC機制,這是實時系統的必要條件
支持系統級開發,直接生成對應機器碼,使用ARC機制來實現內存管理,通過一個較小的開銷來降低開發者的心智負擔
代碼范式多樣,支持面向對象,面向協議,函數式編程
學習曲線平滑,可作為初學者的第一門編程語言
語法優雅,適合各種挑剔的程序員
背景雄厚,發展前景無限
綜合以上特性,可以說Swift是為數不多的極其適合MCU設備的現代化語言。 另外還有一個Rust,但Rust的學習曲線極為陡峭,喜歡嚴厲地“虐待”開發者來保證代碼的正確性,這又有悖于我們簡化MCU應用層編程的初衷。 其余絕大多數現代化語言中,要么帶有嵌入式中絕對不能接受的GC機制,要么為解釋性語言,效率極低(即便如此,MicroPython的應用場景還是越來越豐富,說明大家對易用性的需求越來越強烈)。 相信隨著時間的推移,Swift在嵌入式上的可用性會逐漸完善。
責任編輯:lq
-
mcu
+關注
關注
146文章
17358瀏覽量
352806 -
嵌入式
+關注
關注
5095文章
19189瀏覽量
307993 -
C語言
+關注
關注
180文章
7615瀏覽量
137841
原文標題:將Swift語言應用到MCU開發中(上)
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
嵌入式開發必備-RK3562演示Linux常用系統查詢命令(上)觸覺智能出品
![<b class='flag-5'>嵌入式開發</b>必備-RK3562演示Linux常用系統查詢命令(上)觸覺智能出品](https://file1.elecfans.com/web3/M00/04/69/wKgZO2dzXBuAOiSTAABx71EW8WA193.png)
如何使用 RISC-V 進行嵌入式開發
零基礎嵌入式開發學習路線
嵌入式開發常見問題排查
![<b class='flag-5'>嵌入式開發</b>常見問題排查](https://file1.elecfans.com/web2/M00/02/F1/wKgaoma5syyAYzztAAA5LSZZo34694.png)
嵌入式開發常用軟件有哪些?
AWFlow:內置豐富的功能節點,簡化嵌入式開發流程
![AWFlow:內置豐富的功能節點,簡化<b class='flag-5'>嵌入式開發</b>流程](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評論