Rust在嵌入式開發中表現如何?

芯愉


比較爽的地方:

調庫方便,相比C語言裝庫要調一堆構建選項配好幾種構建工具,有一個統一的 cargo 來管理這些問題顯得非常方便,很多原來我寧可手寫的東西(比如堆內存管理)現在我都可以選擇調庫了(alloc-cortex-m)

hal抽象層次較高,舉一個調主時鐘頻率的例子,用C語言hal寫要算一堆參數設置好幾個寄存器,還要調flash的latency(我掉過坑),rust的hal只需要sysclk(72.mhz())即可,當然如果你習慣了使用C的hal,那確實需要一些時間來適應

比較不爽的地方:

寫一些需要手動設置寄存器的中斷處理的時候(例如上下文切換的sv),絕對不能使用hal提供的方案,也不能在處理函數中調用rust函數(例如用hal提供的開臨界區函數),也不能用普通的#[no_mangle]函數,而是必須用特別的#[naked]函數,否則寄存器的值一定會被破壞,當然本來這些函數習慣上也會用匯編編寫,但看到hal提供了卻用不了還是挺難受的

資料相對C較少(當然這個事情也得靠我們每一個用戶去改變)

總之,個人認為,在部分非關鍵場合及教學場合下的嵌入式開發,已經可以考慮開始使用Rust.。


Suseke佐


目前正在實驗用Rust在stm32上寫os(項目剛剛開始,還沒啥代碼)

GitHub地址

https://github.com/longfangsong/rs-rtt

比較爽的地方:

  1. 調庫方便,相比C語言裝庫要調一堆構建選項配好幾種構建工具,有一個統一的 來管理這些問題顯得非常方便,很多原來我寧可手寫的東西(比如堆內存管理)現在我都可以選擇調庫了()
  2. hal抽象層次較高,舉一個調主時鐘頻率的例子,用C語言hal寫要算一堆參數設置好幾個寄存器,還要調flash的latency(我掉過坑),rust的hal只需要即可,當然如果你習慣了使用C的hal,那確實需要一些時間來適應

比較不爽的地方:

  1. 寫一些需要手動設置寄存器的中斷處理的時候(例如上下文切換的sv),絕對不能使用hal提供的方案,也不能在處理函數中調用rust函數(例如用hal提供的開臨界區函數),也不能用普通的函數,而是必須用特別的函數,否則寄存器的值一定會被破壞,當然本來這些函數習慣上也會用匯編編寫,但看到hal提供了卻用不了還是挺難受的
  2. 資料相對C較少(當然這個事情也得靠我們每一個用戶去改變)

總之,個人認為,在部分非關鍵場合及教學場合下的嵌入式開發,已經可以考慮開始使用Rust。

另:今年嵌入式課的大作業就決定拿Rust寫了。


分享到:


相關文章: