4

RTOS を使用して Arm7 のコードを c で記述しました。優先度が同じレベルに設定されているタスクが複数あります。したがって、タスクはラウンドロビン ベースで実行されます。

1 つのタスク (デフォルト) が rtos で他のタスクよりも低い優先度に設定されているという例外があります。タスクが実行されていない場合は、デフォルトまたは優先度の低いタスクが実行されます。

ここで、そのデフォルト タスクの実行の正確な合計タイミング (期間) を計算したいと考えています。

誰でも何をすべきか....そしてコードでどのように行うべきか..

よろしくダニ

4

3 に答える 3

5

デフォルトまたはアイドル状態のタスクがいつ実行されているかを確認する非常に簡単な方法は、ハードウェアにそのようなものがある場合、このタスクに未使用の(ただしアクセス可能な)GPIOピンまたはインジケーターLEDを切り替えることです。次に、オシロスコープをI / Oラインに接続すると、スコープに表示される発振期間の長さによって、プロセッサがアイドルタスクに留まっている時間を確認できます。他のタスクが実行されているときは常に、回線は定常状態のままになります。

別の方法は、OSコードにアクセスできる場合、デフォルトのタスクが選択されているときは常に行を高くし、他のタスクでは低くすることです。

于 2010-06-03T14:44:40.163 に答える
3

お使いのプラットフォーム (CPU、RTOS) に関する詳細情報を提供していただけると助かりますが、一般的な考え方は次のとおりです。

ほとんどの RTOS には、何らかのタイプの「タスク スイッチ」コールアウトまたはフックがあります。ほとんどの組み込みプラットフォームには、簡単にアクセスできるタイマー周辺機器 (ハードウェア タイマー) があります。

したがって、優先度の低いタスクに切り替えたり切り替えたりするたびに、タイマーのスナップショットを取り、時間間隔を計算します。

タイマー ロールオーバー (タイマー期間が非常に短い場合は複数のロールオーバーを含む)、低電力/スリープ モード (使用する場合)、ISR で費やされる時間など、あらゆる種類の警告が適用されます。

于 2010-06-03T13:55:14.700 に答える
1

私はダンの答えに同意します-ここにいくつかの追加/機能強化があります:

(1)ウィンドウベースの計算。デフォルトにはおそらく周期性がないため、あるウィンドウ(1000ミリ秒など)でそのタスクに費やされたパーセンテージで実行時間を計算する必要があります。タイマー クリックの累積に使用する静的変数を定義する必要があります。ウィンドウが期限切れになると (つまり、1000 ミリ秒が経過すると)、デフォルトで費やされる割合である 1000 ミリ秒と比較して、デフォルトで費やされる時間を計算できます。あなたの説明を読んでいると、デフォルトの状態は基本的にアイドル状態のようです。つまり、このパーセンテージはおおよそ、利用可能なマイクロ使用率です。

(2) 1 時間に 1 回のロールオーバー。. 32 ビット カウンターを使用でき、usec タイムスタンプをキャプチャする場合は、ロールオーバーが発生する 1 時間以上前にすることができます。これをホーム プロジェクトに使用している場合は、ロールオーバーを無視するオプションがあります。それは、1 つの歪んだ 1000 ミリ秒のウィンドウに寄与します。それだけです。一方、最大の使用率を監視し、これが原因で障害または診断を設定する場合は、それを検討する必要があります。

(3) ISR スキュー。ISR で費やされた時間を別のタスクで費やされた時間とは異なる方法で処理する必要があるかどうかの判断は、RTOS がコンテキスト切り替えを処理する方法に依存します。Dan が言及しているように、ほとんどの RTOS には、タスク スイッチが発生したときにトリガーされる何らかのコールバックまたはフックがあります。一部の RTOS には、ISR 専用の別のフックがあります。ユーザーは、ユーザーのタスク自体よりも (できれば) 短い ISR に費やした時間を気にする可能性が低いという一般的な理論以外に、これの動機が何であるかは正確にはわかりません。いずれにせよ、RTOS がこの切り替えをどのように処理するかを確認し、そこから進んでください。

これを正しく処理しないと、ISR で費やされた時間は、ISR が起動したときに実行されていたタスクに起因します。たまたまデフォルトにいた場合、デフォルトのタスクは ISR 時間を「吸収」することでした。多くの ISR を実行していない場合は、これを完全に無視します。

幸運を!私は PowerPC 551X ファミリでこれを行いましたが、それは自動車用 SW の生産用だったので、完璧でなければなりませんでした! あなたはそれをはるかに簡単にする必要があります:)

于 2010-08-29T12:23:29.980 に答える