(57)【要約】【課題】マイクロコンピュータ等の制御プログラムにおいて、動作周波数を任意に制御し、消費電力の低減を図る。【解決手段】ユーザプログラムの実行（Ｓ３−１）中に、割り込み要因１による割り込みが発生した場合、マイクロコンピュータ等の制御プログラムにより、動作周波数を変更する処理（Ｓ４−２、Ｓ４−３）を行う。さらにサブルーチンを実行（Ｓ４−４）し、動作周波数を復帰する処理（Ｓ９）を行う。このとき、Ｓ９は実行されるサブルーチンが異なっていても、共通して行われる処理であるため、制御プログラムが使用するメモリ領域を小さくすることができる。従って、制御プログラムにより、積極的な電力管理を行うことができ、消費電力を低減させることができる。【選択図】図１
2007164672.tif 000002
【特許請求の範囲】
【請求項１】
第１の周波数でユーザプログラムを実行する処理と、
前記ユーザプログラムの実行中に、複数の割り込み要因のうち任意の割り込み要因による割り込みが発生した場合、前記第１の周波数を任意の周波数に変更する周波数変更処理と、
前記任意の周波数で前記任意の割り込み要因に対応したサブルーチンを実行するサブルーチン実行処理と、
前記任意の周波数を前記第１の周波数に戻す周波数復帰処理と、
前記第１の周波数で前記ユーザプログラムの実行を再開する処理と、
をコンピュータに実行させるプログラムであって、
前記周波数復帰処理は、前記複数の割り込み要因に対応するサブルーチンの実行後に行われる共通の処理であることを特徴とするプログラム。
【請求項２】
前記第１の周波数は定格周波数よりも低く、前記第２の周波数は前記定格周波数よりも高いことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記任意の割り込み要因による割り込みが発生した場合、前記周波数変更処理の前に前記第１の周波数の値を退避させ、前記周波数復帰処理の際に、前記任意の周波数の値を前記退避させた第１の周波数の値とすることを特徴とする請求項１又は２に記載のプログラム。
【請求項４】
前記複数の割り込み要因には優先順位が設けられ、第１の割り込み要因に対応した第１のサブルーチンの実行中に前記第１の割り込み要因よりも優先順位の高い第２の割り込み要因に対応した割り込みが発生した場合、前記第１のサブルーチンの処理を中断して前記第２の割り込み要因に対応した第２のサブルーチンの処理を実行し、その処理が終了した後に、前記第１のサブルーチンの実行を再開することを特徴とする請求項１〜３のいずれかに記載のプログラム。
【請求項５】
前記第１のサブルーチンの処理を中断後、前記第１のサブルーチンを再開するべきアドレスを階層構造のスタック領域に格納し、前記第１のサブルーチンの実行は、前記アドレスから再開されることを特徴とする請求項４に記載のプログラム。
【請求項６】
前記第１のサブルーチンは任意の周波数で実行され、前記第１のサブルーチンの処理を中断後、前記任意の周波数の値を階層構造のデータ領域に格納し、前記第１のサブルーチンの実行は、前記格納された値の前記任意の周波数で再開されることを特徴とする請求項４又は５に記載のプログラム。
【請求項７】
第１の周波数でユーザプログラムを実行する処理と、
前記ユーザプログラムの実行中に、複数の割り込み要因のうち任意の割り込み要因による割り込みが発生した場合、前記第１の周波数を任意の周波数に変更する周波数変更処理と、
前記任意の周波数で前記任意の割り込み要因に対応したサブルーチンを実行するサブルーチン実行処理と、
前記任意の周波数を前記第１の周波数に戻す周波数復帰処理と、
前記第１の周波数で前記ユーザプログラムの実行を再開する処理と、
をコンピュータに実行させるプログラムであって、
前記周波数復帰処理は、前記複数の割り込み要因に対応するそれぞれのサブルーチンの実行後に行われる独立の処理であることを特徴とするプログラム。
【請求項８】
前記周波数変更処理と前記サブルーチン実行処理との間、または、前記周波数復帰処理と前記ユーザプログラムの実行を再開する処理との間に、基準クロック動作を安定させるための待ち時間を得る処理を行うことを特徴とする請求項１又は７に記載のプログラム。
【請求項９】
前記周波数変更処理、および前記周波数復帰処理は、オペレーティング・システム側で行われることを特徴とする請求項１〜８のいずれかに記載のプログラム。
【請求項１０】
請求項１〜９のいずれかに記載のプログラムを搭載したコンピュータを備えたことを特徴とするオペレーティング・システム。
【請求項１１】
請求項１〜９のいずれかに記載のプログラムを高級言語から機械語に翻訳するコンパイラであって、周波数切り替え命令を前記機械語内に挿入することを特徴とするコンパイラ。
【請求項１２】
請求項１〜９のいずれかに記載のプログラムを備えたことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム、オペレーティング・システム、およびコンパイラに関し、特に、電子機器の制御用に内蔵されているマイクロコンピュータの制御用ファームウェア、電子計算機のソフトウェアの省電力化を目的としたプログラム、オペレーティング・システム、およびコンパイラに関するものである。
【背景技術】
【０００２】
近年の電子機器の制御用に内蔵されているマイクロコンピュータや、パーソナルコンピュータなどの電子計算機に内蔵されているマイクロプロセッサでは、機器の消費電力の低減、もしくは動作周波数の外部校正を目的として、動作周波数の切り替え機能が提供されている（例えば、特許文献１参照）。
【０００３】
動作周波数の切り替え機能とは、ある特定の機械語命令（例えば、動作周波数の設定レジスタに対する動作周波数値の書き込みなど）をマイクロコンピュータやマイクロプロセッサが実行する際に、動作に必要となる基本動作クロックの周期を動的に切り替える機能である。
【０００４】
具体的には、動作の低速化を指示する命令（動作周波数設定レジスタに低い周波数値が設定されるなど）が実行された場合には、クロック生成部（ＰＬＬやＤＬＬなどの回路）が新しく設定された動作周波数に合致するクロックを生成する。この作用により、基本動作クロックの周期が延長される。
【０００５】
この周期延長により、マイクロコンピュータ並びにマイクロプロセッサを構成する電子回路には、比較的低い基本動作クロックが供給される。これにより、電子回路を構成しているトランジスタの単位時間あたりのスイッチング回数（CMOS回路における充放電回数）が減少し、消費電力を低減することができる。
【０００６】
一方、動作の高速化を指示する命令（動作周波数設定レジスタに高い周波数値が設定されるなど）が実行された場合には、基本動作クロックの周期が短縮される。この動作クロックの周期短縮により、電子回路に供給される基本動作クロックの周波数が上昇する。これによって、マイクロコンピュータ並びにマイクロプロセッサを構成しているトランジスタの単位時間あたりのスイッチング回数が増加する。従って該当電子回路は高速に動作する一方で、その単位時間当たりの消費電力は上昇する。
【０００７】
命令の実行所要時間は上記トランジスタのスイッチング回数（CMOS回路における充放電時間）によって決定されるので、単位時間当たりのトランジスタのスイッチング回数が増加すれば実質的に演算動作の高速化を達成することができる。
【０００８】
近年のマイクロプロセッサもしくはマイクロコンピュータでは、電子機器に対する省電力化が要求されている。この要求に対しては、以下のような機能が設けられている。例えば、命令を実行する必要の無い時間（アイドル期間中）には、マイクロプロセッサもしくはマイクロコンピュータがＯＳ（オペレーティング・システム）よりアイドル命令を受信する。これが一定期間継続すると、省電力化のため、マイクロプロセッサもしくはマイクロコンピュータの動作クロックを低下させる機能（スリープ／スタンバイ機能）が働く。
【０００９】
スリープ状態になったマイクロプロセッサもしくはマイクロコンピュータは、通常動作速度への復帰を行うため、イベント（外部割込み）もしくはこれに相当するＯＳ（オペレーティング・システム）からの復帰命令の監視を開始する。これを受信した場合には、動作クロックの復帰と共にユーザプログラムの実行を再開し、通常動作状態に復帰する。
【００１０】
これらのマイクロプロセッサもしくはマイクロコンピュータでは、実行対象となるソフトウェアに対して、ソフトウェア製作者が動作速度を任意に制御することは不可能である。このため、電力管理を行うためには、マイクロプロセッサもしくはマイクロコンピュータのハードウェアが提供する動作周波数の制御機能、もしくはオペレーティング・システムの提供する動作周波数の制御機能が用いられる。
【００１１】
特に、電子機器の制御を目的として機器に組み込まれるマイクロコンピュータ、又はマイクロプロセッサでは、制御プログラムの実行に使用できるメモリ空間（メモリ領域）が限定されているため、オペレーティング・システムを使用しない場合が多い。このため、マイクロコンピュータのハードウェアが提供するスリープ機能を利用することのみにより、消費電力の低減が可能である。
【００１２】
【特許文献１】特開２００２−１６９７９０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上記従来のマイクロコンピュータ等と、その制御用プログラムの実行に使用できるメモリ領域が限定されているため、動作周波数を任意に制御することは困難であった。この結果、低速に動作しても差し支えの無いソフトウェアと、高速動作が要求されるソフトウェアとが、通常の動作速度（スリープ／スタンバイ状態以外）で実行される。このため、低消費電力化のための積極的な電力管理が行えないという問題があった。
【００１４】
本発明は上記課題を解決するためになされたもので、制御プログラムの実行に用いられるメモリ領域を小さくすることにより、制御プログラムに積極的な電力管理を行わせ、電子機器の低消費電力化を図ることが可能なプログラム、コンパイラ、およびオペレーティング・システムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明に係るプログラムは、第１の周波数でユーザプログラムを実行する処理と、前記ユーザプログラムの実行中に、複数の割り込み要因のうち任意の割り込み要因による割り込みが発生した場合、前記第１の周波数を任意の周波数に変更する周波数変更処理と、前記任意の周波数で前記任意の割り込み要因に対応したサブルーチンを実行するサブルーチン実行処理と、前記任意の周波数を前記第１の周波数に戻す周波数復帰処理と、前記第１の周波数で前記ユーザプログラムの実行を再開する処理とをコンピュータに実行させるプログラムであって、前記周波数復帰処理は、前記複数の割り込み要因に対応するサブルーチンの実行後に行われる共通の処理であることを特徴とする。本発明のその他の特徴については、以下において詳細に説明する。
【発明の効果】
【００１６】
本発明によれば、制御プログラムの実行に用いられるメモリ領域を小さくすることにより、制御プログラムに積極的な電力管理を行わせ、電子機器の低消費電力化を図ることが可能なプログラム、コンパイラ、およびオペレーティング・システムを得ることができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照しながら本発明の実施の形態について説明する。なお、各図において同一または相当する部分には同一符号を付して、その説明を簡略化ないし省略する。
【００１８】
実施の形態１．
本実施の形態に係るプログラム（ソフトウェア）は、マイクロコンピュータ（またはマイクロプロセッサ）に内蔵されている。このマイクロコンピュータは、組み込み対象機器となるハードウェアに搭載されている。このようなハードウェアを用いた場合の、制御プログラムの動作フローチャートを図１に示す。以下、各処理（ステップ）について説明する。
【００１９】
上記ハードウェアの電源が投入される際、又は、外部リセットスイッチなどにより明示的な初期化動作指示が行われる際には、ハードウェア（Ｈ／Ｗ）の初期化ステップ（Ｓ１）が行われる。次に、マイクロコンピュータのファームウェア（Ｆ／Ｗ）の初期化ステップ（Ｓ２）が行われる。
【００２０】
上記Ｓ２では、後にユーザプログラムで使用される各種判定用情報や定数の設定、受け付けるべき割り込み要因の設定などが行われる。また、ユーザプログラム実行の処理能力を決定する動作周波数情報も設定される。
【００２１】
動作周波数を決定づけるレジスタ（図示しない）には、例えば、定格動作周波数の１／２の周波数（第１の周波数）が設定される。この場合、本来行うべき割り込み処理が開始されるまでは、マイクロコンピュータは定格動作周波数の１／２の周波数で動作する。これにより、定格動作周波数で動作する場合と比較して、マイクロコンピュータを低消費電力で動作させることができる。
【００２２】
次に、上記第１の周波数で、ユーザプログラムの実行ステップ（Ｓ３-１）が行われる。次に、このステップ中に、割り込みが発生したか否かを判定する割り込み発生判定ステップ（Ｓ３−２）が行われる。割り込みが発生していないと判定された場合は、Ｓ３−１に戻り、ユーザプログラムの実行を継続する。割り込みが発生していると判定された場合は、割り込みサブルーチン群の割り込み要因１の判定ステップ（Ｓ４−１）に進む。なお、このステップはソフトウェア、ファームウェアで行われるとは限らず、マイクロコンピュータに内蔵されるハードウェアによって行われてもよい。
【００２３】
次に、Ｓ３−２からＳ４−１のステップに進んだ場合、割り込み要因が１であるか否かを判定する。割り込みの要因が１でないと判定された場合は、割り込み要因２の判定ステップ（Ｓ５−１）に進む。割り込み要因が１であると判定された場合は、動作周波数の退避ステップ（Ｓ４−２）に進む。以下、Ｓ４−１からＳ４−２のステップに進む場合と、Ｓ４−１からＳ５−１のステップに進む場合とについて説明する。
【００２４】
まず、Ｓ４−１からＳ４−２のステップに進む場合について説明する。この場合、マイクロコンピュータの現在の動作周波数情報を退避する処理ステップ（Ｓ４−２）が行われる。このとき、マイクロコンピュータの動作周波数を示すレジスタ情報をワークレジスタ（一時退避領域）に退避させる。これにより、割り込み発生直前までのマイクロコンピュータの動作周波数設定情報（定格動作周波数の１／２）が確実に保存される。この処理ステップでは、マイクロコンピュータの動作周波数の変更が行われていないため、定格動作周波数の１／２の低い周波数で動作する。
【００２５】
上記Ｓ４−２では、これまで実行していたユーザプログラムを再開するためのプログラムのアドレスを、プログラムスタックの最下位（図示しない）に格納する。この操作は、マイクロコンピュータのハードウェア、制御用のファームウェアのどちらで行われても良い。
【００２６】
次に、後に実行されるサブルーチンの実行速度に対応させるため、新たな動作周波数が設定される（Ｓ４−３）。具体的には、サブルーチン実行の動作周波数を決定するレジスタに、動作周波数情報を設定する。ここでは、定格動作周波数の１／２に設定されていた周波数（第１の周波数）が、定格動作周波数の２倍の周波数に変更される。これにより、この後のサブルーチンが実行される際には、新たに設定された周波数により動作する。
【００２７】
次に、割り込み要因１に対応するサブルーチンを実行するステップ（Ｓ４−４）が行われる。ここでは、Ｓ４−３により与えられた新たな動作周波数により、サブルーチンを構成する機械語命令群が実行される。つまり、消費電力は増加してしまうものの、動作周波数が上昇したことで処理能力が向上し、高速に実行される。
【００２８】
その後、Ｓ４−２で退避させた動作周波数情報を、ユーザプログラム（Ｓ３−１）実行時の状態に復帰させる。すなわち、割り込み要因１に関連付けられているサブルーチンの実行後、定格動作周波数の２倍に設定されていた動作周波数を、定格動作周波数の１／２の周波数（第１の周波数）に復帰させる周波数復帰ステップ（Ｓ９）が行われる。
【００２９】
本処理ステップＳ９では、マイクロコンピュータの動作周波数を決定づけるレジスタに対して、Ｓ４−２で退避させた動作周波数情報を復帰させる。これにより、これまで高速に動作していたマイクロプロセッサは、周波数変更処理前の周波数、すなわち定格動作周波数の１／２の周波数（第１の周波数）で動作するようになり、機器の消費電力を低減することができる。
【００３０】
上記Ｓ９の動作周波数の復帰処理により、割り込み処理が完了したものとされる。この結果、ユーザプログラムで実行されていた処理は、スタック領域（図示せず）に退避しておいたスタックポインタの示すアドレス値（割り込みが発生したユーザプログラムの該当番地＋１のアドレス値）に復帰する。この後、ユーザプログラムの実行ステップ（Ｓ３−１）が再開され、継続される。このとき、ユーザプログラムは、定格動作周波数の１／２の周波数で実行される。
【００３１】
次に、Ｓ４−１からＳ５−１のステップ進んだ場合について説明する。Ｓ４−１からＳ５−１のステップ進んだ場合、割り込みの要因が２であるか否かを判定する。割り込み要因が２であると判定された場合は、動作周波数の退避（Ｓ５−２）のステップに進む。この場合、Ｓ４−２〜Ｓ４−４と同様に、動作周波数の退避ステップ（Ｓ５−２）、新たな動作周波数を設定するステップ（Ｓ５−３）、サブルーチンを実行するステップ（Ｓ５−４）が行われる。その後、Ｓ９のステップが行われ、Ｓ３−１に戻る。割り込み要因が２でないと判定された場合は、割り込み要因３の判定ステップ（Ｓ６−１）に進む。
【００３２】
以下同様にして、各割り込み要因に該当すると判定された場合はＳ４−２〜Ｓ４−４と同様の処理が行われ、その後Ｓ９のステップが行われ、Ｓ３−１に戻る。各割り込み要因に該当しないと判定された場合は、次の割り込み要因に該当するか否かを判定するステップ（Ｓ６−１、Ｓ７−１）に進む。
【００３３】
各割り込み要因の判定ステップ（Ｓ４−１、Ｓ５−１、Ｓ６−１、Ｓ７−１）を行った結果、いずれの割り込み要因にも該当しなかった場合は、マイクロコンピュータの現在の動作周波数情報を退避する処理ステップ（Ｓ８−２）が行われる。そして、新たな動作周波数を設定するステップ（Ｓ８−３）、サブルーチンを実行するステップ（Ｓ８−４）が行われる。
【００３４】
上記Ｓ８−２、Ｓ８−３、Ｓ８−４の各ステップは、該当する割り込み要因が、予め定義された割り込み要因と合致しない場合（デフォルト条件時）に行われる処理ステップである。基本的には、Ｓ４−２〜Ｓ４−４の各ステップと同様の処理が行われる。さらにその後、Ｓ９のステップが行われ、Ｓ３−１に戻る。
【００３５】
つまりこのプログラム（制御プログラム）では、ユーザプログラムの実行中に、複数の割り込み要因のうち任意の割り込み要因により割り込みが発生した場合、定格動作周波数の１／２に設定されていた周波数（第１の周波数）を、各割り込み要因に対応するサブルーチンを実行するための周波数に変更する処理が行われる。そして、上記サブルーチンが実行された後は、共通の周波数復帰処理（Ｓ９）により、変更後の周波数を変更前の周波数に戻す処理が行われる。このような構成とすることにより、プログラムが使用するメモリ領域を小さくすることができる。これにより上記プログラムには、動作周波数を動的に切り替える機能を持たせることができる。従って、このプログラムにより、積極的な電力管理を行うことができる。
【００３６】
また、定格動作周波数よりも低い周波数（第１の周波数）でユーザプログラムを実行し、その実行中に割り込みが発生した場合、第１の周波数（動作周波数）を定格動作周波数よりも高い周波数に変更し、サブルーチンを実行するようにした。これにより、ユーザプログラム実行中は、消費電力を小さく抑えることができ、サブルーチンの実行時には、当該サブルーチンを実行するのに必要な周波数を設定することができる。さらに、サブルーチンの実行後には、ユーザプログラム実行時の周波数に確実に復帰させることができる。従って、消費電力の電力管理を効率良く行うことができる。
【００３７】
図２は、図１に示した処理ステップの一部の動作を時系列で表したものである。ここでは、ユーザプログラム実行ステップ（Ｓ３−１）中に、割り込み要因１の割り込みが発生し、これに対応するサブルーチンを実行し、その後ユーザプログラムを再開する動作について説明する。
【００３８】
上記動作は、図１のユーザプログラムの実行ステップ（Ｓ３−１）、割り込み発生判定ステップ（Ｓ３−２）、割り込み要因１の判定ステップ（Ｓ４−１）、動作周波数の退避ステップ（Ｓ４−２）、動作周波数の設定ステップ（Ｓ４−３）、サブルーチンの実行ステップ（Ｓ４−４）、動作周波数情報の復帰ステップ（Ｓ９）、さらに、ユーザプログラムの実行ステップ（Ｓ３−１）が再開される一連の動作を示している。
【００３９】
図２において、Ｓ３−１の実行ステップを開始した時間を０として、時刻０〜ｔ１（ステップＳ３−１）の期間ＴＳ３−１、ｔ１〜ｔ２（ステップＳ４−１）の期間ＴＳ４−１、ｔ２〜ｔ３（ステップＳ４−２）の期間ＴＳ４−２、ｔ３〜ｔ４（ステップＳ４−３）の期間ＴＳ４−３、ｔ４〜ｔ５（ステップＳ４−４）の期間ＴＳ４−４、ｔ５〜ｔ６（ステップＳ９）の期間ＴＳ９、ｔ６以降（ステップＳ３−１）の期間ＴＳ３−１の各期間に対応する基本動作クロックが示されている。
【００４０】
実行期間ＴＳ３−１、ＴＳ４−１、ＴＳ４−２、ＴＳ４−３では、プログラムは定格動作周波数の１／２の周波数で動作する。このため、基本動作クロックの周期は、定格動作周波数で動作する場合の２倍となっている。これに対して実行期間ＴＳ４−４、ＴＳ９では、プログラムは定格動作周波数の２倍の周波数で動作する。このため、基本動作クロックの周期は、定格動作周波数で動作する場合の１／２となっている。従って、サブルーチン実行ステップ（Ｓ４−４）、動作周波数情報の復帰ステップ（Ｓ９）の実行期間での基本動作クロック周期は、その他の実行期間の基本動作クロック周期の１／４となっている。
【００４１】
このようにして、マイクロコンピュータの動作速度を、プログラムを構成するサブルーチン単位で変化させることができ、サブルーチンの実行完了段階において、サブルーチンの実行以前の状態に復帰させることができる。従って、積極的な電力管理を行うことが可能となる。
【００４２】
実施の形態２．
本実施の形態に係るプログラムについて説明する。ここでは、実施の形態１、２と異なる点を中心に説明する。実施の形態１では、ユーザプログラムを実行する際に、単一の割り込みが発生する場合について説明した。これに対して本実施の形態２では、ユーザプログラムを実行する際に、多重割り込みが発生した場合について説明する。基本的な動作フロー（図１参照）については、実施の形態１と同様であるので説明を省略する。
【００４３】
図３は、プログラムの処理ステップの動作の一部を、時系列で表したものである。ここでは、ユーザプログラム実行ステップ（Ｓ３−１）中に、割り込み要因３の割り込みが発生し、その後に別の割り込み要因１の割り込みが発生した場合、すなわち二重の割り込みが発生した場合の動作を示している。
【００４４】
Ｓ３−１の実行ステップを開始した時間を０とすると、時刻０〜ｔ０（ステップＳ３−１）の期間ＴＳ３−１、ｔ０〜ｔ１（ステップＳ６−１、Ｓ６−２、Ｓ６−３）の実行期間ＴＳ６−１、ＴＳ６−２、ＴＳ６−３、ｔ１〜ｔ２（ステップＳ６−４）の期間ＴＳ６−４、ｔ２〜ｔ３（ステップＳ４−１、Ｓ４−２、Ｓ４−３）の期間ＴＳ４−１、ＴＳ４−２、ＴＳ４−３、時刻ｔ３〜ｔ４（ステップＳ４−４、Ｓ９）の期間ＴＳ４−４、ＴＳ９、時刻ｔ４〜ｔ５（ステップＳ６−４、Ｓ９）の期間ＴＳ６−４、ＴＳ９、時刻ｔ５以降（ステップＳ３−１）の期間ＴＳ３−１の各期間に対応する基本動作クロックが示されている。
【００４５】
上記多重割り込み処理の動作において、割り込み要因１の割り込みレベルは、割り込み要因３の割り込みレベルよりも高く設定されている。このため、割り込み要因３によるサブルーチンの実行処理（Ｓ６−４）を中断させて、割り込み要因１によるサブルーチンの実行処理（Ｓ４−４）を行うことができる。
【００４６】
ここで、多重割り込み処理を行う際、プログラムを再開するべきアドレスの情報、および動作周波数の値を格納する必要がある。これは、スタックポインタにより行われる。以下、このスタックポインタの動作について説明する。
【００４７】
図４に、ユーザプログラムを再開するアドレス情報を格納するためのプログラムスタックの構造を示す。この構造は、プログラムに対するスタック領域１４を有している。最初の割り込みによってアドレスポインタが退避された場合、実行中のユーザプログラムの再開するべきアドレスを示すポインタは、格納場所１５に格納される。２番目の割り込みによってアドレス情報が退避された場合、実行中のプログラムの再開アドレスを示すポインタは、格納場所１６に格納される。すなわち、実行中のサブルーチンの処理を中断した後、中断したサブルーチンを再開するべきアドレスが、階層構造のスタック領域の格納場所１６に格納される。これにより、中断したサブルーチンは、格納場所１６に格納されたアドレスから再開される。
【００４８】
また、図５に、動作周波数の値を復帰させる際の周波数の値を格納するためのユーザデータスタックの構造を示す。この構造は、図４に示したプログラムスタックの構造と同様の構造を有し、動作周波数情報の退避を階層的に行うことができる。この構造は、動作周波数情報を格納するためのスタック領域１７を有している。最初の割り込みによって動作周波数情報が退避された場合、その情報は格納場所１８に格納される。２番目の割り込みによって動作周波数情報が退避された場合、その情報は格納場所１９に格納される。すなわち、実行中のサブルーチンの処理を中断した後、中断したサブルーチンを再開する際に用いられる周波数の値が、階層構造のデータ領域の格納場所１９に格納される。これにより、中断したサブルーチンは、格納場所１９に格納された値の周波数で再開される。
【００４９】
次に、図３に示した多重割り込み処理の動作フローについて、図１を援用して説明する。まず、図１に示したＳ１、Ｓ２の動作が、実施の形態１と同様にして行われる。次に、ユーザプログラム実行ステップ（Ｓ３−１）が行われる。このステップは、タイマオーバーフローや外部割込みなどの各種割り込み（処理ステップＳ４−１、Ｓ５−１、Ｓ６−１、Ｓ７−１など）が発生するまでの期間は、繰り返し実行される。この処理ステップは、処理ステップＳ２で設定された動作周波数情報（動作周波数が低い低消費電力モード）に基づいて動作している。
【００５０】
ここで割り込み要因３に対応する割り込みが発生すると、割り込み要因判定ステップ（Ｓ６−１）が行われる。このとき、割り込み禁止フラグが設定される。この割り込み禁止フラグの設定は、一般的にハードウェアにより行われる。この割り込み禁止フラグが設定されると、これ以降に発生した割り込みは、割り込みキューに蓄えられ、再度割り込み解除状態となるまでの期間は実行されない。
【００５１】
このとき、割り込みが発生した場合のスタックポインタ（割り込み処理完了後の復帰先を示すアドレスポインタの格納先）は、図４に示した格納場所１５の位置となる。その内容は、割り込み直前まで実行されていたユーザプログラムのアドレス＋１となる。
【００５２】
次に、動作周波数情報の退避処理（Ｓ６−２）が行われる。この処理についても処理ステップＳ２で設定された動作周波数（動作周波数が低い低消費電力モード）で動作する。なお、本処理ステップにおいても、割り込み禁止フラグの解除は行わない。このとき、退避された動作周波数の値は、図５に示した格納場所１８の位置に格納される。
【００５３】
次に、新しい動作周波数情報の設定ステップ（Ｓ６−３）が行われる。この処理ステップも、処理ステップＳ２で設定された動作周波数（動作周波数が低い低消費電力モード）で動作する。
【００５４】
本処理ステップでは、次に行われる処理ステップＳ６−４（割り込み要因３に関連づけられたサブルーチンの実行）の動作周波数として、定格動作周波数（動作周波数が中程度の定格消費電力モード）が設定される。ここで設定された動作周波数情報は、本処理ステップ完了後から有効となる。なお、本処理ステップにおいても、割り込み禁止フラグの解除は行わない。
【００５５】
次に、処理ステップＳ６−４、すなわち割り込み要因３に関連づけられたサブルーチンの実行が行われる。このとき、本処理ステップでは、マイクロコンピュータは前処理ステップＳ６−３で設定された定格動作周波数（動作周波数が中程度の定格消費電力モード）で動作する。
【００５６】
ここで、本処理ステップの動作中に、多重割り込みに対応するため、本処理ステップ開始時に、割り込み禁止フラグの解除を行う。上記解除は、アセンブラ（機械語命令）により、ソフトウェア的に行うことが可能である。この解除により、割り込み要因３よりも高い優先順位を持つ割り込みが可能な状態となる。
【００５７】
次に、任意のプログラムコード（サブルーチンとして定義されているアセンブラプログラム群）が実行される。ここで、割り込み要因３と関連付けられているサブルーチンの実行期間中に、割り込み要因３よりも高い優先順位を持つ、割り込み要因１が発生した場合の動作について説明する。
【００５８】
図３に示したＴＳ６−４の期間中に、割り込み要因１による割り込みが発生したとする。この場合には、実行中のＳ６−４のプログラムアドレス＋１の値が、図４に示した格納場所１６に格納される。これは、格納場所１５が割り込み要因判定ステップ（Ｓ６−１）で既に使用されているため、その上段に積み重ねられる（スタックされる）ためである。
【００５９】
上記アドレスの値の格納後、処理ステップは、Ｓ４−２に移行する。そして、現在設定されているマイクロコンピュータの動作周波数情報を退避させる処理を行う。具体的には、現在当該レジスタに設定されている値を図５に示した格納場所１９に格納される。これは、格納場所１８が動作周波数の退避ステップ（Ｓ６−２）で既に使用されているため、その上段に積み重ねられる（スタックされる）ためである。
【００６０】
図５に示したこの動作周波数の情報を格納する構造（ユーザデータスタックの構造）は、プログラムスタックの構造（図４参照）と同様に、ファースト・イン・ラスト・アウトの構造である。つまり、図５の格納場所１８に、先に格納された動作周波数情報よりも、その後に格納場所１９の位置に格納された動作周波数情報の方が、先に取り出される仕組みとなっている。
【００６１】
この動作周波数の退避処理（Ｓ４−２）についても、定格動作周波数（中程度の消費電力モード）で動作する。また、割り込み禁止フラグの解除は行わない。
【００６２】
次に、新しい動作周波数の設定処理（Ｓ４−３）が行われる。ここでは、後に行われる処理の動作周波数が、定格動作周波数より高い高消費電力モードで動作するため、定格動作周波数よりも高い値が設定される。本処理ステップの実行期間中は、これまでどおり動作周波数が中程度の定格消費電力モード）で動作する。また、割り込み禁止フラグの解除も行われない。
【００６３】
次に、Ｓ４−４の処理が行われる。本処理ステップの開始時に、割り込み禁止フラグの解除を行う。本ステップの処理（割り込み要因１に関連づけられたサブルーチンの実行）では、前処理ステップ（Ｓ４−３）で設定された動作周波数で処理が行われる。
【００６４】
なお、本実施の形態２では、多重割り込みが起こった場合の作用を説明することが目的であるので、これ以上の割り込みが発生した場合の動作については、説明を省略する。
【００６５】
次に、動作周波数の復帰処理ステップ（Ｓ９）が行われる。ここでは、図５の格納場所１９の位置に退避されている動作周波数情報を、マイクロコンピュータの動作周波数を決定づけるレジスタ（図示せず）に格納する。さらに、参照アドレスポインタを加算する処理を行う（次の参照で図５の格納場所１８の位置が正しく参照されるように処理をしておく）。
【００６６】
本処理ステップ（Ｓ９）は、Ｓ４−４の処理と同様に、動作周波数が高い高消費電力モードで動作する。本処理ステップより後の処理ステップでは、図５の格納場所１９に格納されていた周波数の値が用いられ、動作周波数が中程度の定格消費電力モードで動作するようになる。
【００６７】
なお、本処理ステップ（Ｓ９）により、割り込み要因１に関連づけられた一連の割り込み処理は全て完了する。このため、プログラムスタックの操作を行い、図４の格納場所１６に格納されているアドレス情報をプログラムカウンタにコピーし、参照アドレスポインタを加算する処理を行う（次の参照で図４の格納場所１５の位置が正しく参照されるように処理をしておく）。
【００６８】
上記割り込み復帰処理により、割り込み要因１に関連付けられた内容を処理していたマイクロコンピュータは、割り込み発生前に処理を行っていたＳ６−４（割り込み要因３に対応したサブルーチン処理）に復帰する。ここで、割り込み要因３の処理で使用していた基本動作クロック情報も正しく復帰されている。従って、マイクロコンピュータの消費電力を意図どおりに減少させることができる。
【００６９】
処理ステップＳ６−４の処理を再開したマイクロコンピュータは、当該サブルーチンの処理を、定義されている機械語プログラム列の内容に従って行う。そして、処理ステップＳ６−４に定義されている命令を全て実行した後に、処理ステップＳ９に移行する。
【００７０】
次に、周波数復帰処理ステップ（Ｓ９）が行われる。図５の格納場所１８に退避されているマイクロコンピュータの動作周波数を決定づける周波数情報を、当該レジスタに復帰させる処理を行う。このとき、上記周波数情報の値は、割り込み要因３の実行前に行っていたユーザプログラム実行ステップ（Ｓ３−１）で使用していた周波数（動作周波数が低い低消費電力モード）の値である。
【００７１】
従って、図５の格納場所１８の動作周波数情報を復帰させることにより、以前に実行していたコード（ユーザプログラムの実行）を正しく、かつ、意図している速度で処理を行わせる（再開させる）ことが可能である。なお、本処理ステップ（Ｓ９）の動作速度は、Ｓ６−４と同様に、動作周波数が中程度となる定格消費電力モードで動作する。
【００７２】
上記Ｓ９の動作周波数情報の復帰処理が完了すると、マイクロコンピュータは新しく設定された動作周波数に従って動作を開始する。具体的には、動作周波数が低い低消費電力モードで動作する。これは割り込み要因３の発生前に行っていた処理速度と全く同じ内容になっている。
【００７３】
本実施の形態２では、図１に示した割り込み要因に優先順位が設けられ、特定の割り込み要因に対応したサブルーチンの実行中に、その割り込み要因よりも優先順位の高い第２の割り込み要因に対応した割り込み（多重割り込み）が発生した場合は、特定の割り込み要因に対応したサブルーチンの実行が中断される。そして、優先順位の高い割り込み要因に対応したサブルーチンの処理を実行し、その処理が終了した後に、中断されていたサブルーチンの実行が再開される。このとき、プログラムの再開をするべきアドレス、および再開する際の動作周波数の情報を、それぞれスタック構造の領域に格納することにより、多重割り込みが発生した場合にも、実施の形態１と同様の効果を得ることができる。
【００７４】
以上説明したように、本実施の形態では、多重割り込みが行われた場合であっても、積極的な電力管理を行わせることが可能となる。
【００７５】
なお、本実施の形態２では、２重の割り込みが発生した場合の動作について説明した。しかし、図４、図５に示したスタック構造において、スタック可能な格納場所を増加させることにより、２重以上の割り込みに対しても正しく動作させることが可能である。
【００７６】
実施の形態３．
本実施の形態に係るプログラムについて説明する。本実施の形態では、実施の形態１、２と異なる点を中心に説明する。実施の形態１、２では、動作周波数の変更時に必要な発振器の周波数安定時間（ＰＬＬ＝Phase Locked Loop型発振器やＤＬＬ＝Delay Locked Loopであるならば再ロック時間）の期間については何ら処理を設けていない場合について説明した。このため、動作周波数（基準クロック）の変動期間中はマイクロコンピュータの動作が不安定になる可能性が高い。
【００７７】
図６は、ＰＬＬもしくはＤＬＬが発振周波数の変更を行う際の動作を示したものである。図６の２０は、発振周波数変更前の（低周波＝安定）の波形を示し、２２は発振周波数変更後の（高周波＝安定）の波形を示す。図６の２１は、２０と２２の間、すなわち発振周波数変更前と変更後の間の期間、すなわち再ロック期間の発振周波数の波形を示している。
【００７８】
図６ではＰＬＬもしくはＤＬＬなどの発振器は順にその発振周波数の変動を行うイメージを示しているが、実際の発振器ではこのような滑らかな変動になるとは限らない（フィードバック回路などの特性に依存する）。
【００７９】
本実施の形態３では、図７に示すように、処理ステップＳ４−３とＳ４−４との間、処理ステップＳ９とＳ３−１との間に、基準クロックの動作を安定させる待ち時間を得るための処理（Ｓ１０）、例えば、ＮＯＰ（No Operation）命令の処理ステップを挿入するようにした。すなわち、各割り込み要因に対応した周波数変更処理とそのサブルーチン実行処理との間、および周波数復帰処理とユーザプログラムの実行を再開する処理との間に、基準クロック動作を安定させる待ち時間を得るための処理を行う。その他の構成については、実施の形態１と同様である。
【００８０】
上記ＮＯＰ命令の挿入回数は、マイクロコンピュータで使用している発振器（ＰＬＬやＤＬＬなど）において、動作周波数を変動させた場合の安定時間（安定するまでのクロック数）に比例して挿入すればよい。この再ロック時間は、使用している発振器（ＰＬＬやＤＬＬなど）の回路の特性とその変動量により定量的に求めることが可能である。
【００８１】
図７に示した例では、基準クロック動作を安定させるための待ち時間を得る処理（Ｓ１０）は、周波数変更処理（Ｓ４−３、Ｓ５−３、Ｓ６−３、Ｓ７−３、Ｓ８−３）と各周波数変更処理に対応するサブルーチン実行処理との間、および周波数復帰処理（Ｓ９）とユーザプログラムの実行（Ｓ３−１）を再開する処理との間の全てに挿入されるようにした。しかし、上記いずれかに挿入されるようにしても、それぞれ独立に効果を有する。
【００８２】
従って、マイクロコンピュータにより安定した動作を求める場合には、上記特性より算出された期間（安定するまでのクロック数）で得られたサイクルに相当するＮＯＰ命令を挿入する。これにより、動作周波数を動的に切り替えた場合であっても、マイクロコンピュータを安定して動作させることが可能となる。
【００８３】
具体的には、ＲＩＳＣ型のマイクロコンピュータでは、ＮＯＰ命令の実行サイクルを１命令／１サイクル（１クロック）とみなすことができる。従って、上記特性により得られたＰＬＬ並びにＤＬＬなどの発振器の再ロック期間に相当するサイクル数だけ挿入すれば実現できる。
【００８４】
また、ＣＩＳＣ型のマイクロコンピュータでは、ＮＯＰ命令の処理に要する実行サイクル数で上記特性より得られたＰＬＬ並びにＤＬＬなどの発振器の再ロック期間に相当するサイクル数を除することで、挿入すべきＮＯＰ命令数を算出することが可能である。
【００８５】
本実施の形態３によれば、ＮＯＰ命令の挿入により、マイクロコンピュータの基準動作クロックが不安定な期間に、本来の処理を行わせることを回避できる。これにより、実施の形態１、２の効果に加えて、マイクロコンピュータの動作の安定性を高くすることができる。
【００８６】
実施の形態４．
本実施の形態に係るプログラムの動作フローを図８に示す。本実施の形態では、実施の形態１〜３と異なる点を中心に説明する。本実施の形態４に係るプログラムは、実施の形態１〜３に示した各割り込み要因を各分岐条件に分け、それぞれの分岐条件に対応すると判定した場合に実施の形態１に示したフローと同様の処理（動作周波数の退避、動作周波数の設定、サブルーチン実行）を行うようにしたものである。そして、各サブルーチンの実行後、動作周波数の復帰処理は、それぞれのサブルーチンの実行後に、サブルーチンに付随して、独立して行われるようにしたものである。
【００８７】
まず、実施の形態１で示した動作フローと同様にＳ１、Ｓ２の処理ステップが行われ、その後、メインルーチンの処理が行われる。Ｓ２の処理ステップ後に前処理ステップ（Ｓ３）が行われ、さらに分岐条件１の判定ステップ（Ｓ４−１）が行われる。分岐条件１に該当すると判定された場合は、動作周波数の退避（Ｓ４−２）、動作周波数の設定（Ｓ４−３）、サブルーチン実行（Ｓ４−４）の各ステップが行われ、その後、そのサブルーチンに付随した独立の動作周波数復帰ステップ（Ｓ９）が行われる。その後、後処理（Ｓ８）が行われる。
【００８８】
分岐条件１に該当しない場合は、いずれかの分岐条件に該当するまで分岐条件の判定処理を行い、分岐条件１〜分岐条件ｎ−１のいずれにも該当しない場合には、後処理（Ｓ８）が行われる。いずれかの分岐条件に該当した場合は、動作周波数の退避、動作周波数の設定、サブルーチン実行の各ステップが行われ、その後に、それぞれのサブルーチンに付随した動作周波数の復帰処理フロー（Ｓ９）が行われる。その後、後処理（Ｓ８）が行われる。
【００８９】
実施の形態１では、動作周波数の復帰処理（Ｓ９）は、複数の割り込み要因に対応するサブルーチンの実行後に行われる共通の処理である（図１参照）。これに対して、本実施の形態４では動作周波数の復帰処理は、複数の割り込み要因に対応するそれぞれのサブルーチンの実行後に、個々のサブルーチンに付随して、独立して行われるようにしたものである。
【００９０】
上記構成とすれば、プログラムの総ステップ数（プログラムの大きさ）は実施の形態１で示したプログラムよりも多くなる。しかし、処理ステップＳ９で示したプログラムを共用化するためのジャンプ命令（プログラムの実行アドレスを示すカウンタの加減算処理）を省略でき、プログラムの応答性を向上させることができる。
【００９１】
また、実施の形態３の動作フローに示した内容と組み合わせるようにしても良い。すなわち、図７に示した動作フローにおいて、各サブルーチンの実行後にそれぞれ独立して付随する動作周波数の復帰処理を行うことにより、プログラムの応答性を向上させることができる。
【００９２】
実施の形態５．
実施の形態１〜４では、マイクロコンピュータに組み込まれたプログラムの動作について説明した。本実施の形態５では、これをオペレーティング・システムレベルで行う例について説明する。
【００９３】
具体的には、割り込み要因などにより実行される各サブルーチンの先頭に、当該サブルーチンを実行する際に使用する、マイクロコンピュータの動作周波数情報のみを格納しておく。
【００９４】
図示しないが、オペレーティング・システムが割り込みを検出した場合、実施の形態１〜４において各サブルーチン単位で行っていた動作周波数の退避処理（例えば、図１の処理ステップＳ４−２、Ｓ５−２、Ｓ６−２、Ｓ７−２、Ｓ８−２）を、オペレーティング・システムが自動的に行う（この退避すべき動作周波数情報の格納先並びに制御についてもオペレーティング・システムがコントロールするものとする）ようにする。
【００９５】
上記オペレーティング・システムによる動作周波数の退避処理が完了すると、処理を各サブルーチンの実行に渡す。各サブルーチンの先頭には、当該サブルーチンを実行する際に用いられる動作周波数の設定命令が格納されている。よって当該サブルーチンを実行することにより、自動的に動作周波数が切り替わることになる。
【００９６】
上記サブルーチンの実行が完了すると、動作周波数の復帰処理が必要となるが、これをオペレーティング・システム側で自動的に復帰させる必要が生ずる。
【００９７】
この復帰処理の実行タイミングについても、割り込み処理の解除（完了）に伴うイベントをオペレーティング・システムが検知できるため、同イベントを検知した際には、退避しておいた動作周波数情報を復帰させるようにすれば良い。具体的な復帰方法並びに効果については実施の形態１〜４と同様である。
【００９８】
すなわち、本実施の形態５は、実施の形態１〜４で示した周波数変更処理、周波数復帰処理をオペレーティング・システム側で行うようにしたものである。そして、このオペレーティング・システムに実施の形態１〜４で示したプログラムを搭載したコンピュータを備えることにより、そのシステム上で、実施の形態１〜４で示した効果をと同様の効果を得ることができる。また、実施の形態１〜４で示したプログラムを備えた電子機器であっても、実施の形態１〜４で示した効果と同様の効果を得ることができる。
【００９９】
本実施の形態５によれば、オペレーティング・システム側で実行中のコードで使用されている動作周波数の退避と復帰処理を行うことができる。このため、各サブルーチン側のコード量を減少させることができる。また、実施の形態２と同様に、多重割り込みにも対応させることができる。
【０１００】
実施の形態６.
実施の形態１〜４では、マイクロコンピュータとその組み込みプログラム（主として機械語命令）の具体的な動作と開発技法（プログラミング技法）について説明した。しかし、高級言語（Ｃ言語やＢａｓｉｃ言語など）を用いて開発する場合には、本技法を適用することは非常に困難である。
【０１０１】
よって高級言語プログラムを機械語プログラムに翻訳するためのコンパイラにおいて処理を挿入することで、実施の形態１〜５と同等の効果を奏することが可能となる。
【０１０２】
具体的には、サブルーチンを構成する関数単位などでプログラムの実行速度を規定する命令を挿入もしくは変更できる機能をプログラム開発者（コンパイラの利用者）に提供することで実現可能となる。
【０１０３】
但し、実際の処理では、各割り込み条件に関連づけられたサブルーチンの実行に要する総クロック数が、サブルーチンの実行前後に行われる動作周波数の退避と設定処理に要する総クロック数を上回らないと効果がない。
【０１０４】
従ってコンパイラは、高級言語で記述された各サブルーチンを機械語（アセンブラ）に翻訳した後、各サブルーチンの実行に必要なクロック数を、使用するマイクロコンピュータ（もしくはマイクロプロセッサ）の構成形式（ＲＩＳＣもしくはＣＩＳＣ）と処理能力（各命令の実行に必要なサイクル数）を用いて算出する処理を行う。
【０１０５】
この算出結果が、機械語命令に翻訳されたサブルーチンの実行前後に行われる動作周波数の退避と復帰処理に要するクロック数を上回っていれば、処理能力の改善もしくは低消費電力化の効果があるとみなされる。そして、サブルーチン実行前には、動作周波数の待避並びに新しい動作周波数の設定命令を行う。また、サブルーチン実行後には、動作周波数の復帰を行う機械語命令を自動挿入する。
【０１０６】
一方、上記算出結果が、機械語命令に翻訳されたサブルーチンの実行前後に行われる動作周波数の待避と復帰処理に要するクロック数を下回っていれば、処理能力の改善もしくは低消費電力化の効果がないものとみなして、利用者（プログラム開発者）に対してエラーメッセージなどを通知すると共に、当該命令列の挿入を行わない。
【０１０７】
すなわち、本実施の形態６で示したコンパイラは、実施の形態１〜４のいずれかに記載のプログラムを高級言語から機械語に翻訳する際、実際の処理で処理能力の改善もしくは低消費電力化の効果があるとみなされた場合に、動作周波数を変更する処理、および周波数を復帰させる処理の周波数切り替え命令を機械語内に挿入することができる。
【０１０８】
本実施の形態６によれば、サブルーチン単位で動作周波数を変動させる場合でも、常に処理能力並びに消費電力を最適に保つことが可能となる。
【図面の簡単な説明】
【０１０９】
【図１】実施の形態１、２に係るプログラムの動作フローチャートを示す図。
【図２】実施の形態１に係るプログラムの処理ステップを時系列で示す図。
【図３】実施の形態２に係るプログラムの処理ステップを時系列で示す図。
【図４】プログラムスタック構造を示す図。
【図５】ユーザデータスタック構造を示す図。
【図６】ＰＬＬまたはＤＬＬが発振周波数の変更を行う際の波形を示す図。
【図７】実施の形態３に係るプログラムの動作フローチャートを示す図。
【図８】実施の形態４に係るプログラムの動作フローチャートを示す図。
【符号の説明】
【０１１０】
Ｓ１  Ｈ／Ｗ初期化ステップ、Ｓ２  Ｆ／Ｗ初期化ステップ、Ｓ３−１  ユーザプログラム実行ステップ、Ｓ４−１  割り込み要因１の判定ステップ、Ｓ４−２  動作周波数の退避ステップ、Ｓ４−３  動作周波数設定ステップ、Ｓ４−４  サブルーチン実行ステップ、Ｓ９  動作周波数復帰ステップ、Ｓ１０  動作周波数安定待ちステップ、１４  アドレス情報のスタック領域、１５、１６  （アドレス情報の）格納場所、１７  動作周波数情報のスタック領域、１８、１９  （周波数情報の）格納場所。
【図１】
2007164672.tif 000003
【図２】
2007164672.tif 000004
【図３】
2007164672.tif 000005
【図４】
2007164672.tif 000006
【図５】
2007164672.tif 000007
【図６】
2007164672.tif 000008
【図７】
2007164672.tif 000009
【図８】
2007164672.tif 000010