用於Cortex-M的全新程式設計語言

作者 : Nordic Semiconductor供稿

到目前為止,開發人員僅能夠使用C或C++語言對此類Cortex-M設備進行程式設計。現在42 Technology已提出了名為Rust的第三種選擇,將為開發人員帶來許多有用的新功能。

產品開發諮詢公司42 Technology在消費、醫療、農業和工業,以及其他領域見證了物聯網(IoT)連接的需求不斷增長。

該公司表示,產品製造商正在尋求使用IoT連接來添加功能,為終端使用者帶來與眾不同的產品,或為建基於服務的產品產生新資料流。

這種IoT連接硬體通常包括可攜式的電池供電小型裝置,並結合Arm Cortex-M系列的嵌入式處理器,例如Nordic Semiconductor的nRF9160 SiP核心內的M33處理器。

到目前為止,開發人員僅能夠使用C或C++語言對此類Cortex-M設備進行程式設計。現在42 Technology已提出了名為Rust的第三種選擇,將為開發人員帶來許多有用的新功能。

充份利用資源

Rust程式設計語言用於性能和資源使用至關重要的平台和環境。但是不僅限於此;它還採用了一些功能來幫助開發人員提高生產力並產生更安全的程式碼。其中一項就是稱為Cargo的Rust套裝軟體管理工具,可以讓開發人員從集中軟體庫中提取開放原始碼套裝軟體,可以輕鬆地在專案中使用,就像Python的pip或Node的npm。

Rust的另一項獨特功能是「借用檢查器」,它是編譯器的一部分,該工具在編譯期間檢查程式碼,以確保沒有兩段程式碼嘗試同時存取同一資料(這是未定義的行為)。換句話說,如果調用了一個函數,則開發人員需要指定調用者是暫時「借入」(專有或作為共用借入)該數值,或取得該數值的所有權。

這款提供安全性、快速和高生產力的語言似乎非常完美。42 Technology報告指出,微軟(Microsoft)、Dropbox、Facebook、Google、Cloudflare等公司都表示了成功將Rust語言應用於新專案上,其中包括用於雲端基礎架構,以及Google將之用於其下一代行動作業系統Fuchsia上。

在Rust嵌入式工作組的大力推動下,Rust將對一系列嵌入式平台的支援已提升到「1.0」狀態,42 Technology看到越來越多企業在小型的低功耗系統(如Nordic的nRF52和nRF53系列短距無線SoC和nRF9160低功耗蜂巢式IoT SiP)上獲得同樣的優勢。

存在問題的通訊端

使用nRF9160的開發人員可以直接或透過Zephyr使用Nordic Socket API,其嚴格遵循標準Berkeley通訊端API (有如在Linux和Windows中使用)。但是存在一些缺點,例如對通訊端類型和通訊端系列都使用「int」,這意味著如果開發人員將它們混淆,編譯器將無法辨識。另外,開發人員必須記住在通訊端上調用「nrf_close」,因為如果變數超出範圍,通訊端將被洩漏並在運作時引起難以除錯的問題。

為了使得Rust開發人員能夠利用這個功能強大且經過良好測試的函式庫,同時協助他們避免這些陷阱,42 Technology圍繞Nordic通訊端庫開發了Rust包裝器。包裝器使用高階強類型物件,例如「TcpSocket」和「AtSocket」,它們在超出範圍時會自動關閉,並允許開發人員發送格式化的資料。

圖1 圍繞Nordic通訊端函式庫建立的Rust包裝器使用高階的強類型物件,例如「TcpSocket」「AtSocket」,當它們超出範圍時會自動關閉,並允許開發人員發送格式化的資料。

這種方法非常有效,42 Technology表示已經能夠使用Cloudflare的新Rust語言QUIC庫,開發直接在nRF9160上運作的世界上首個QUIC (未來HTTP/3標準的一部分)範例。

Rust + Zephyr

Rust的另一個優點是可以與Zephyr RTOS混合使用。Rust函式庫可以編譯為標準的C靜態函式庫,從而可以將其與所有開發人員現有的C和C++專案連結。某些專案甚至只需一次替換一個函數,就可以從C語言轉換為Rust語言。例如,對於SVG庫,其中產生的函式庫具有相同的API,但在內部執行得更快速且更安全。

Rust程式設計語言旨在提供高性能、安全性和開發人員生產力,並且在從超大規模雲端基礎設施直到最小的Cortex-M微控制器的所有項目上都能很好地運作。此外,由於它可以編譯為標準的目的檔案,因此開發人員可以充分利用其所有優點,同時仍可將其整合到現有的C和C++專案中。

本文同步刊登於EDN Taiwan 2021年3月號雜誌

 

 

 

 

 

加入LINE@,最新消息一手掌握!

發表評論