對”在嵌入式Rust中使用std“的看法

壹米發表於2024-11-25

在文章(在嵌入式 Rust 中使用 std)中實現如何解決在嵌入式Rust中中標準std的解決方案。

  對於現有嵌入式裝置有足夠的RAM(1 MB 或更多),是能完成基本操作的。列如:文章中提到的Windows3.0的最低要求。

  Windows3.0安裝的要求如下:

硬體要求

      1. 處理器:

      • 至少需要 Intel 80286 或更高版本的處理器(如 80386 或 80486)。

      2.記憶體:

      • 最低要求是 512 KB RAM,但建議至少使用 1 MB RAM,以便獲得更好的效能。

      3.儲存空間:

      • 需要至少 6 MB 的硬碟空間來安裝作業系統及其應用程式。

    軟體要求

      1.DOS:

      • Windows 3.0 是基於 DOS 的作業系統,因此需要預先安裝一個相容的 DOS 系統(如 MS-DOS 3.1 或更高版本)。

  照此看來,現代微控制器是有能力使用Rust的std的記憶體需求的,當然可能會有一些限制。

  限制

    1. 記憶體管理  

      • 記憶體限制:嵌入式裝置通常具有有限的記憶體資源,使用堆分配可能導致記憶體分配失敗。如果程式依賴於動態分配(如 Vec),在記憶體不足時可能會崩潰。
      • 分配器的選擇:使用 std 庫時,必須提供合適的記憶體分配器。選擇不當的分配器可能會導致效能問題或不穩定性。
      • 記憶體洩漏:動態分配可能導致記憶體洩漏,尤其是在長時間執行的嵌入式系統中,這可能會導致系統崩潰或重啟。

    2. 依賴項管理

      • 不相容性:許多 crate 可能依賴於 std 庫的特性,使用 std 時,必須確保所有依賴項都支援此特性。如果某個依賴項不相容,可能導致編譯錯誤或執行時錯誤。
      • 功能限制:某些功能(如非同步程式設計、執行緒等)在 std 中可能受到限制,尤其是在沒有作業系統支援的情況下。
      • 複雜性增加:管理多個依賴項及其版本可能會增加專案的複雜性,尤其是在嵌入式環境中,可能需要仔細配置以確保所有元件能夠正常工作。

  當然,在嵌入式中也不一定使用Rust的std,也可以使用no_std的,根據自身需求選擇。

  no_std的一些注意事項

    • 無標準庫:嵌入式 Rust 專案通常使用 no_std,這意味著不依賴於 Rust 的標準庫 std。相反,使用 corealloc 等庫來提供基本功能。  
    • 適合嵌入式環境:no_std 適合資源受限的嵌入式系統,因為它不依賴於堆分配和作業系統功能。  
    • 更復雜的功能:如果專案需要使用動態記憶體分配、執行緒、檔案 I/O 等功能,可能會選擇使用 std 庫,但這通常需要確保目標裝置的資源足夠。

相關文章