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

背景

マイクロコントローラーとは?

マイクロコントローラーは、1つのチップ上に載ったシステムです。みなさんのコンピューターは、プロセッサー、RAM、ストレージ、Ethernet ポートなど、複数の個別部品で構成されています。一方、マイクロコントローラーは、そうした種類の部品をすべて単一の「チップ」またはパッケージに内蔵しています。これにより、より少ない部品でシステムを構築できます。

マイクロコントローラーで何ができますか?

いろいろなことができます! マイクロコントローラーは、いわゆる「組み込みシステム」の中核を成します。組み込みシステムは至るところにありますが、普段は意識しないことがほとんどです。衣類を洗う機械、文書を印刷する機械、食べ物を調理する機械は、組み込みシステムによって制御されています。組み込みシステムは、みなさんが住み、働く建物を快適な温度に保ち、みなさんが移動に使う乗り物を走らせたり止めたりする部品も制御しています。

ほとんどの組み込みシステムは、ユーザーの介入なしに動作します。洗濯機のようにユーザーインターフェースを備えている場合でも、その動作の大部分は自律的に行われます。

組み込みシステムは、物理的なプロセスを制御するためによく使われます。これを可能にするために、組み込みシステムには、世界の状態を知らせる1つ以上のデバイス(「センサー」)と、何かを変化させることを可能にする1つ以上のデバイス(「アクチュエーター」)があります。たとえば、建物の空調制御システムには次のようなものがあるでしょう。

  • さまざまな場所の温度と湿度を測定するセンサー。
  • ファンの速度を制御するアクチュエーター。
  • 建物に熱を加えたり、建物から熱を取り除いたりするアクチュエーター。

どのような場合にマイクロコントローラーを使うべきですか?

上に挙げた組み込みシステムの多くは、Linux を実行するコンピューター(たとえば「Raspberry Pi」)でも実装できます。それなのに、なぜ代わりにマイクロコントローラーを使うのでしょうか。プログラムを開発するのは、むしろ難しそうに思えます。

理由としては、次のようなものがあります。

コスト。 マイクロコントローラーは、汎用コンピューターよりもはるかに安価です。マイクロコントローラー自体が安いだけでなく、動作に必要な外部の電気部品もずっと少なくて済みます。そのため、プリント回路基板(PCB)はより小さくなり、設計や製造のコストも下がります。

消費電力。 ほとんどのマイクロコントローラーの消費電力は、本格的なプロセッサーのごく一部です。バッテリーで動作するアプリケーションでは、これは非常に大きな違いになります。

応答性。 その目的を果たすために、ある種の組み込みシステムは、常に限られた時間内に反応しなければなりません(たとえば、自動車の「アンチロック」ブレーキシステム)。システムがこの種のデッドラインを守れないと、致命的な障害が発生する可能性があります。そのようなデッドラインは「ハードリアルタイム」要件と呼ばれます。このようなデッドラインに縛られる組み込みシステムは、「ハードリアルタイムシステム」と呼ばれます。汎用コンピューターや OS には通常、コンピューターの処理資源を共有する多くのソフトウェアコンポーネントがあります。そのため、厳しい時間制約の中でプログラムの実行を保証することが難しくなります。

信頼性。 構成要素(ハードウェアとソフトウェアの両方)が少ないシステムでは、不具合の原因になるものも少なくなります!

どのような場合にマイクロコントローラーを使うべきではないですか?

重い計算処理が必要な場合です。消費電力を低く抑えるため、マイクロコントローラーで利用できる計算資源は非常に限られています。たとえば、一部のマイクロコントローラーは浮動小数点演算をハードウェアでサポートしていません。そのようなデバイスでは、単精度浮動小数点数同士の単純な加算でさえ、数百 CPU サイクルかかることがあります。

なぜ C ではなく Rust を使うのですか?

おそらくここで説得する必要はないでしょう。みなさんはおそらく Rust と C の言語としての違いをすでによくご存じだからです。ぜひ触れておきたい点が1つあります。それはパッケージ管理です。C には公式で広く受け入れられたパッケージ管理ソリューションがありませんが、Rust には Cargo があります。これにより、開発ははるかに容易になります。そして、IMO、簡単なパッケージ管理はコードの再利用を促します。ライブラリをアプリケーションに簡単に統合できるようになるからです。これは良いことでもあります。ライブラリがより多くの「実戦的な検証」を受けることになるからです。

なぜ Rust を使うべきではないのですか?

あるいは、なぜ Rust より C を選ぶべきなのでしょうか?

C のエコシステムのほうが、はるかに成熟しています。いくつかの問題に対しては、すでに既製のソリューションが存在します。時間に敏感なプロセスを制御する必要があるなら、既存の商用 Real Time Operating Systems (RTOS) のいずれかを使って問題を解決できます。Rust には、商用で本番運用に耐える RTOS はまだありません。そのため、自分で1つ作るか、開発中のものを試す必要があります。それらの一覧は Awesome Embedded Rust リポジトリで見つけることができます。