最初に背景、私の質問の詳細は次のとおりです。
私が取り組んでいるプラットフォームで働いている会社は、現在、MPLAB IDEを開発環境として使用しているMicrochipPIC32ファミリです。以前はMicrochipdsPICおよびTIMSPのファームウェアも作成しました。この同じアプリケーションのファミリ。ファームウェアは、コードがデバイス制御、データサンプリング、ユーザー通信(通常はユーザーPC)の3つのメインモジュールに分割されているという点で非常に単純です。デバイス制御は、GPIOバスラインとSPIまたはI2C制御が必要な少なくとも1つの部品。データサンプリングは、ファームウェアモジュールを使用して割り込み駆動され、サンプル周波数を維持し、さらに多くのSPI/I2CおよびGPIOバスラインを使用してサンプリングハードウェア(ADCなど)を制御します。 )ユーザー通信は現在、Microchip AppFrameworkを使用してUSB経由で実装されています。
さて、質問です。上記で説明したことを考えると、どの時点でプロジェクトにRTOS)を採用することを検討しますか?現在、これらの考えられるトリガーポイントを使用する理由として考えています。 RTOS:
他にどのような点を考慮すべきだと思いますか?あなたの経験では、RTOSとベースランタイムでコードを実行するだけではなく)の使用を検討することを納得(または強制)しましたか?RTOSも大歓迎です。
RTOSを使用する理由はたくさんあります。それらは多様であり、それらがあなたの状況にどの程度当てはまるかはわかりません。 (注:私はこのように考える傾向があります:RTOSimplieshard real time whichimpliesプリエンプティブカーネル...)
レートモノトニック分析(RMA)-使用する場合 レートモノトニック分析 タイミングの期限が守られていることを確認するには、プリエンプティブスケジューラを使用する必要があります
リアルタイムの期限を守る-RMAを使用しなくても、優先度ベースのプリエンプティブRTOSを使用すると、スケジューラーは期限を確実に守ることができます。逆説的ですが、RTOSは通常、割り込みがマスクされるカーネルの クリティカルセクション が原因で 割り込みレイテンシ 増加します
複雑さの管理-間違いなく、RTOS(またはほとんどのOSフレーバー)がこれに役立ちます。プロジェクトを許可することによって独立したスレッドまたはプロセスに分解され、メッセージキュー、ミューテックス、セマフォ、イベントフラグなどのOSサービスを使用して通信および同期することで、プロジェクト(私の経験と意見では)がより管理しやすくなります。大規模なプロジェクトでは、ほとんどの人が共有リソースの保護の概念を理解しているため、ルーキーのミスは多く発生しませんが、マルチスレッドアプローチに移行すると、頭を抱えるまで事態が複雑になる可能性があることに注意してください。問題。
サードパーティパッケージの使用-多くのRTOSは、プロトコルスタック、ファイルシステム、デバイスドライバー、GUIパッケージ、ブートローダーなどの他のソフトウェアコンポーネントを提供します。 DIYショップというよりも「インテグレーター」になり、アプリケーションをより迅速に構築するのに役立つミドルウェア。
Testing-はい、確かに、特に一貫したアプローチが使用されている場合は、制御の各スレッドを明確に定義されたインターフェイスを備えたテスト可能なコンポーネントと考えることができます(メッセージキューの1か所で常にブロックするなど)。もちろん、これはユニット、統合、システムなどのテストに代わるものではありません。
堅牢性/フォールトトレランス-RTOSは、プロセッサのMMU =(PICの場合、これは当てはまらないと思います)。これにより、各スレッド(またはプロセス)を独自の保護されたスペースで実行できます。スレッド/プロセスは、互いのメモリに「ディップ」して踏みつけることはできません。デバイス領域(MMIO)は、一部(またはすべて)のスレッドに対して立ち入り禁止になっている可能性があります。厳密に言えば、プロセッサのRTOSを活用するために、MMUは必要ありません。 (またはMPU)ですが、2つは連携して非常にうまく機能します。
一般に、RTOS(またはある種のプリエンプティブマルチタスカー)を使用して開発できる場合、結果はよりクリーンで、よりモジュール化され、より適切に動作し、より保守しやすくなる傾向があります。オプション、私は1つを使用します。
マルチスレッド開発には少し学習曲線があることに注意してください。 RTOS /マルチスレッド開発に不慣れな場合は、 RTOSの選択 、 プリエンプションの危険性 および プリエンプティブの概要)に関するいくつかの記事に興味があるかもしれません。マルチタスク 。
最後に、推奨事項を求めていなくても...多数の商用RTOSに加えて、無料の製品( FreeRTOS 最も人気のあるものの1つ)と ( Quantum Platform は、プリエンプティブカーネルを含む アクティブオブジェクト の概念に基づくイベント駆動型フレームワークです。 たくさんの選択肢 がありますが、特にデバッグ時に、ソースコードがあると(RTOSが無料でなくても)有利であることがわかりました。
RTOSは、何よりもまず、並列フローをタスクのセットに編成し、それらの間で明確に定義された同期を行うことを可能にします。
非RTOS設計であるIMOは、すべてのプログラムが1つの大きなエンドレスループであるシングルフローアーキテクチャにのみ適しています。マルチフロー(多数のタスクを並行して実行する)が必要な場合は、RTOSの方が適しています。 RTOS)がないと、この機能を社内で実装し、車輪の再発明を行う必要があります。
コードの再利用-RTOS APIを使用してドライバー/プロトコルハンドラーをコーディングすると、将来のプロジェクトに簡単にプラグインできる可能性があります
デバッグ-一部のIDE(IAR Embedded Workbenchなど)には、タスクのCPU使用率やスタック使用率など、実行中のプロセスに関する適切なライブデータを表示するプラグインがあります。
通常、リアルタイムの制約がある場合はRTOSを使用します。リアルタイムの制約がない場合は、通常のOSで十分な場合があります。RTOS/ OSはランタイムを提供します。メッセージキューやタスクなどのインフラストラクチャ。複雑さを軽減し、低レベルのサポートを提供し、テストを支援できるコードを探しているだけの場合は、次のライブラリのいくつかで実行できます。
前述のポイントに加えて、RTOS)を使用すると、サポートが必要な場合にも役立つことがあります。
ほとんどのRTOSはこれらの機能を提供するか、それらをサポートするために拡張可能です