ご注意ください:この質問は2つのRTOSについて具体的に言及していますが、より一般的であり、以前に組み込みRTOS用のCコードを記述していて、それらのソフトウェアはMCUで直接実行されます。
組み込みRTOSについてさらに学び、それらのアプリケーションを作成することに興味があります。私は現在 Embox と [〜#〜] riot [〜#〜] を見ています。なぜなら、それらはオープンソースであり、現代的でアクティブであり、優れたドキュメントを持っているようだからです。私の目標には2つのフェーズがあります。フェーズ1は、これらのOSをコンパイルしてMCU(おそらくAVRまたはARM)にフラッシュする方法を理解することです。フェーズ2では、単純なCプログラム(基本的にはヘッドレスデーモン)を記述します。これは、「趣味のアプリ」として徐々に進化します。次に、このプログラムを同じMCUにフラッシュ/展開し、Embox/RIOTとその上にあるアプリで構成されるアプリスタックを正常に展開します。
最終的に行き止まりに至る道を進む前に、私は偶然偶然に遭遇しました この記事 これは、C /アセンブラーで記述され、MCUにフラッシュされたリアルタイムアプリが、なぜ不要なのかを説明するのにかなり役立ちます'treallyそれらの下にRTOSが必要です。
だから今、私は本当に混乱しており、コンピューティング理論に関する私の基本的な理解の一部に疑問を投げかけています。そもそもEmbox/RIOTを使うかどうかの決定をしようとしていると思います。
明らかに、前者の方が手間がかかります。そのため、そのルートに進むには正当な理由/見返りがあるべきです。だから私は尋ねます:これらの(および類似の)組み込みRTOSがMCU/Cアプリ開発者に提供する実際の利点は何ですか? RTOSを使用することで、Cアプリが(おそらく、ホイールを再発明しないことによって)どのような特定の機能を利用できますか? RTOSを捨ててベアメタルにすることで何が失われますか?
RTOSのウィキペディアエントリにアクセスしたときに表示されるメディアの誇大宣伝ではなく、ここで具体的な例を求めています;-)
マイクロコントローラプログラムは、多数のタスクで構成されています。コンピューター制御の望遠鏡マウントを作成したいとしましょう。タスクは次のとおりです。
これは、マイクロコントローラーを使用するためのかなり典型的な一連のタスクであり、次のような無限ループで管理するのは非常に簡単です。
while(TRUE) {
uint8_t input = readUsbBuffer();
parseCommand(input);
readSensors();
setMotors();
}
機能の追加と追加を続けると、次のような抽象化を作成したい一般的な問題に遭遇し始めます。
readSensors
に時間がかかりすぎる場合は、中断して後で再び実行できるようにする必要があります。これらのアイテムの1つまたは2つは、比較的簡単に手動で処理できます。これらの種類の問題が頻繁に発生し、ライブラリに一般化し始める場合、基本的にRTOSを再発明しました。プログラムのタスク管理が十分に複雑である場合、市販のRTOSを使用していなくても、結局のところ、1つを不十分に再発明することになります。
ただし、私の経験では、RTOSを必要とする行は、マイクロコントローラーではなくマイクロプロセッサーを必要とする行に非常に近くなっています。ファームウェアがそのように複雑になることが予想される場合は、通常、最初からマイクロプロセッサのルートに進みます。
私はARM Cortex-M0のために独自の協調マルチスレッドライブラリを作成しました。
ほんの数ページのコードであり、その最初のバージョンは、記述とデバッグに1日もかかりませんでした。
あなた自身のロールの大きな利点は、コードを知っていて、RTOSがサポートしていない可能性のあるチップに移植できることです。また、 "will it ' crash機能AとBを同時に使用しようとしていますか?」コードを記述したので、答えはわかっています。
スレッド化はRTOSから得られる主なものであり、自分で実装することはそれほど重要なことではありません。 RTOSの多くの機能が必要になることはまれです。しかし、要件を厳しくし、それが正しいことが判明した場合は、RTOSを使用してください。