Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Rust Embedded の用語

micro:bit のプログラミングに入る前に、今後のすべての章で重要になるライブラリと用語を手短に見ておきましょう。

抽象化レイヤー

十分にサポートされているマイクロコントローラ、またはマイクロコントローラを搭載したボードについては、通常、その抽象化レベルを表す用語として次のものを耳にするでしょう。

Peripheral Access Crate (PAC)

PAC の役割は、チップのペリフェラルに対する(完全ではないにせよ)安全な直接インターフェースを提供し、設定したいとおりに最後の 1 ビットまですべて構成できるようにすることです(もちろん、誤った方法で設定することもできます)。通常、PAC を扱う必要があるのは、上位のレイヤーでは要件を満たせない場合か、それらのレイヤー自体を開発している場合だけです。ここで私たちが(暗黙的に)使用する PAC は、nRF52 用のものか nRF51 用のものです。

Hardware Abstraction Layer (HAL)

HAL の役割は、チップの PAC の上に構築され、そのチップ特有のあらゆる挙動を知らない人でも実際に使える抽象化を提供することです。通常は、ペリフェラル全体を単一の struct に抽象化し、たとえばそのペリフェラル経由でデータをやり取りできるようにします。私たちはそれぞれ nRF52-hal または nRF51-hal を使用します。

Board Support Crate(歴史的には Board Support Package、略して BSP と呼ばれていました)

BSP の役割は、ボード全体(micro:bit のようなもの)を一度に抽象化することです。つまり、マイクロコントローラだけでなく、そのボード上に搭載されている可能性のあるセンサーや LED なども扱うための抽象化を提供する必要があります。かなり多くの場合(特に自作ボードでは)、チップ用の HAL を使い、センサー用のドライバは自分で作るか crates.io で探すことになります。ですが幸いなことに、micro:bit には実際に BSP があるので、私たちは HAL の上にそれも使っていきます。

レイヤーの統一

次に、Rust Embedded の世界で非常に中心的なソフトウェアである embedded-hal を見ていきます。その名前が示すとおり、これは先ほど学んだ第 2 の抽象化レベル、つまり HAL に関係しています。embedded-hal の背後にある考え方は、すべての HAL における特定のペリフェラルの実装に通常共通している振る舞いを記述する trait のセットを提供することです。たとえば、ピンの電源をオンまたはオフにできる関数は、常に存在すると期待されます。たとえば、ボード上の LED をオン・オフするときです。これにより、たとえば温度センサー用のドライバを、embedded-hal の trait 実装が存在するあらゆるチップで使えるように書けます。つまり、そのドライバを embedded-hal の trait にのみ依存するように書けばよいのです。このように書かれたドライバはプラットフォーム非依存と呼ばれ、幸いなことに crates.io 上のドライバの大半は実際にプラットフォーム非依存です。

さらに読む

これらの抽象化レベルについてさらに学びたい場合は、Franz Skarman、別名 TheZoq2 が、Oxidize 2020 でこのトピックに関する講演 An Overview of the Embedded Rust Ecosystem を行っています。