PICプロセッサおよびx86プロセッサ用のベアメタルコードを多数作成しました。誰かがオペレーティングシステムを必要とする方法とタイミングを教えてもらえますか?逆に、オペレーティングシステムを使用する場合も使用しない場合も、どのアプリケーションまたは状況に対処できますか?
PICプロセッサおよびx86プロセッサ用のベアメタルコードを多数作成しました。誰かがオペレーティングシステムを必要とする方法とタイミングを教えてもらえますか?逆に、オペレーティングシステムを使用する場合も使用しない場合も、どのアプリケーションまたは状況に対処できますか?
回答:
私の経験則では、製品が次の1つ以上を必要とする場合、オペレーティングシステムを検討する必要があります。TCP/ IPスタック(または他の複雑なネットワークスタック)、複雑なGUI(おそらくウィンドウやイベントなどのGUIオブジェクトを持つもの) )、またはファイルシステム。
ベアメタルコーディングを行ったことがあれば、おそらくスーパーループプログラムアーキテクチャに精通しているでしょう。製品のファームウェア要件が保守可能なスーパーループを実装するのに十分なほど単純である(そして、できればある程度拡張できる)場合、おそらくオペレーティングシステムは必要ありません。
ソフトウェア要件が増加すると、スーパーループはより複雑になります。ソフトウェア要件が非常に多く、スーパーループが複雑になりすぎたり、システムのリアルタイム要件を満たすことができない場合は、別のアーキテクチャを検討するときが来ました。
RTOSアーキテクチャにより、ソフトウェア要件をタスクに分割できます。適切に行われれば、これにより各タスクの実装が簡素化されます。また、タスクの優先順位付けにより、RTOSはリアルタイムの要件を簡単に満たすことができます。ただし、RTOSは万能薬ではありません。RTOSを使用すると、システム全体の複雑さが増し、新しいタイプのバグ(デッドロックなど)が発生しやすくなります。RTOSの代替として、イベントベースのステートマシンアーキテクチャ(QPなど)を検討できます。
製品にネットワーク、複雑なGUI、およびファイルシステムがある場合は、VxWorks、Windows、Linuxなどのフル機能のオペレーティングシステムを検討する必要があります。フル機能のオペレーティングシステムには、低レベルの詳細用のドライバーが含まれ、アプリケーションに集中できます。
「組み込みシステム」の定義に本当に依存します。ベアメタルプログラミングでない場合は埋め込まれていないと主張する人もいるかもしれませんが(これはあなたの質問を排除します)、私はそれに反対します-1つの機能のみを実行するように設計されたシステムは、つまり、1つの特定の「アプリケーション」のみを実行することは、組み込みシステムと呼ばれます。
とはいえ、本格的なOSのサービスから恩恵を受ける状況を想像するのはかなり簡単なはずです。たとえば、私が働いているところでは、窓の上で動作する計装設計スイートの上にテスト機器を構築している人を見つけるのは非常に一般的です。これらのシステムは、テストステーション構成で起動し、一般的な使用をロックアウトするように構成されており(ステーションの破損を防ぐため)、おそらく組み込みシステムです。
ただし、既成のI / Oモジュールを購入してラックマウントPCに接続し、GUIで構成を起動するだけでは、一部の組み込みシステム設計として認定されない場合があります。少し控えめな状況では、FPGAを備えたカスタムプロセスコントローラーを検討してください。このプロセスコントローラーには、ファンシーなデータロギングを行う必要があります。ソフトコアプロセッサシステム(既存のBSPを使用)を組み込み、リアルタイムlinuxを実行して、ネットワークスタック(ロギングやNTPなど)を実行し、他のすべてをロジックで実行できます。
私の(非常に漠然とした)経験則は、複数の制御スレッド(たとえば、プロトコルまたはステートマシンに加えて何か他のものを含む少なくとも1つのデバイス)が必要な場合、OSishソフトウェアのいくつかはあなたの人生を楽にします
switch
ベースのステートマシンを使用する労力がそれを超えない限り、switch
ベースのマシンの方が優れている傾向があります。さらに、8x51およびTMS2000プラットフォームの両方で、単純なスタックベースの協調タスクスイッチャーを実装しました。切り替えるタイミングを決定するOSロジックはありません。1つの「スレッド」が中断する可能性があると感じたときはいつでも、他のスレッドに切り替えます。その他のスレッドが、待っていたことがまだ起こっていないことがわかった場合、通常のOSが切り替えるかどうかを決定するよりも短い時間で最初のスレッドに切り替えることができます。
古い質問ですが、とにかくコメントします。
ネットワークスタックなどがなくても、組み込みアプリケーションに十分なプロセスがあるため、タスクスケジューラが必要な時点で、RTOSを検討できます。単純なタイマーベースの協調型マルチタスクスケジューラを作成するのはそれほど難しくありませんが、スタックしたプロセスがアプリケーションの残りの部分をブロックしないようにすることで、適切な処理に時間がかかることがあります。プロセスが完了していない場合、キュー内でプロセスをダウンさせるために、何らかのプロビジョニングを備えた優先システムを実装する必要があります。
RTOSは、メモリ保護などの機能も提供します。これにより、Cコードの一般的な失言をはるかに簡単に追跡できますが、単純なマイクロコントローラでは複雑なメモリ保護を処理できない場合があります。たとえば、MSP430では、コードとデータを高レベルで分離できますが、きめ細かいメモリアクセス制御はありません。