省電力機能

省電力機能は、システムの省電力を実現するための機能である。μT-Kernel/OSの中からコールバック型の関数として呼び出される。

省電力機能で定義されるAPIには、low_pow, off_pow があるが、これらは参考仕様であり、μT-Kernel内部でのみ使用する。デバイスドライバ、ミドルウェア、アプリケーションなどが本機能を直接呼び出して使うことはないので、本機能やそのAPIを独自の仕様とすることにより、より高度な省電力機能を実現しても構わない。ただし、本機能の参考仕様として定義されるAPIと同等程度の機能を実装するのであれば、プログラムの再利用性を高める意味で、参考仕様に合わせる方が望ましい。

本機能のAPIの呼出方法についても、実装定義である。単純な関数呼出でもよいし、トラップを使用してもよい。また、μT-Kernel以外のプログラムの中にこれらの機能を用意してもよい。ただし、拡張SVCなどのμT-Kernelの機能を利用する呼出方法は使用できない。

low_pow - システムを低消費電力モードに移行

C言語インタフェース

void low_pow(void);

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×××

関連するサービスプロファイル

以下のサービスプロファイルが有効に設定されている場合に限り、本APIはサポートされる。

TK_SUPPORT_LOWPOWER 省電力機能のサポート

解説

μT-Kernelのタスクディスパッチャの中から呼び出され、CPUのハードウェアを低消費電力モードに移行する処理を行う。

低消費電力モードに移行した後は、low_pow の処理の中で外部割込みの発生を待ち、外部割込みが発生したら、CPU周辺のハードウェアを通常モード(低消費電力ではないモード)に戻す処理を行ってから、low_pow の呼出元に復帰する。

low_pow の具体的な処理手順は以下の通りである。

  1. CPUを低消費電力モードへ移行する。たとえば、クロック周波数を下げる。

  2. 外部割込みの発生を待ってCPUを停止する。たとえば、そのような機能を持つCPU命令を実行する。

  3. 外部割込みの発生によりCPUが実行を再開する。(ハードウェアによる処理)

  4. CPUを通常モードに戻す。たとえば、通常のクロック周波数に戻す。

  5. 呼出元に復帰する。呼出元は、実際にはμT-Kernel内部のディスパッチャである。

low_pow の実装にあたっては、以下の点に注意する必要がある。

  • 割込み禁止状態で呼び出される。

  • 割込みを許可してはいけない。

  • 処理速度が割込み応答速度に影響するので、できる限り高速であることが要求される。

補足事項

タスクディスパッチャは、実行すべきタスクが無くなった場合に、消費電力を下げる目的で low_pow を呼び出す。

off_pow - システムをサスペンド状態に移行

C言語インタフェース

void off_pow(void);

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×××

関連するサービスプロファイル

以下のサービスプロファイルが有効に設定されている場合に限り、本APIはサポートされる。

TK_SUPPORT_LOWPOWER 省電力機能のサポート

解説

μT-Kernelの中から、powmodeTPW_DOSUSPEND を指定した tk_set_pow の処理中に呼び出され、CPU周辺のハードウェアをサスペンド状態(電源の切れた状態)に移行する処理を行う。

サスペンド状態に移行した後は、off_pow の処理の中でリジューム要因(電源再投入など)の発生を待ち、リジューム要因が発生したら、サスペンド状態を解除して off_pow の呼出元に復帰する。

off_pow の具体的な処理手順は以下の通りである。

  1. CPUをサスペンド状態へ移行し、リジューム要因の発生を待つ。たとえば、クロックを停止する

  2. リジューム要因の発生によりCPUが実行を再開する。(ハードウェアによる処理)

  3. 必要に応じて、CPUやハードウェアの状態を通常の状態に戻す。サスペンド状態を解除する。(前項と一緒にハードウェアで処理される場合もある)

  4. 呼出元に復帰する。呼出元は、実際にはμT-Kernel内部の tk_set_pow の処理部分である。

off_pow の実装にあたっては、以下の点に注意する必要がある。

  • 割込み禁止状態で呼び出される。

  • 割込みを許可してはいけない。

なお、周辺機器など各デバイスは、デバイスドライバによってサスペンド状態への移行および復帰を行う。詳細は tk_sus_dev を参照。