背景
マイクロコントローラとは何でしょうか?
マイクロコントローラは、1チップ上のシステムです。 一方、あなたのノートPCは、プロセッサ、RAMスティック、ハードディスクドライブ、イーサーネットポートなど、いくつかの個別の部品で構成されています。 マイクロコントローラは、それらの構成部品を1つの「チップ」またはパッケージ内に組み込みます。 このことにより、最小限の部品数からなるシステムを構築することが可能になります。
マイクロコントローラで何ができるのでしょうか?
たくさんのことができます!マイクロコントローラは組込みシステムとして知られるシステムの中心を担う部品です。 組込みシステムはどこにでもありますが、通常それらを意識することはありません。組込みシステムは車のブレーキを制御したり、 衣服を洗濯したり、ドキュメントを印刷したり、冷暖房を制御したり、車の燃料消費を最適化したりします。
組込みシステムの主な特徴は、洗濯機のようにユーザーインタフェースがある場合でさえ、ユーザーの介入なしに動作することです。 ほとんどの動作は、組込みシステム自身で完結します。
組込みシステムの他の特徴としては、プロセスを制御することです。このために組込みシステムは、通常、1つ以上のセンサとアクチュエータを持ちます。 例えば、空調システムは、点在する温度計や湿度計といったセンサと、発熱体やダクトに接続されたファンのようなアクチュエータを持ちます。
マイクロコントローラを使うべきなのはいつでしょうか?
上述した全てのアプリケーションを、Linuxが動作するRaspberry Piで実装することは可能でしょう。 わざわざOSなしで動作するマイクロコントローラを使うのはなぜでしょうか? プログラムを開発するのは、容易ではなさそうです。
主な理由はコストです。マイクロコントローラは、汎用コンピュータより非常に安価です。マイクロコントローラ自体が安いだけではないです。 マイクロコントローラは、動作のための外部電気部品を少ししか必要としません。そのため、プリント基板(PCB)を小さく、安価に設計、製造できます。
他の大きな理由は、消費電力です。マイクロコントローラは、本格的なプロセッサよりも数桁少ない電力しか消費しません。 アプリケーションがバッテリで動作するとき、この違いは大きいです。
最後になりましたが、(ハード)リアルタイム制約があるためです。 プロセスによっては、ある時間間隔以内にイベントに応答する必要があります(例えば、クアッドコプター/ドローンが突風に襲われた場合)。 もし、デッドラインを満たさない場合、そのプロセスは悲惨な結末を迎えるでしょう(例えば、ドローンは地面に墜落します)。 汎用OSを実行している汎用コンピュータは、背後で多くのサービスが動作しています。 このことは、厳密な時間制約内でのプログラム実行の保証を難しくします。
マイクロコントローラを使うべきでない時はいつでしょうか?
計算量が膨大な場合です。消費電力を低くするため、マイクロコントローラは非常に限られた計算資源しか持っていません。 例えば、マイクロコントローラによっては、浮動小数点演算のハードウェアすら搭載していません。 そのようなデバイスでは、単精度の単純な加算でさえも、実行に数百CPUサイクルかかるでしょう。
CではなくRustを使う理由はなんでしょうか?
あなたはRustとCとの違いを知っており、ここで説得する必要がないことを願っています。 あえて、1つ強調すると、それはパッケージ管理です。RustにはCargoがある一方、Cは公式の広く普及しているパッケージ管理システムがありません。 Cargoは開発を非常に容易にします。私の意見としては、パッケージ管理が簡単であることは、コードの再利用を促進します。 なぜなら、ライブラリがアプリケーションに容易に結合できるからです。このことは、ライブラリがより「実戦で使われる」ことにも良い影響があります。
Rustを使うべきでない理由は何でしょうか?
もしくは、RustよりCを選ぶ理由はなんでしょうか?
Cのエコシステムはより成熟しています。いくつもの問題に対する解決策が既に存在しています。 時間制約のあるプロセスを制御する必要がある場合、既存の商用リアルタイムOS(RTOS)を選び、問題を解決することができます。 Rustにはまだ、商用で製品レベルのRTOSがないため、自分自身で作るか、開発中のものを試す必要があります。