最初に、私はリアルタイムシステムプログラミングの初心者であることを述べたいので、私の質問が正しいかどうかはわかりません。申し訳ありませんが、私はいくつかの助けが必要です
質問の要約:ハードリアルタイムソフトウェアを実装して、ハードデッドラインに確実に対応する方法を教えてください。 QNXのいくつかの機能を使用する必要がありますか?それともLinuxでQNXに移植してそれを書くだけで十分で、デフォルトでリアルタイムになりますか?
完全な質問: Linux、Windows、AndroidおよびQNXのプロセス間通信を備えた複雑なクロスプラットフォームマルチプロセスソフトウェアを実装しました。プログラミング言語はC++であり、他のライブラリのブーストとプランティ。私たちのソフトウェアはうまく機能し、迅速に動作しますが、それでもプロトタイプです。本番環境ではリアルタイムで実行する必要があります。一部の機能は非常に重要であるため、リアルタイムで非常に堅牢でなければなりません私たちのソフトウェアを使用する人々の安全性は彼らに依存しているかもしれません。彼らはかなり速く-数百ミリ秒まで動作します。しかし、私はこの事実のために私たちのシステムが本当にリアルタイムであるかわかりません(私は正しいですか?)。
ですから、主な質問があります。ソフトウェアをリアルタイムに変更するにはどうすればよいですか?私はたくさんグーグルしましたが、それを行う方法はまだわかりません。
プラットフォームに関する追加情報:現在テスト目的でのみ使用しているLinuxおよびWindows。 Android-必要かどうかはまだ決定されていません。QNX-本番用のターゲットOSです。次の質問の答えは「いいえ」だと思います):)クロスプラットフォームのリアルタイムソフトウェアを実装するためのすべて(リアルタイムOS(RTOS)および汎用OS(GPOS)用)?
おそらく、QNXにのみすべてのリアルタイム機能を実装するために努力する必要がありますか?しかし、私はまだそれを行う方法を理解していません。誰かがこの質問に光を当てることができますか?
高速はリアルタイムを意味するものではなく、リアルタイムは高速を意味するものではありません。
リアルタイムとは、結果が配信される日付がその値と同じくらい重要であることを意味します。つまり、結果の値は正しいが、配信が早すぎたり遅すぎたりする場合、全体的な結果は間違っています。
たとえば、ビデオプレーヤーについて考えてみます。ビデオフレームが適切なレートで表示されない場合、ユーザーは満足できません。画像と音声が同期していない場合はさらに悪い。
この例は、一部のリアルタイムアプリケーションを現在の汎用OSに実装できることを示しています。
ただし、デッドラインミスの結果に関して、ハードリアルタイムとソフトリアルタイムには違いがあります。ソフトリアルタイムシステムでは、これは単なる煩わしさまたはサービスの低下です(数秒間の画像のフリーズを考えてください)。一方、ビデオプレーヤーの例)は、原子力発電所などのハードリアルタイムシステムの(破局的な可能性がある)障害です。
@ mouviciel で既に述べたように、リアルタイムと高速は2つの独立したプロパティですが、リアルタイムの多くの締め切りは、比較的高速な応答が必要であることを示しています。
リアルタイムソフトウェアを作成する場合、正しい応答の次に重要な特性は、応答が与えられる速度を正確に予測できることです。ハードリアルタイム機能の場合、完全な電源障害を除くすべての可能な条件下で期限が確実に満たされるようにする必要さえあります。
予測不可能性の典型的な原因は、
それらの領域を回避する必要があるとは言っていません(ほとんどの場合は不可能です)が、それらの領域が、関連する機能のリアルタイムの締め切りに間に合わせることが予測できる容易さにどのように影響するかを認識する必要があります。
リアルタイムの2文の説明は、リアルタイムシステムが理解して制御最悪の場合入力が変化してから出力が変化するまでの応答時間に設計されていると思います。
それには、システム全体をカバーする分析が必要です。 USBキーボードとブレーキサーボで構成される簡単なシステムがあるとします。このシステムでどのような応答性を実現できますか?あなたは考慮する必要があるかもしれません:
この種の環境では、MISRA C規格など、通常、信頼性に関する特別な考慮事項もあります。