91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

Rust 嵌入式學習會遇到的挑戰

語法和基本概念

Rust 的基本語法的入門并不難,如常見的基礎變量定義、表達式、判斷邏輯、循環邏輯、函數等基礎語法基本上與其他語言相似,看過一兩個代碼后就能習慣 Rust 的語法。因此基礎語法并不會有太多障礙。熟悉基礎語法后就能編寫一些簡單命令工具、數據處理工具等,甚至基于一些開源GUI框架編寫一些GUI應用。

對于 Rust 高級的知識,如范型、異步、生命周期等概念則需要去深入理解。Rust 的學習曲線因人而異,不同背景的人對于 Rust 語言的一些概念理解接受速度不同。比如

  • C 語言背景,對堆、棧、生命周期的概念理解可能比較快,但對范型、范式編程、異步Future、零成本抽象等概念理解就稍微難。
  • 對于Java:對 trait,范型、錯誤處理、并發編程的理解比較快,而對堆棧概念理解較弱
  • 對于Python來說,模塊化編程、類概念有優勢。

陳天老師有個總結 Rust 學習曲線圖,可以看出 Rust 從入門到精通需要經過三個奔潰時刻,在學習的過程中會發現對 Rust 的掌握不深,不要擔心,在嵌入式 Rust 開發中,通常不會要求完全掌握這些 Rust 技能,在日常學習中,通過與編譯器不斷斗爭中,會慢慢加深對這些概念的理解,直至豁然開朗。

Rust 學習之路

單片機外設使用

在熟悉 Rust 基礎語法后,理解一些常用庫的的使用、常用開源 crate 的功能后,就可以開始入門單片機的外設開發。

由于目前嵌入式 Rust的生態并不太豐富,大多數的芯片公司僅提供傳統的 C 版本的外設庫,可喜的是,目前仍然有一些常見的單片機已經提供了 Rust 的外設庫,如 STM32、ESP32GD32、NRF52XX 等。如果你喜歡的單片機沒有提供 Rust 外設庫,也不用擔心,可以自己編寫一些外設庫,甚至也能使用寄存器級別的開發(請放心,哪怕是寄存器級別的開發,也能保證一定安全和高效, 比同等級別的 C 寄存器級的開發簡單更多)。

個人建議可以從已經支持的 Rust 外設庫的單片機入門,如NRF52840、STM32、rp2040等。通過調用廠商提供的外設庫接口,快速熟悉 Rust 的編程風格、API風格,感受與 C 嵌入式編程的差異。

在拿到單片機開發板后,快速根據庫文檔搭建編譯和下載環境,然后打印hello world、點亮 led 燈。這些 Rust 例程跑起來的難度也許比C的例程更加低, 還算比較新手友好。在這個階段的學習中,你會發現 Rust 外設驅動庫的實現方式與C相差非常大,甚至你有很多疑問,不太明白為什么驅動要這樣設計,不明白不用太焦慮, 這一階段你只要能了解外設接口怎么使用即可,能讓各個外設正常的工作起來。

在下一個階段中,你需要去了解pac(外設訪問控制接口)的使用,制作原理、可以嘗試自己利用 svd2rust 工具自己制作一個單片機的 pac crate。然后自己嘗試通過 pac crate 接口來讀寫芯片的寄存器。然后可以了解單片機是怎么從復位后運行到 Rust 的 main函數,具體你需要去閱讀 cortex-m-rtcortex-m。你會發現 Rust 的啟動過程竟然與C如此相似,但讓一個單片機能運行起來更加簡單。如果你很細心,你會繼續探究 build.rs 代碼的功能和編寫邏輯,發現 Rust 工具的奧秘,從而能基于這些知識來開啟下一個階段。

在第三個階段中,你可以嘗試自己去編寫一些芯片的 Rust 外設驅動庫,如果國產的一些芯片,先模仿NRF52840、ESP32、STM32等芯片的庫,再次感受驅動設計的思想。開始可以基于一些簡單的芯片,如 Cortex-M0 內核的芯片,方便快速完成整個芯片驅動庫的編寫。最后將你編寫的Rust 外設庫開源出去,通過大家的意見、不斷改善和優化,

生態

很多人對 Rust 嵌入式的生態持較悲觀的態度,認為 Rust 目前沒有太多的輪子,需要自己去造。然后我個人在兩年的 Rust 嵌入式開發中感受到,目前 Rust 的生態已經足夠大部分的工程實踐了。在crate.io 上有大量優秀的開源 crate 能被工程中所使用。一些單片機的外設庫、傳感器驅動庫、LCD驅動、圖形顯示框架、IIC/SPI/UART 通信驅動、操作系統等都有比較好的開源 crate, 且質量還不錯, 加上 Rust 官方對嵌入式的支持,開放了一些抽象庫,讓驅動移植變得非常簡單便捷,例如傳感器庫能輕松的在不同單片機中使用。

另外對于書籍文檔類資源,Rust 嵌入式也開始有很多詳細的公開資料,如ESP32 的 rust 資料非常詳細,足以支撐 Rust 嵌入式的學習和開發了。

總結

對于這些挑戰,其實跨越他們并不困難,一定要有信心去面對,同時也要適當放下困難、不要力圖一下理解某些概念,要講究循序而漸進,自然豁然而開朗。

附錄

svd2rust

awesome-embedded-rust

cortex_m_quickstart

Embedded Rust on Espressif

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 2
關注 14
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 河西区| 靖西县| 台安县| 卓资县| 榆中县| 绿春县| 无棣县| 永宁县| 克拉玛依市| 英山县| 鸡泽县| 惠水县| 滨海县| 如东县| 德兴市| 通城县| 长丰县| 深泽县| 富蕴县| 彭州市| 牡丹江市| 隆德县| 昌黎县| 襄城县| 稷山县| 德安县| 武山县| 徐水县| 交口县| 隆尧县| 四川省| 乐清市| 普兰店市| 金华市| 延安市| 慈溪市| 集安市| 平乡县| 昆明市| 郑州市| 滁州市|