uC/OS-II RTOS には、他のタスクを実行する準備ができていないときに実行されるアイドル タスクがあることがわかりました。アイドル タスクがリソースを消費する可能性がある場合、どうすればそれを削減できますか?
2 に答える
通常、アイドルタスクは、プロセッサが低電力システムであり、プロセッサにそのようなモードがある場合、プロセッサが低電力(スリープ)モードになる場所です。これは通常、特定のアセンブリ命令です。たとえば、ARM Cortex M3では、「WFI」命令を実行します。他のチップでは、(命令ではなく)電力を管理する特定のレジスタがコアの外部にある場合があります。
低電力モードに入る前に、多くの場合、条件(満たす必要のある要件)があることに注意してください。スリープ状態になる前に、割り込みをロックする必要がある場合もあれば、ロックを解除する必要がある場合もあります。チップのデータシートを確認してください。
通常、低電力モードに入る前に、不要な周辺機器の電源を切ります。もう一度、チップのデータシートを確認してください。また、割り込みを使用してウェイクアップする場合は、周辺機器の電源がオフになっていないこと、および割り込みが有効になっていることを確認してください。有効になっていないと、ウェイクアップできません。
最後のポイント:デバッグ中(たとえば、JTAGデバイスの制御下)、低電力モードに入ると奇妙なことが起こることが多いため、デバッグ時にアイドルタスクで「スリープ」を無効にし、デバッガなしで実行している場合にのみこれを実行します。通常、これはコンパイル時の決定です(#ifdef ...)
典型的なアイドル ループは、非常に少ない数のプロセッサ ゲートを実行する可能性が高いため、コアでほとんど電力を消費しませんが、重要な場合は、アイドル ループでスリープ モードを呼び出して、コードがまったく実行されないようにすることができます。停止します。ただし、リアルタイムの応答を維持するために、周辺デバイスに電力が供給されたままになり、割り込みを生成できる可能性が高いため、実際にはメリットが最小限になる可能性があります。
他のリソースに関しては、通常、アイドル ループは単に現在の命令への分岐になります。1 つの命令、データなし。それよりもはるかに小さくすることはできません。uC/OS-IIのソースコードを公開しておりますので、ぜひご覧ください!
もちろん、アイドル タスクを直接変更するかフックを実装して拡張した場合、そのリソースの使用は完全に制御できますが、無料で何かを取得することはできません。