ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

基礎から学ぶ組込Rust

基礎から学ぶ組込Rustの本を読みました。久しぶりに組込プログラマに戻れた気がしてとても楽しめました。

www.c-r.com

どんな本

Wio TerminalをRustで制御していく本です。

  • 組込がある程度分かっていて、組込Rustに興味がある人
  • Rustはある程度分かっていて、組込に興味ある人

この辺の人達がターゲットで、Rustに関しては別にもう一冊本があった方が良いです。 どちらも初めてだとだいぶきついと思います。

読む前は、組込向けの最適化の話、Cのライブラリとの連携とか込み入った話の本かなと思っていたのですが、いざ読んでみるとどちらかというと入門書と呼べる内容でした。

Rustの説明があっさりあったあと、6章のペリフェラル制御からが本番です。Rustの文法そのものよりはこういう形でRustの機能を上手く使ってますという事例が丁寧に説明されていました。

各ペリフェラル(周辺回路)の簡単な紹介、回路図を使った接続情報の確認、動かすために必要な設定、それをRustでどう書くのかが続いた後、練習問題的なやってみようがあります。順番にやるだけで、Wio Terminalのいろんな機能を実際に動かして試すことが出来ます。基本的に全てお膳立てされていて、本の通りにloopの中を記入すると動きます。順番に動かしていくだけでもとても楽しかったです。

Rustの記述について

基本的には実績のあるクレートを使っているため、あんまりハードウェアに密接なコードは出てこないですし、はまりがちな所有権の問題などもクリアーされているコードから始めています。

take()を使ったシングルトン(ペリフェラルの排他制御)の実装や、panic handlerでエラー情報を出す所は面白かったです。未だに仕組みがわからないのが、GPIOの所で出てきた型状態プログラミング(Typestate Programming)です。 これを使うと、GPIOの設定を出力にしていない状態で信号を出力すると「コンパイル時」にエラーになります。

割り込みの所は、メインルーチンと割り込みハンドラでシェアするオブジェクトの扱いが動くソースコードになっていて、実務で使うときは参考にしたいです。

unsafeにする所も、こういう単位でunsafeを使うんだと勉強になりました。

組込プログラミングに関する記述について

実は、こっちがメインじゃないかというくらい良かったです。

回路図の説明、データシートの記述から、デバイスを制御するために必要な情報が整理されています。 実際、初めてやる人がこの記述だけで他のデバイスを制御できるかというとだいぶ厳しいですが、それでもこういう所を確認しないといけないんだなというのはなんとなく伝わると思います。非組込プログラマ向けに、こういう所をやさしく書いている本は少ないのでとても貴重だと思います。

新人の頃、タイマーで時間を計ろうとしたらカウンターの説明にしか読めなくて途方にくれたことを思い出しました。(いや実際にカウンターなんですが・・・)

加速度センサーや光センサーなど、今まで業務で使ったことがないセンサーを動かせて楽しかったです。

出来た物

画像表示

グラフィックスのライブラリを使って、こんな表示が出来ます。 先にシミュレータで表示できることを確認し、クレイト化してから、実機に表示しています。

f:id:natsutan:20210426004301j:plain

スペアナ

謎のスペアナが出来ました。マイクから音を拾ってリアルタイムにFFTしています。

f:id:natsutan:20210426004317j:plain

まとめ

とても面白い本だったので、興味ある人はぜひ本を買って動かしてみてください。 実際にデバイスやセンサーが動く楽しさは読んでいるだけでは伝わらないです。

↓念のため正誤表も確認してください