1

私の現在のプロジェクトでは、2 つのレベルのタスク処理があります。VxWorks システムでは、優先度の高い (100) タスクで計算処理やその他の作業を行い、優先度の低い (200) タスクでバックグラウンド データをオンボード フラッシュ メモリに記録します。ロギングは、fwrite() 呼び出しを使用して、TFFS ファイル システムに格納されたファイルに行われます。優先度の高いタスクは定期的に実行され、バックグラウンドでログを記録できるようにスリープ状態になります。

私の予想では、優先度の高いタスクがスリープ状態になるとバックグラウンド ロギング タスクが実行され、優先度の高いタスクが起動するとすぐにプリエンプトされます。

発生しているように見えるのは、ロギング タスクを継続的に使用し続けるのに十分なデータがある場合に、優先度の高いタスクが再び実行できるようになると、バックグラウンド ロギング タスクを一時停止する際に大幅な遅延が発生することです。

Power PC アーキテクチャ上の VxWorks 6.8 で優先度の低いタスクのプリエンプションを遅らせる原因は何ですか?

4

2 に答える 2

1

あなたは重要性を定量化しなかったので、以下は単なる推測です...

あなたはフラッシュへの書き込みについて言及しています。問題の1つは、フラッシュへの書き込みでは通常、ドライバーがハードウェアのステータスをポーリングして、操作が正常に完了することを確認する必要があることです。

特定の操作中に、ファイルシステムが一時的にプリエンプションを無効にして、破損が発生しないようにすることができます。ハードウェアが完了するのを待つ必要があることと相まって、これが遅延の原因となる可能性があります。

システムビューアツールにアクセスできる場合は、遅延の原因を特定するのに大いに役立ちます。

于 2012-05-09T02:06:25.773 に答える
0

System Viewer を使用することをお勧めします。TFFS スタックに関連するすべてのタスクが表示され、レイヤーの数に驚くかもしれません。データの大きなブロックで fwrite を作成している場合、フラッシュ アクセスは大きくなる可能性があります (そして、Benoit が言ったように遅くなります)。小さな fwrite をたくさん試してみてください。さまざまなサイズで fwrites() にかかる時間をテストすることをお勧めします。フラッシュ ブロックの境界を越えると、同じサイズのテストごとに違いが見られる場合があります。

于 2012-06-15T11:19:26.780 に答える