回覆列表
-
1 # 佐一笑
-
2 # Echa攻城獅
目前正在實驗用Rust在stm32上寫os(專案剛剛開始,還沒啥程式碼)
GitHub地址
https://github.com/longfangsong/rs-rtt
比較爽的地方:
調庫方便,相比C語言裝庫要調一堆構建選項配好幾種構建工具,有一個統一的 來管理這些問題顯得非常方便,很多原來我寧可手寫的東西(比如堆記憶體管理)現在我都可以選擇調庫了()hal抽象層次較高,舉一個調主時鐘頻率的例子,用C語言hal寫要算一堆引數設定好幾個暫存器,還要調flash的latency(我掉過坑),rust的hal只需要即可,當然如果你習慣了使用C的hal,那確實需要一些時間來適應比較不爽的地方:
寫一些需要手動設定暫存器的中斷處理的時候(例如上下文切換的sv),絕對不能使用hal提供的方案,也不能在處理函式中呼叫rust函式(例如用hal提供的開臨界區函式),也不能用普通的函式,而是必須用特別的函式,否則暫存器的值一定會被破壞,當然本來這些函式習慣上也會用匯編編寫,但看到hal提供了卻用不了還是挺難受的資料相對C較少(當然這個事情也得靠我們每一個使用者去改變)總之,個人認為,在部分非關鍵場合及教學場合下的嵌入式開發,已經可以考慮開始使用Rust。
另:今年嵌入式課的大作業就決定拿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.。