3

vxworksタスクはどのようにしてCPUを最小時間で優先度の低いタスクに譲ることができますか?

タスクが1ミリ秒未満でCPUを放棄できるようにする方法はありますか?

他の優先度の低いタスクを実行させるために私が知っている唯一のメソッドはtaskDelay(n)です。ここで、n>=1です。

taskDelay(0)は、同等以上の優先度を持つ他のすべてのタスクを実行することを常に想定しています。

taskDelay(1)を使用すると、優先度の低いすべての保留中のタスクを最大1ミリ秒実行できます。

4

2 に答える 2

2

VxWorks には、スケジューラを強制的に実行する特定のイベントがあります。たとえば、各 semGive()、各システム クロック ティック、および taskDelay() です。taskDelay() の引数は、システム クロックの目盛りです。sysClkRateGet() は、システム クロックのレートを返します。

たとえば、sysClkRateGet() が 10 を返す場合、各クロック ティックは 100 ミリ秒です。したがって、taskDelay(1) を呼び出すと、タスクは次のシステム ティックまでスリープするように指示されます。ただし、これは 100 ミリ秒のスリープを保証するものではなく、代わりに最大 100 ミリ秒のスリープ、または次のクロック ティックが差し迫っている場合はわずか 0 ミリ秒のスリープになります。taskDelay(2) を呼び出すと、タスクは次のクロック ティック (0 から 100 ミリ秒の間の時間) と次のクロック ティック (100 ミリ秒であることが保証されています) までスリープします。 200ミリ秒。

VxWorks のタイミングには多くの考慮事項があり、これが詳細の説明に役立つことを願っています。

于 2012-06-20T12:20:06.130 に答える