2

私は「レガシー」組み込みシステム アプリケーションを引き継いでいますが、完全にレガシーではありません。最初に懸念しているのは、開発中のある時点で、アプリの時間的制約が要件で失われてしまったことです。プロジェクトの。今は、それをリファクタリングして、意図したとおりにリアルタイムにすることが私の仕事です。

このプロジェクトは、C および C++ で ATMEL UC3 用に作成されています。FreeRTOS 上で実行され、6 つのタスクがあります。外部デバイスを管理するための 5 と、メイン プログラムとして優先度が最も低く、タスクが最も重い別のものがあります。私が最初に行ったのは、メイン タスクにかかる時間を測定することでした。ときどきデッド ラインから外れたのは当然のことでした。そのため、完全なタスクは数サイクルで実行されました。

この場合に取るべき主なポイントは何ですか?

あなたならどうしますか?すべての実行パスの流れをたどって命令を数え、次に最悪の実行パスを取り、チップの周波数でリアルタイム実行を行う必要があることを私は知っています。それは理論的には、少し簡単にするためのツール、トリック、または手順はありますか?

更新しました:

機密上の理由により、ソースを共有することはできません。さらに、私はさらに深く掘り下げてきましたが、主な遅延は明らかにキューのサイズによって生成されていることがわかりました。ほとんどのキューは、2 つまたは 3 つのメッセージを保持するために作成されます。ここでさらに情報を提供するには、いくつかのテストを行う必要があります。理論的には、キューがいっぱいになると、メッセージ用の空き領域が再びできるまで、残りのプロセスは送信できなくなります。その後、プロセスが中断され、連続して再スケジュールが行われます。私の考えは、キューのサイズを 10 に増やして、パフォーマンスとタイミングが改善されるかどうかを確認することです。

UPDATED 2 暗闇の中にいるときに非常に役立つ提案から始めて、「理解」というツールに出くわしました。これは無料ではありませんが、分析と文字を取得するのに役立ちます. また、複雑な関数の char フローも表示されるため、フローの実行の最長パスを確認できます。

4

1 に答える 1