"プロセッサで実行されるプログラム中の関数が割り当てられ、通常状態と省電力状態の電力制御状態をもつ複数のメモリ領域のうち、第1のメモリ領域に配置される第1の関数の実行時、第2のメモリ領域に配置される第2の関数が呼び出される直前に、前記第1のメモリ領域を前記省電力状態、前記第2のメモリ領域を前記通常状態とするように、前記プロセッサが前記複数のメモリ領域の電力制御状態を制御することを特徴とする電力制御方法。前記第2の関数から前記第1の関数へ復帰する直前に、前記第1のメモリ領域を前記通常状態とし、前記第2の関数から前記第1の関数へ復帰した直後に、前記第2のメモリ領域を前記省電力状態とするように、前記プロセッサが前記複数のメモリ領域の電力制御状態を制御することを特徴とする請求項1に記載の電力制御方法。前記第1の関数及び前記第1のメモリ領域が複数存在する場合に、前記第2の関数から前記第1の関数へ復帰する直前に、全ての前記第1のメモリ領域を前記通常状態とし、前記第2の関数から前記第1の関数へ復帰した直後に、複数の前記第1のメモリ領域のうち復帰先となるメモリ領域以外、及び前記第2のメモリ領域を前記省電力状態とするように、前記プロセッサが前記複数のメモリ領域の電力制御状態を制御することを特徴とする請求項1または2に記載の電力制御方法。前記第1の関数において、前記第2の関数の呼び出し命令の直前に、前記第1のメモリ領域を前記省電力状態、前記第2のメモリ領域を前記通常状態とする命令が記述されていることを特徴とする請求項1乃至3の何れか一項に記載の電力制御方法。前記第1の関数において、前記第2の関数の呼び出し命令の直後に、前記第2のメモリ領域を前記省電力状態とする命令が記述されていることを特徴とする請求項1乃至4の何れか一項に記載の電力制御方法。プロセッサと、前記プロセッサで実行されるプログラム中の関数が割り当てられ、通常状態と省電力状態の電力制御状態をもつ複数のメモリ領域と、を有し、前記プロセッサは、前記複数のメモリ領域のうち、第1のメモリ領域に配置される第1の関数の実行時、第2のメモリ領域に配置される第2の関数が呼び出される直前に、前記第1のメモリ領域を前記省電力状態とすることを特徴とする電子装置。プロセッサで実行されるプログラム中の関数が割り当てられ、通常状態と省電力状態の電力制御状態をもつ複数のメモリ領域のうち、第1のメモリ領域に配置される第1の関数の実行時、第2のメモリ領域に配置される第2の関数が呼び出される直前に、前記第1のメモリ領域を前記省電力状態、前記第2のメモリ領域を前記通常状態とする、処理をコンピュータに実行させるプログラム。通常状態と省電力状態の電力制御状態をもつ複数のメモリ領域の前記電力制御状態を制御するプログラムの生成方法において、コンピュータが、プログラム中の関数の前記複数のメモリ領域への割り当てを決定し、前記複数のメモリ領域のうち、第1のメモリ領域に配置される第1の関数において、第2のメモリ領域に配置される第2の関数の呼び出し命令の直前に、前記第1のメモリ領域を前記省電力状態、前記第2のメモリ領域を前記通常状態とする命令を挿入する、ことを特徴とするプログラムの生成方法。前記プログラムを1または複数の関数を含む複数の分割部に分割し、前記複数の分割部のうち、再帰部となる関数群をさらに分割する複数の分割案を作成し、前記複数の分割案から、前記複数のメモリ領域の残り容量に応じて採用する分割案を選択し、選択した前記分割案をもとに分割した前記再帰部と、前記再帰部以外の分割部とを配置するメモリ領域を指定するメモリマップを作成することを特徴とする請求項8に記載のプログラムの生成方法。前記複数の分割部のうち、前記メモリ領域に割り当てていないコードサイズが大きい分割部から、前記割り当てを決定していくことを特徴とする請求項9に記載のプログラムの生成方法。前記複数の分割案のそれぞれに応じて前記再帰部を分割したときに得られる各関数群のコードサイズを含むテーブルを作成し、前記テーブルを参照し、前記複数のメモリ領域のそれぞれの残り容量と、前記コードサイズに応じて、前記複数の分割案から、前記採用する分割案を選択することを特徴とする請求項9または10に記載のプログラムの生成方法。しかし、従来の手法では、プログラムの構造によっては、省電力にできるメモリ領域が制限され、消費電力の削減効果が減少する場合があった。たとえば、利用頻度の高い命令群を常時電力が供給されるメモリバンクへ配置する手法では、利用頻度の低い命令群は省電力状態と通常状態の電力制御が行われるメモリバンクに配置される。この手法では、ある関数の実行のために一度、省電力状態から通常状態としたメモリバンクはその関数の実行が完了するまでは通常状態とされる。そのため、ある関数の実行時に別のメモリバンクに配置されている関数を呼び出して実行している間も、呼び出し元の関数が配置されているメモリバンクは通常状態のままである。したがって、このような呼び出し関係の多いプログラムでは、十分に消費電力の削減を行うことが難しかった。発明の一観点によれば、以下のような電力制御方法が提供される。この電力制御方法は、プロセッサで実行されるプログラム中の関数が割り当てられ、通常状態と省電力状態の電力制御状態をもつ複数のメモリ領域のうち、第1のメモリ領域に配置される第1の関数の実行時、第2のメモリ領域に配置される第2の関数が呼び出される直前に、前記第1のメモリ領域を前記省電力状態、前記第2のメモリ領域を前記通常状態とするように、前記プロセッサが前記複数のメモリ領域の電力制御状態を制御する。また、発明の一観点によれば、以下のようなプログラムの生成方法が提供される。このプログラムの生成方法は、通常状態と省電力状態の電力制御状態をもつ複数のメモリ領域の前記電力制御状態を制御するプログラムを生成するものであり、コンピュータが、プログラム中の関数の前記複数のメモリ領域への割り当てを決定し、前記複数のメモリ領域のうち、第1のメモリ領域に配置される第1の関数において、第2のメモリ領域に配置される第2の関数の呼び出し命令の直前に、前記第1のメモリ領域を前記省電力状態、前記第2のメモリ領域を前記通常状態とする命令を挿入する。開示の電力制御方法、電子装置、プログラム及びプログラムの生成方法によれば、メモリによる消費電力を削減することができる。以下、本発明の実施の形態を、図面を参照しつつ説明する。第1の実施の形態図1は、第1の実施の形態の電力制御方法及び電子装置の一例を示す図である。第1の実施の形態の電力制御方法は、図1に示すような電子装置1で実行される。電子装置1は、プロセッサ2と複数のメモリ領域3a,3bを有している。各メモリ領域3a,3bには、プロセッサ2で実行されるプログラム中の関数が割り当てられている。ここで、メモリ領域3aに配置されている関数faは、メモリ領域3bに配置されている関数fbへの呼び出し命令を含むものとする。このような関数fa,fbを含むプログラムを実行する際、プロセッサ2は、たとえば、図1のフローチャートに示されているような電力制御を実行する。なお、メモリ領域3a,3bの電力制御状態には、通常状態と省電力状態とがある。通常状態は、たとえば、メモリ領域3a,3bへのライトやリードが行われる際の電力制御状態であり、省電力状態は、たとえば、メモリ領域3a,3bに記憶されている内容を保持するための、通常状態よりも低い電圧が印加されている状態である。関数faの実行時、メモリ領域3aの電力制御状態は通常状態、メモリ領域3bの電力制御状態は省電力状態になっているものとする。関数faの実行が開始されると、プロセッサ2は、関数fbの呼び出し命令の直前で、メモリ領域3aを省電力状態とし、メモリ領域3bを通常状態に遷移させるステップS1。関数fbの実行時は、関数faの処理は中断されているため、メモリ領域3aを省電力状態とすることで、電子装置1の消費電力を削減することができる。関数faの実行時において、関数fbへの呼び出し命令が実行されるとステップS2、通常状態となっているメモリ領域3bに割り当てられている関数fbの実行が開始されるステップS3。その後、プロセッサ2は、関数faへの復帰直前関数fbの終了直前に、メモリ領域3aを通常状態に遷移させるステップS4。関数fbの実行が終了すると、関数faへの復帰が行われるステップS5。関数faの復帰が行われると、プロセッサ2は、メモリ領域3bを省電力状態に遷移させるステップS6。その後、関数faの残りの処理が実行されステップS7、関数faの実行が終了する。なお、ステップS1の処理を行う命令は、関数fa内において、たとえば、関数fbの呼び出し命令の直前に記述されている。また、ステップS4の処理を行う命令は、関数fb内において、たとえば、関数fbの終了命令の直前に記述されている。また、ステップS6の処理を行う命令は、関数fa内において、たとえば、関数fbの呼び出し命令の直後に記述されている。詳細は後述する。このような関数fa,fbを含むプログラムを、プロセッサ2が実行することで、上記のような電力制御方法が実行される。以上のような電力制御方法によれば、呼び出し元の関数が割り当てられているメモリ領域を、呼び出し先の関数の実行時に省電力状態とし、関数の実行を中断しているメモリ領域を省電力状態としている。これにより、呼び出し関係の多いプログラムを実行する場合であっても、メモリ領域3a,3bによる消費電力を削減でき、その結果、低消費電力の電子装置1が得られる。第2の実施の形態図2は、第2の実施の形態の電子装置の一例を示す図である。電子装置50は、たとえば、メモリ装置、SOCSystemOnChipなどの半導体装置、またはコンピュータなどである。電子装置50は、メモリ部10、プロセッサ20、制御レジスタ部30、電力制御部40、バス41、電源線42を有している。メモリ部10は、SRAMStaticRandomAccessMemoryまたはDRAMDynamicRandomAccessMemoryなどであり、複数のメモリバンク11-0,11-1,11-2,11-3,...,11-nを有する。メモリバンク11-0~11-nは、命令コード用メモリ12またはデータ用メモリ13として機能する。メモリバンク11-0~11-nは、バス41を介してプロセッサ20に接続されている。プロセッサ20は、たとえば、CPUCentralProcessingUnit、DSPDigitalSignalProcessorなどであり、プロセッサコア21とメモリコントローラ22を有している。プロセッサコア21はメモリコントローラ22を用いて、メモリバンク11-0~11-nへのデータまたは命令コードの書き込みまたは読み出しを制御する。制御レジスタ部30は、プロセッサ20からの電源制御信号に応じて、メモリバンク11-0~11-nの電力制御状態を記憶する。制御レジスタ部30は、たとえば、各メモリバンク11-1~11-nの電力制御状態を記憶する複数のレジスタc0,c1,c2,c3,...,cnを有している。たとえば、図2に示すように、レジスタc0~cnのうち、レジスタc0,c2に1が設定され、後のレジスタc1,c3~cnに0が設定されると、メモリバンク11-0,11-2の電力制御状態が通常状態となり、メモリバンク11-1,11-3~11-nの電力制御状態が省電力状態となる。電力制御部40は、メモリバンク11-0~11-nと電源線42間に接続された電力制御回路40-0,40-1,40-2,40-3,...,40-nを有している。電力制御回路40-0~40-nは、制御レジスタ部30からの信号に応じて、メモリバンク11-0~11-nの電源状態を制御する。なお、電源状態には、たとえば、電源切断状態と省電力供給状態と通常電力供給状態とがある。電源切断状態では、電源線42と各メモリバンク11-0~11-nとの間の接続が切断されている。省電力供給状態では、電源線42からの電源が、電圧を低下させて各メモリバンク11-0~11-nへ供給されている。通常電力供給状態では、電源線42からの電源が、電圧を保持しながら各メモリバンク11-0~11-nへ供給されている。電源切断状態では、各メモリバンク11-0~11-nにおいて、データの保持も、読み出し及び書き込みも行われない。省電力供給状態では、各メモリバンク11-0~11-nにおいて、データ保持が行われる。通常電力供給状態では、各メモリバンク11-0~11-nにおいて、データ保持、読み出しまたは書き込みが行われる。なお、制御レジスタ部30において、0が設定されている場合に、上記の電源状態のうち、電源切断状態と省電力供給状態の何れかが、たとえば、電力制御回路40-0~40-nにより決定される。このような電子装置50において、メモリ部10には、たとえば、以下のようなプログラムが格納されている。図3は、メモリ部に格納されているプログラムのコードの一例を示す図である。図3の例では、関数としてfunc1、func2、func3が示されている。また、図3の例では、メモリバンク11-0~11-nの数を8つつまり、n=7としている。func1は、func2の呼び出し命令callfunc2を含み、メモリバンク11-1に配置される。さらに、func1には、func2の呼び出し命令の直前に、メモリバンク11-1の電力制御状態を省電力状態に遷移させ、メモリバンク11-2の電力制御状態を通常状態に遷移させる命令電力制御コードが記述されている。また、呼び出し命令の直後に、メモリバンク11-2~11-7の電力制御状態を省電力状態に遷移させる電力制御コードが記述されている。func1において呼び出されるfunc2は、メモリバンク11-2に配置される。func2には、func2の終了を示すendfunctionの直前に、func2の呼び出し命令が含まれているメモリバンク11-1,11-3の電力制御状態を通常状態に遷移させる電力制御コードが記述されている。func3は、func2の呼び出し命令を含み、メモリバンク11-3に配置される。さらに、func3には、func2の呼び出し命令の直前に、メモリバンク11-3の電力制御状態を省電力状態に遷移させ、メモリバンク11-2の電力制御状態を通常状態に遷移させる電力制御コードが記述されている。また、呼び出し命令の直後に、メモリバンク11-1,11-2,11-4~11-7の電力制御状態を省電力状態に遷移させる電力制御コードが記述されている。電子装置50は、以上のようなプログラムを実行することで、メモリバンク11-0~11-nの電力制御を行う。以下、図3に示したプログラムの実行時による電子装置50による電力制御方法の例を説明する。図4は、func1→func2→func1の順で関数が実行される場合のメモリバンクの電力制御状態の例を示す図である。図4では、プログラムの各コードの実行時におけるメモリバンク11-0~11-7の電力制御状態を示している。メモリバンク番号の0~7は、それぞれ、メモリバンク11-0~11-7を示している。なお、メモリバンク11-0には、メイン関数が配置され、電力制御状態が常時、通常状態となっている。また、図4中において最初にfunc1を実行する際には、メモリバンク11-0,11-1以外のメモリバンク11-2~11-7の電力制御状態は省電力状態となっているものとする。すなわち、図2に示した制御レジスタ部30のレジスタc0~c7は、11000000となっている。プロセッサ20によるfunc1の実行時において、func2の呼び出し命令の直前で、メモリバンク11-1の電力制御状態を省電力状態へ遷移させ、メモリバンク11-2の電力制御状態を通常状態へ遷移させる電力制御コードが実行される。このときプロセッサ20は、制御レジスタ部30のレジスタc0~c7を、10100000と書き換える。これにより、func2の呼び出し命令の実行時には、メモリバンク11-1の電力制御状態が省電力状態となり、メモリバンク11-2の電力制御状態が通常状態となる。func2の実行が進み、終了直前において、メモリバンク11-1,11-3を通常状態へ遷移させる電力制御コードが実行される。このときプロセッサ20は、制御レジスタ部30のレジスタc0~c7を、11110000と書き換える。これにより、func2の終了時func1への復帰時には、メモリバンク11-0~11-3の電力制御状態が通常状態となり、メモリバンク11-4~11-7の電力制御状態が省電力状態のままとなる。このようにすることで、実行状況を参照せずに、func1、func3のどちらに復帰しても省電力状態のメモリバンクにアクセスするという問題を発生させないようになっている。func1への復帰後には、func1においてfunc2の呼び出し命令の直後の、メモリバンク11-2~11-7の電力制御状態を省電力状態に遷移させる電力制御コードが実行される。このときプロセッサ20は、制御レジスタ部30のレジスタc0~c7を、11000000と書き換える。これにより、メモリバンク11-0,11-1以外のメモリバンク11-2~11-7の電力制御状態が省電力状態となる。func1へ復帰したという情報を追加されたため、省電力状態とするメモリバンクを増やすことができた。図5は、func3→func2→func3の順で関数が実行される場合のメモリバンクの電力制御状態の例を示す図である。図4と同様に、プログラムの各コードの実行時におけるメモリバンク11-0~11-7の電力制御状態を示している。メモリバンク番号の0~7は、それぞれ、メモリバンク11-0~11-7を示している。また、図4と同様に、メモリバンク11-0には、メイン関数が配置され、電力制御状態が常時、通常状態となっている。なお、図5中において最初にfunc3を実行する際には、メモリバンク11-0,11-3以外のメモリバンク11-1,11-2,11-4~11-7の電力制御状態は省電力状態となっているものとする。すなわち、図2に示した制御レジスタ部30のレジスタc0~c7は、10010000となっている。プロセッサ20によるfunc3の実行時において、func2の呼び出し命令の直前で、メモリバンク11-2の電力制御状態を通常状態へ遷移させ、メモリバンク11-3の電力制御状態を省電力状態へ遷移させる電力制御コードが実行される。このときプロセッサ20は、制御レジスタ部30のレジスタc0~c7を、10100000と書き換える。これにより、func2の呼び出し命令の実行時には、メモリバンク11-3の電力制御状態が省電力状態となり、メモリバンク11-2の電力制御状態が通常状態となる。func2の実行が進み、終了直前において、メモリバンク11-1,11-3を通常状態へ遷移させる電力制御コードが実行される。このときプロセッサ20は、制御レジスタ部30のレジスタc0~c7を、11110000と書き換える。これにより、func2の終了時func3への復帰時には、メモリバンク11-0~11-3の電力制御状態が通常状態となり、メモリバンク11-4~11-7の電力制御状態が省電力状態のままとなる。このようにすることで、実行状況を参照せずに、func1、func3のどちらに復帰しても省電力状態のメモリバンクにアクセスするという問題を発生させないようになっている。func3への復帰後には、func3においてfunc2の呼び出し命令の直後の、メモリバンク11-1,11-2,11-4~11-7の電力制御状態を省電力状態に遷移させる電力制御コードが実行される。このときプロセッサ20は、制御レジスタ部30のレジスタc0~c7を、10010000と書き換える。これにより、メモリバンク11-0,11-3以外のメモリバンク11-1,11-2,11-4~11-7の電力制御状態が省電力状態となる。func3へ復帰したという情報を追加されたため、省電力状態とするメモリバンクを増やすことができた。以上のような電力制御方法によれば、呼び出し元の関数が割り当てられているメモリバンクを、呼び出し先の関数の実行時に省電力状態とし、メイン関数以外の関数の実行を中断しているメモリバンクを省電力状態としている。これにより、呼び出し関係の多いプログラム、特に複数の関数が同一の関数を呼び出す構造を含むプログラムを実行する場合であっても、プログラムのメモリバンクへの配置の工夫をせずに、電子装置50のメモリ部10による消費電力を削減でき、その結果、低消費電力の電子装置50が得られる。次に、図3に示したような電力制御コードが挿入されたプログラムを生成する方法について詳細に説明する。プログラム生成方法図6は、プログラムを生成するコンピュータの一例を示す図である。コンピュータ100は、CPU101によって装置全体が制御されている。CPU101には、バス108を介してRAM102と複数の周辺機器が接続されている。RAM102は、コンピュータ100の主記憶装置として使用される。RAM102には、CPU101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に用いる各種データが格納される。バス108に接続されている周辺機器としては、ハードディスクドライブHDDHardDiskDrive103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、及び通信インタフェース107がある。HDD103は、内蔵したディスクに対して、磁気的にデータの書き込み及び読み出しを行う。HDD103は、コンピュータ100の二次記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、及び各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。グラフィック処理装置104には、モニタ104aが接続されている。グラフィック処理装置104は、CPU101からの命令にしたがって、画像をモニタ104aの画面に表示させる。モニタ104aとしては、CRTCathodeRayTubeを用いた表示装置や液晶表示装置などがある。入力インタフェース105には、キーボード105aとマウス105bとが接続されている。入力インタフェース105は、キーボード105aやマウス105bから送られてくる信号をCPU101に送信する。なお、マウス105bは、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。光学ドライブ装置106は、レーザ光などを利用して、光ディスク106aに記録されたデータの読み取りを行う。光ディスク106aは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク106aには、DVDDigitalVersatileDisc、DVD-RAM、CD-ROMCompactDiscReadOnlyMemory、CD-RRecordable/RWReWritableなどがある。通信インタフェース107は、ネットワーク107aに接続されている。通信インタフェース107は、ネットワーク107aを介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。以上のようなハードウェア構成によって、以下に示すプログラム生成方法が実現される。図7は、プログラム生成方法の一例を示すフローチャートである。まず、たとえば、CPU101により実現されるコンパイラに、プログラムソースコードd1が入力され、コンパイルが行われると、その結果としてプログラムアセンブリd2が生成されるステップS10。その後、CPU101は、プログラムd2と、プログラムd2を組み込む電子装置の各メモリバンクの開始アドレスや容量を含むメモリバンク構成情報d3とをもとに、メモリマップd4を作成するステップS11。メモリマップd4には、プログラムd2のどの関数をどのメモリバンクのアドレスに割り当てるのかが示されている。次に、CPU101は、メモリマップd4をもとに、プログラムd2に前述したような電力制御コードを挿入し、電力制御コード入りプログラムアセンブリd5を生成するステップS12。続いてCPU101により実現されるアセンブラにより、電力制御コード入りプログラムd5がアセンブルされ、電力制御コード入りプログラムオブジェクトd6が生成されるステップS13。さらに、CPU101により実現されるリンカにより、メモリマップd4に基づき、標準ライブラリや数値計算ライブラリなど他のライブラリとのリンクが行われ、電力制御コード入りプログラムバイナリd7が生成されステップS14、プログラム生成処理が終了する。以下、ステップS11及びステップS12の処理の詳細を説明する。メモリマップ作成処理図8は、メモリマップ作成処理の一例を示すフローチャートである。まず、CPU101は、プログラムアセンブリd2とメモリバンク構成情報d3とをもとに、静的コールグラフd10及び関数サイズ情報d11を作成するステップS20。図9は、メモリバンク構成情報の一例を示す図である。メモリバンク構成情報d3には、各メモリバンクの開始アドレスと、容量の情報が含まれている。たとえば、メモリバンク番号0のメモリバンクの開始アドレスは0x0000であり、容量は4.0KBである。図10は、静的コールグラフの一例を示す図である。静的コールグラフd10には、プログラムアセンブリd2における関数の呼び出し関係が示されている。たとえば、メイン関数関数mainにより呼び出される関数として、関数f1a,f1bがあることが示されている。図11は、関数サイズ情報の一例を示す図である。関数サイズ情報には、各関数のコードサイズが含まれている。たとえば、関数mainのコードサイズは0.1KBであり、関数f1aのコードサイズは1.0KBである。以上のような静的コールグラフd10と関数サイズ情報d11が作成されると、これらの情報をもとに、プログラム分割が行われるステップS21。ステップS21の処理では、CPU101は、静的コールグラフd10から再帰部となっている関数とそれ以外の関数とを検出し、分割する。また、CPU101は、各分割部の合計のコードサイズを算出し、各分割部に含まれる関数やコードサイズを含む分割情報d12を生成する。続いて、CPU101は、作成した分割情報d12をもとに、再帰部の分割案d13を作成するステップS22。ステップS22の処理では、再帰部となっている関数群を任意の2関数で分割した際の、両方の関数群の合計コードサイズが算出される。分割する2関数と、分割によって得られる両方の関数群の合計コードサイズが分割案d13の1つとして、たとえば、RAM102に保存される。詳細は後述する。その後、CPU101は、作成した分割情報d12、分割案d13とメモリバンク構成情報d3とをもとに、電力制御対象の電子装置の各メモリバンクに割り当てる関数を決定し、割り当て情報d14を生成するステップS23。そして、CPU101は、生成した割り当て情報d14とメモリバンク構成情報d3をもとに、各関数の開始アドレスを算出し、算出した開始アドレスをもとにメモリマップd4を作成するステップS24。以上によりメモリマップ作成処理が終了する。次に、上記のメモリマップ作成処理におけるプログラム分割処理、再帰部の分割案作成処理、関数割り当て処理について、さらに詳細に説明する。プログラム分割処理図12は、プログラム分割処理の一例を示すフローチャートである。CPU101において、図10に示したような静的コールグラフd10の入力が行われるとステップS30、準備処理が行われるステップS31。準備処理では、CPU101は、後述する分割作業用テーブルを作成し、各関数の分割名の初期値を与える。その後、CPU101は、静的コールグラフd10から再帰となっている関数群を検出するステップS32。再帰となっている関数群が検出されると、分割処理が行われるステップS33。分割処理では、CPU101は、再帰となっている関数群とそれ以外の関数群への分割を行い、分割作業用テーブルの分割名を更新する。その後、ステップS32の処理に戻る。ステップS32の処理で、再帰となっている関数群が検出されない場合、CPU101は、その時点での分割作業用テーブルの情報をもとに、分割情報d12を生成し出力しステップS34、たとえば、RAM102に格納し、プログラム分割処理を終了する。以下、図12のステップS31,S32,S33の詳細を説明する。準備処理図12のステップS31の準備処理では、以下に示すような分割作業用テーブルが作成される。図13は、分割作業用テーブルの一例を示す図である。分割作業用テーブルには、静的コールグラフd10に含まれる関数と、その関数に対する分割名が含まれる。準備処理の段階では、分割名の初期値として、たとえば、図13のようにMAINが与えられる。詳細は後述するが、再帰部やそれ以外の部分として分割された後には、異なった分割名に変更される。再帰検出処理図14は、再帰検出処理の一例を示すフローチャートである。以下に示す例では、静的コールグラフd10から深さ優先探索により、再帰閉路となっている関数群を検出する例が示されている。たとえば、RAM102に記憶されている静的コールグラフd10と分割作業用テーブルがCPU101に入力されるとステップS40、初期化が行われるステップS41。初期化処理では、CPU101は、メイン関数からの探索の経路で関数fを通ったか否かを示す配列変数visited[f]を初期化する。図15は、初期化後の配列変数visited[f]の例を示している。配列変数visited[f]の初期化では、fが関数mainのときはtrue、それ以外の場合には、falseに設定される。また、初期化処理において、CPU101は、関数mainから関数fに至る探索の経路を記憶するリスト型の変数PATHを空にし、さらに、再帰部が抽出できたか否かを表す変数flagをfalseに設定する。続いて、CPU101は、引数の関数fに関数mainを設定して、サブルーチンAを実行しステップS42、サブルーチンAの返却値変数flag及び再帰部の関数群を再帰検出結果として、たとえば、RAM102に出力するステップS43。図16は、サブルーチンAの処理の一例を示すフローチャートである。まず、CPU101は、引数として渡された関数fを、変数PATHの末尾の変数に追加するステップS50。続いて、CPU101は、関数fが呼び出す全ての子関数fcについて、各々を引数として渡してサブルーチンBを実行するステップS51。これにより再帰部が検出される。なお、子関数fcが存在しない場合には、ステップS51の処理では、なにも行われない。その後、CPU101は、変数PATHの末尾の変数に追加された関数fを削除しステップS52、図14のフローチャートに戻る。図17は、サブルーチンBの処理の一例を示すフローチャートである。なお、図17中で、左辺の変数に対して右辺の値を代入または設定することを:=で記し、左辺の変数の値と右辺の値との比較を==で明示している。以降の図でも同様の意味とする。まず、CPU101は、再帰部が抽出できたか否かを表す変数flagの真偽を判定するステップS60。変数flagがfalseの場合には、ステップS61の処理が行われ、変数flagがtrueの場合には、サブルーチンBの処理が終了する。変数flagがfalseの場合、CPU101は、配列変数visited[fc]の真偽を判定するステップS61。配列変数visited[fc]がfalseの場合、ステップS62の処理が行われ、trueの場合、ステップS65の処理が行われる。配列変数visited[fc]がfalseの場合、CPU101は、配列変数visited[fc]をtrueに設定しステップS62、引数として渡された子関数fcをサブルーチンAの引数の関数fとして設定し、図16に示したサブルーチンAを実行するステップS63。その後、CPU101は、引数として渡された子関数fcの配列変数visited[fc]をfalseに設定しステップS64、図16に示したサブルーチンAに戻る。一方、ステップS61の処理において、配列変数visited[fc]がtrueの場合、CPU101は分割作業用テーブルにおいて、変数PATHの子関数fc以降の関数の分割名が、再帰部を示すもの以外で全て同一か否かを判定するステップS65。変数PATHの子関数fc以降の関数の分割名が、再帰部を示すもの以外で全て同一の場合、CPU101は、変数PATHの子関数fc以降の関数群を再帰部として抽出しステップS66、変数flagをtrueに設定するステップS67。ステップS67の処理の後、または、変数PATHの子関数fc以降の関数の分割名が、再帰部を示すもの以外で違うものがある場合にはステップS66に示すような抽出は行われず、サブルーチンAに戻る。たとえば、以下に示すような静的コールグラフに対して、上記の再帰検出処理を適用した場合について説明する。図18は、複数の再帰部を含む静的コールグラフの例を示す図である。図18に示す静的コールグラフd10は、図10に示したものと同じであるが、関数の呼び出し関係を矢印で示してある。たとえば、関数mainは関数f1aを呼び出し、関数f1aは、関数f2aを呼び出していることが、矢印で示されている。ここで、関数f1a~f9aの部分が閉路であり、再帰部110となっている。また関数f3b~f6bの部分も閉路であり、再帰部111となっている。以下では、再帰部110を上記の再帰検出処理で検出する例を説明する。図14に示されるステップS41の初期化処理が行われた後、関数mainを引数関数fとして、図16に示されるサブルーチンAが実行される。このときサブルーチンAのステップS50の処理では、変数PATH=mainとなる。関数mainの子関数fcは関数f1a,f1bである。ステップS51の処理では、図10、図18に示した静的コールグラフd10登録順に処理するとした場合、まずは、関数f1aを引数としてサブルーチンBが実行される。図17に示されるサブルーチンBにおいて、ステップS60では、変数flagがfalseに設定されているので、ステップS61の処理が行われる。また、ステップS61の処理では、図15に示されているように配列変数visited[f1a]がfalseであるのでステップS62の処理が行われ、配列変数visited[f1a]はtrueに設定され、配列変数visited[f]が更新される。図19は、更新された配列変数visited[f]の例を示す図である。図15に示した初期状態の配列変数visited[f]では関数f1aに関する配列変数visited[f]の部分はfalseであったが、図19に示されている配列変数visited[f]ではtrueに変更されている。その後、CPU101は、引数関数fとして関数f1aをサブルーチンAに渡して、サブルーチンAを実行する。サブルーチンAのステップS50の処理では、変数PATHの末尾に関数f1aが追加され、変数PATH=main,f1aとなる。その後、関数f1aの子関数fcは関数f2aであるので、関数f2aを引数としてサブルーチンBが実行される。サブルーチンBにおいて、ステップS60では、変数flagがfalseであるので、ステップS61の処理が行われる。また、ステップS61の処理では、図19に示されているようにvisited[f2a]がfalseであるのでステップS62の処理が行われ、visited[f2a]がtrueとなり、配列変数visited[f]が更新される。その後、CPU101は、ステップS63の処理において、引数として関数f2aをサブルーチンAに渡して、サブルーチンAを実行する。以下、同様の処理が繰り返される。関数f9aが引数としてサブルーチンBに渡され、ステップS62の処理により更新されたときの配列変数visited[f]は、以下のようになる。図20は、関数f9aについてまで更新された、配列変数visited[f]の例を示す図である。図20に示されているように、関数main,f1a~f9aについての配列変数visited[f]が、trueとなっている。その後、CPU101は、ステップS63の処理において、引数として関数f9aをサブルーチンAに渡して、サブルーチンAを実行する。サブルーチンAのステップS50の処理では、変数PATHの末尾に関数f9aが追加され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7a,f8a,f9aとなる。その後、関数f9aの子関数fcは関数f1aであるので、関数f1aを引数としてサブルーチンBが実行される。サブルーチンBにおいて、ステップS60では、変数flagがfalseであるので、ステップS61の処理が行われる。また、ステップS61の処理では、図20に示されているように配列変数visited[f1a]がtrueであるのでステップS65の処理が行われる。ステップS65の処理において、引数子関数fcとして渡された関数f1a以降、すなわち、関数f1a~f9aの分割名は、図13に示した分割作業用テーブルを見ると、全てMAINである。つまり、関数f1a以降の関数群の分割名が初期値のMAINで、再帰部ではないことを示しており、しかも同一であるので、ステップS66の処理が行われる。ステップS66の処理では、再帰部として、変数PATHの子関数fc、つまり関数f1a以降の関数群関数f1a,f2a,f3a,f4a,f5a,f6a,f7a,f8a,f9aが再帰部として抽出される。その後、ステップS67の処理で変数flagがtrueに設定され、サブルーチンAの処理に戻り、ステップS52の処理が行われる。ステップS52の処理では、変数PATHの末尾の関数f、すなわち関数f9aが削除され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7a,f8aとなる。その後、サブルーチンBの処理に復帰し、ステップS64の処理が行われる。ステップS64の処理では、子関数fcの関数f9aについての配列変数visited[f9a]がfalseに設定される。図21は、関数f9aにおける配列変数visited[f]が変更された例を示す図である。図20に示した配列変数visited[f]では関数f9aに関する配列変数visited[f]の部分はtrueであったが、図21に示されている配列変数visited[f]ではfalseに変更されている。その後、同様の処理が行われ、変数PATHが空になり、配列変数visited[f]が全ての関数についてfalseになると、サブルーチンAが終了し、図14に示した処理フローに復帰し、ステップS43の処理が行われる。すなわち、再帰部として検出された関数f1a~f9aと、変数flag=trueが、再帰検出結果として出力される。続いて、図12に示したステップS33の分割処理の詳細を説明する。分割処理以下では、i番目に検出された再帰部の関数群を示す再帰関数リストにしたがって分割処理を行う例について説明する。図22は、分割処理の一例を示すフローチャートである。分割処理が開始され、たとえば、RAM102に格納されている再帰部の関数群を示した再帰関数リストと、分割作業用テーブルがCPU101に入力されるとステップS70、カウンタ変数jを1に初期化するステップS71。続いて、CPU101は、入力された再帰関数リストのj番目に当たる関数f_i,jの分割名をRiとして設定するステップS72。その後、CPU101は、カウンタ変数jが、i番目の再帰部の関数の数niよりも小さいか否かを判定するステップS73。カウンタ変数jが、niよりも小さい場合には、CPU101はカウンタ変数jをインクリメントしステップS74、ステップS72からの処理を繰り返す。カウンタ変数jが、niに達した場合、CPU101はカウンタ変数jを再度、1に初期化するステップS75。前述した再帰部110の検出処理後の分割処理における、ステップS75の処理時点での分割作業用テーブルは、たとえば、以下のようになる。図23は、分割作業用テーブルの更新例を示す図である。図23に示されているように、再帰部110の関数群である、関数f1a~f9aの分割名が、MAINからR1に変更されている。その後、CPU101は、再帰関数リストの関数f_i,jの子孫関数のうち、分割作業用テーブルの分割名が、RjでもRkk<jでもrk,llは自然数でもないものについて、分割名ri,jを設定するステップS76。これは、関数f_i,jの子孫関数のうち、再帰を構成している子関数f_i,j1以外のもので、以前に再帰部の関数として分割名が設定された関数及びそれの子孫関数を除いた関数について、分割名ri,jを与えるということを、意味している。たとえば、図18に示した静的コールグラフd10から、再帰部110が検出された後、再帰部110に含まれる関数f2aの子孫関数である関数f3bについては、まだ再帰部111の関数としての分割名が設定されていないため、分割名r1,1が設定される。その後、再び、CPU101は、カウンタ変数jが、i番目の再帰部の関数の数niよりも小さいか否かを判定するステップS77。カウンタ変数jが、niよりも小さい場合には、CPU101はカウンタ変数jをインクリメントしステップS78、ステップS76からの処理を繰り返す。カウンタ変数jが、niに達した場合、CPU101は、分割作業用テーブルを出力しステップS79、たとえば、RAM102に格納して、ステップS33の分割処理を終える。カウンタ変数jが、niに達した時点での、分割作業用テーブルは、たとえば、以下のようになる。図24は、1つ目の再帰部の検出後に行われる分割処理後の分割作業用テーブルの例を示す図である。再帰部110に含まれる関数f2aの子孫関数である、関数f3b,f4b,f5b,f5d,f6b,f7bについては、分割名r1,1が設定されている。再帰部110に含まれる関数f4aの子孫関数である、関数f5c,f6c,f7c,f8cについては、分割名r1,2が設定されている。再帰部110に含まれる関数f7aの子孫関数である、関数f7dについては、分割名r1,3が設定されている。このような分割処理が行われると、再び、図12のステップS32の再帰検出処理が行われる。以下では、図18に示した静的コールグラフd10の再帰部111を検出する例を説明する。再帰部110を検出する際と同様に、図14、図16、図17に示した処理が行われる。前述と同様に処理が進み、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7a,f8a,f9aとなり、引数として渡された関数f1aに関するサブルーチンBが実行される。サブルーチンBのステップS61の判定では、配列変数visited[f1a]がtrueであるので、ステップS65の処理が実行される。ステップS65の処理において、CPU101は、図24に示したような分割作業用テーブルを参照する。ここで、変数PATHの関数f1a以降の分割名は全て、R1となっている。分割名R1は、再帰部110を示すものであるため、サブルーチンBの処理が終了し、サブルーチンAに復帰し、ステップS52の処理が行われる。ステップS52の処理では、変数PATHの末尾の関数f、すなわち関数f9aが削除され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7a,f8aとなる。その後、サブルーチンBの処理に復帰し、ステップS64の処理が行われる。ステップS64の処理では、子関数fcの関数f9aについての配列変数visited[f9a]がfalseに設定される。その後、同様に、サブルーチンAのステップS52の処理が行われ、変数PATHの末尾の関数f8aが削除され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7aとなる。その後、サブルーチンBのステップS64の処理が行われる。ステップS64の処理では、子関数fcの関数f8aについての配列変数visited[f8a]がfalseに設定される。続いて、サブルーチンAのステップS51において、関数f7aのもう1つの子関数fcである関数f7dが引数としてサブルーチンBに渡され、サブルーチンBが実行される。サブルーチンBにおいて、ステップS60では、変数flagがfalseであるので、ステップS61の処理が行われる。また、ステップS61の処理では、関数f7dの探索はこれまで行われていなかったので、配列変数visited[f7d]はfalseである。これにより、ステップS62の処理が行われ、配列変数visited[f7d]はtrueに設定され、配列変数visited[f]が更新される。図25は、更新された配列変数visited[f]の例を示す図である。図25の配列変数visited[f]では、関数f7dに関する配列変数visited[f]の部分がtrueに変更されている。その後、ステップS63の処理において、関数f7dを引数として、サブルーチンAが実行される。サブルーチンAのステップS50の処理では、変数PATHの末尾に関数f7dが追加され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7a,7dとなる。その後、関数f7dの子関数fcは存在しないので、ステップS51のサブルーチンBは実行されず、ステップS52の処理が実行され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6a,f7aとなる。続いて、サブルーチンBのステップS64の処理に戻り、関数f7dについての配列変数visited[f7d]がfalseに設定される。その後、サブルーチンAのステップS52の処理に戻り、変数PATHの末尾の関数f7aが削除され、変数PATH=main,f1a,f2a,f3a,f4a,f5a,f6aとなる。以下、同様の処理が進むと、サブルーチンAのステップS51において、関数f2aの、もう1つの子関数である関数f3bを引数としたサブルーチンBが実行される。サブルーチンBにおいて、ステップS60では、変数flagがfalseであるので、ステップS61の処理が行われる。また、ステップS61の処理では、関数f3bの探索はこれまで行われていなかったので、配列変数visited[f3b]はfalseである。これにより、ステップS62の処理が行われ、配列変数visited[f3b]はtrueに設定され、配列変数visited[f]が更新される。その後、関数f3bを引数としたサブルーチンAが実行される。ステップS50の処理において、変数PATHの末尾に関数f3bが追加され、変数PATH=main,f1a,f2a,f3bとなる。次に、関数f3bの子関数fcである関数f4b、関数f4bの子関数fcであり、静的コールグラフd10の上位に位置する関数f5b、関数f5bの子関数fcである関数f6bについても同様の処理が行われる。関数f6bの子関数fcである関数f3bを引数としたサブルーチンBの実行時、配列変数visited[f3b]がtrueに設定されているので、サブルーチンBのステップS61の判定処理により、ステップS65の処理が行われることになる。ステップS65の処理の時点において、変数PATHは、変数PATH=main,f1a,f2a,f3b,f4b,f5b,f6bとなっている。図24に示したような分割作業用テーブルでは、関数f3b以降の関数f4b,f5b,f6bの分割名が、同一の分割名r1,1となっており、再帰部110を示すものでもないため、ステップS66の処理が行われる。すなわち、CPU101は、変数PATHの関数f3b以降を再帰部111として抽出する。そして、ステップS67の処理で、変数flagがtrueに設定される。その後は、前述の再帰部110の検出処理と同様に、配列変数visited[f]をfalseに設定する処理と変数PATHの末尾の関数を削除する処理とが繰り返された後、図14のステップS43の処理に戻り、再帰検出結果として、再帰部111となる関数群関数f3b~f6bと変数flag=trueが、出力される。その後、再び、図22に示したような分割処理が行われる。詳細な説明は省略するが、上記のように検出されたi=2番目に検出された再帰部111の関数群関数f3b~f6bを示す再帰関数リストにしたがって、図22の処理が実行される。2つの目の再帰部111の各関数については、ステップS72の処理により、分割名としてR2が与えられる。図26は、ステップS79の処理で出力される分割作業用テーブルの例を示す図である。再帰部111に含まれる関数f3b~f6bについて、分割名R2が与えられている。また、関数f3bの子孫関数のうち、再帰部111に含まれない関数f5dに分割名r2,1が付与され、関数f7bに分割名r2,2が付与される。分割情報出力処理図12に示したステップS34の処理では、CPU101は、たとえば、図11に示した関数サイズ情報と、図26のように更新された分割作業用テーブルをもとに、分割情報を生成して出力する。図27は、分割情報の例を示す図である。分割情報には、各分割名の関数のリストと、各分割名の関数の合計コードサイズと、後述する分割案と、採用分割案が含まれる。分割情報の初期値において、分割案と採用分割案はNULLとなっている。続いて、図8のステップS22の再帰部の分割案作成処理の詳細を説明する。再帰部の分割案作成処理図28は、再帰部の分割案作成処理の一例を示すフローチャートである。CPU101は、たとえば、図27に示したような、分割情報を入力するステップS80。そして、CPU101は、再帰部の番号をカウンタ変数iとして、まず、カウンタ変数iの初期値に1を設定するステップS81。また、CPU101は、再帰部の中で分割する関数の番号をカウンタ変数jとして、カウンタ変数jの初期値に1を設定するステップS82。また、CPU101は、カウンタ変数kの初期値にカウンタ変数jの値を設定するステップS83。次に、CPU101は、分割名Riの再帰部に含まれる関数fjの手前と関数fkの手前で分割した時の、各関数群の合計コードサイズσ,τを含む分割案j,k=σ,τ,分割案k,j=τ,σを算出するステップS84。たとえば、図18に示した再帰部110において、関数f1aの手前と関数f2aの手前で分割するとは、再帰部110を、関数f1aと、関数f2a~関数f9aの2つの分割部に分割するということである。ここでは、図18に示した再帰部110において、関数f1a~f9aを、j=1~9の関数f1~f9とする。たとえば、j=1、k=2の場合、関数f1の手前と、関数f2の手前で分割したときの分割案1,2,2,1が求められ、σは関数f1のコードサイズ、τは関数f2~f9の合計コードサイズとなる。コードサイズσ,τは以下の式で表される。式1において、sfitは、i番目の再帰部のt番目の関数fitのコードサイズを示している。また、式2において、sfiuは、i番目の再帰部のu番目の関数fiuのコードサイズを示している。niは、i番目の再帰部に含まれる関数の数を示している。次に、CPU101は、カウンタ変数kが、niよりも小さいか否かを判定するステップS85。カウンタ変数kが、niよりも小さい場合には、CPU101はカウンタ変数kをインクリメントしステップS86、ステップS84からの処理を繰り返す。カウンタ変数kが、niに達した場合、CPU101は、カウンタ変数jが、niよりも小さいか否かを判定するステップS87。カウンタ変数jが、niよりも小さい場合には、CPU101はカウンタ変数jをインクリメントしステップS88、ステップS83からの処理を繰り返す。カウンタ変数jが、niに達した場合、CPU101は、カウンタ変数iが、再帰部の数を示すNよりも小さいか否かを判定するステップS89。カウンタ変数iが、Nよりも小さい場合には、CPU101はカウンタ変数iをインクリメントしステップS90、ステップS82からの処理を繰り返す。カウンタ変数iが、Nに達している場合、CPU101は、上記の分割案入りの分割情報を出力し、たとえばRAM102などに格納するステップS91。図29は、分割案入りの分割情報の例を示す図である。図29に示される分割情報には、分割名R1の再帰部110の分割案としてテーブルtbl1が追加されている。また、分割名R2の再帰部111の分割案としてテーブルtbl2が追加されている。図30は、テーブルtbl1の例を示す図である。図30には、再帰部110の関数f1a~f9aにおいて、分割する位置に応じた関数群のコードサイズ前述のσとτが示されている。なお、図30では、関数f1a~f9aのコードサイズは、それぞれ1KBとしている。たとえば、関数f1aの手前と、関数f2aの手前で分割したとき分割案f1a,f2a、σは関数f1aのコードサイズとなり1KB、τは関数f2a~f9aの合計コードサイズとなり8KBとなる。そのため、図30に示されているように、1,8が得られる。なお、分割案f1a,f1a,f2a,f2aなどは、分割しないことを示している。図31は、テーブルtbl2の例を示す図である。図31には、再帰部111の関数f3b~f6bにおいて、分割する位置に応じた関数群のコードサイズ前述のσとτが示されている。なお、図31では、関数f3aのコードサイズは、0.5KB、関数f4bのコードサイズは、1.0KB、関数f5bのコードサイズは、1.5KB、関数f6bのコードサイズは、2.0KBとしている。たとえば、関数f6bの手前と関数f3bの手前で分割したとき分割案f6b,f3b、τは関数f6bのコードサイズとなり2.0KB、σは関数f3b~f5bの合計コードサイズとなり3.0KBとなる。そのため、図31に示されているように、2.0,3.0が得られる。以上のようなテーブルtbl1,tbl2が、図8に示した分割案d13として、分割情報d12とともに、ステップS23の処理で用いられる。続いて、図8のステップS23の関数割り当て処理の詳細を説明する。関数割り当て処理図32は、関数割り当て処理の一例を示すフローチャートである。CPU101は、たとえば、RAM102に保持されている、分割情報d12、分割案d13、メモリバンク構成情報d3、関数サイズ情報d11などの情報を入力するステップS100。その後、CPU101は各種変数の初期化を行うステップS101。図33は、初期化後の変数m_rest[M]の一例を示す図である。変数m_rest[M]は、各メモリバンクの残り容量を示している。Mはメモリバンクの番号を示している。CPU101は、図9に示したようなメモリバンク構成情報d3をもとに、変数m_rest[M]に、各メモリバンクの容量を設定する。図34は、初期化後の分割情報の一例を示す図である。CPU101は、分割情報に、その分割名の関数の割り当てが済んでいるか否かを示す情報を追加し、初期化時には、その情報を未としておく。また、ステップS101の処理では、以下のような割り当て情報が生成される。図35は、初期化時の割り当て情報の一例を示す図である。割り当て情報には、分割名とその分割名で示される関数と、その分割名の関数が割り当てられるメモリバンクの番号が含まれる。初期化時には、メモリバンクへの割り当ては行われていないので、メモリバンク番号の欄はブランクとなっている。初期化が終わると、CPU101は、分割名がMAINの関数について、メモリバンクへの割り当てを行うステップS102。CPU101は、関数mainを含む分割名MAINの関数群については、たとえば、電力制御状態を常時通常状態とするメモリバンクに割り当てる。常時通常状態とするメモリバンクを、M=0のメモリバンクとすると、図35に示した割り当て情報の分割名がMAINの欄のメモリバンク番号が、0に設定される。また、CPU101は、図34に示した分割情報において、割り当てが済んでいるか否かを示す情報を、未から済に更新する。また、CPU101は、図33に示したM=0のメモリバンクの変数m_restから、分割名がMAINの関数の合計コードサイズを差し引く。なお、電力制御状態を常時通常状態とするメモリバンクに、他の分割名の関数を配置させない場合には、M=0のメモリバンクの変数m_rest[0]を0.0KBとしてもよい。続いて、CPU101は、残り容量が最大のメモリバンクM_Maxと、合計コードサイズが最大の分割部F_Maxを選択するステップS103。M_Maxには、変数m_rest[M]が最大のメモリバンクが選択される。F_Maxには、合計コードサイズが最大の分割名の関数群が選択される。そして、CPU101は、選択されたF_Maxが再帰部であるか否かを判定するステップS104。F_Maxが再帰部である場合には、ステップS105の処理が行われ、再帰部でない場合には、ステップS109の処理が行われる。たとえば、図34に示した分割情報では、分割名がR1の関数群の合計コードサイズが最大となり、分割案として、tbl1が設定されているので、再帰部として判定され、ステップS105の処理が行われる。分割案がNULLの場合には、再帰部ではないと判定される。なお、CPU101は、分割名からF_Maxが再帰部であるか否かを判定するようにしてもよい。たとえば、分割名R1,R2は、再帰部を示しているので、このような分割名をもつF_Maxの場合には、再帰部であると判定されるようにしてもよい。F_Maxが再帰部である場合、CPU101は、図34に示したような分割情報を参照して、採用する分割案が設定済であるか否かを判定するステップS105。設定済でない場合には、ステップS106の処理が行われ、設定済の場合にはステップS108の処理が行われる。たとえば、分割情報において、図34のように、採用分割案がNULLのままである場合には、ステップS106の処理が行われる。採用する分割案が設定済でない場合、CPU101は、採用分割案を選択して、M_Maxに割り当てる関数群Fを設定するステップS106。ステップS106の処理では、CPU101は、図30、図31のような分割案を示すテーブルtbl1,tbl2を参照する。たとえば、F_Maxとして選択された分割名R1の分割部では、分割案としてテーブルtbl1が設定されている。CPU101は、分割したときの2つの関数群のそれぞれのコードサイズのうち、第2要素が変数m_restを超えない範囲で最大となる分割案を選択する。最大のm_rest[M]が8KBの場合、図30に示される分割案のうち、たとえば、関数f1a,f2aのそれぞれ手前で分割することで得られるf1a,f2a=1,8が選択される。この分割案の第2要素のコードサイズ8KBとなる関数群f2a~f9aが、関数群Fとして設定される。その後、CPU101は、採用分割案を分割情報に設定するステップS107。上記の例の場合、CPU101は、分割名R1の分割部の採用分割案の部分を、NULLから、f1a,f2aに変更する。その後、ステップS110の処理が行われる。ステップS105の処理で、採用分割案が設定済みと判定した場合、CPU101は、採用分割案の2つの要素のうち未割り当て側を関数群Fとして設定するステップS108。たとえば、分割案f1a,f2aが採用されている場合で、関数群f2a~f9aのメモリバンクへの割り当てが済んでいる場合、残っている関数f1aが、関数群Fとして設定される。その後、ステップS110の処理が行われる。一方、ステップS104の処理で、F_Maxが再帰部ではないと判定された場合、関数群Fとして、F_Maxが設定される。次に、CPU101は、関数群FのコードサイズsFが、M_Maxの残り容量m_rest[M_Max]以下であるか判定するステップS110。sFがm_rest[M_Max]以下であれば割り当てが可能なので、CPU101は、関数群Fを、M_Maxに割り当てるステップS111。また、CPU101は、sFを、m_rest[M_Max]から減じる。たとえば、分割名R1の分割部のうち、関数f2a~f9aをM=1のメモリバンクに割り当てたとき、割り当て情報は以下のようになる。図36は、割り当て情報の更新例を示す図である。分割名R1の分割部再帰部が、さらに2つに分割されているので、図36に示されているように、一方の分割名をR1_1、他方をR1_2としている。本実施の形態の例では、これらのうち、コードサイズの大きいものが最初にメモリバンクに割り当てられる。図36の例では、分割名R1_1の関数f2a~f9aが、メモリバンク番号が1のメモリバンクに割り当てられ、残りの分割名R1_2の関数f1aは、未割り当て状態となっている。図37は、分割情報の更新例を示す図である。分割名R1の分割部について、採用分割案としてf1a,f2aが設定されている。割り当て情報の分割名R1_1の関数群についてはメモリバンクへの割り当てが済んでいる場合でも、分割名R1_2の関数群についての割り当てが済んでいない場合には、分割情報で管理されている割り当て済みか否かを示す情報は、未のままである。関数群FのM_Maxへの割り当て後、CPU101は、割り当て情報に含まれる全ての分割名の関数群の割り当てが済んでいるか判定するステップS112。全て割り当て済みの場合には、CPU101は、更新した割り当て情報を出力しステップS113、たとえば、RAM102などに格納し、関数割り当て処理が終了する。割り当てていないものがある場合には、ステップS103からの処理が繰り返される。たとえば、分割名R1の分割部のメモリバンクへの割り当ての際、分割名R1_2の関数群の割り当てが済んでいない場合、分割情報で管理されている分割名R1の分割部の割り当て済みか否かを示す情報は、図37に示したように、未のままである。そのため、ステップS103の処理では、再び分割名R1の分割部がF_Maxとして選択される。その後、ステップS105の判定処理から、ステップS108の処理に進み、未割り当ての分割名R1_2の関数群が関数群Fとして設定され、ステップS111にてM_Maxに割り当てられることになる。一方、ステップS110の処理において、sFが、m_rest[M_Max]を超える場合には、その関数群Fはどのメモリバンクにも割り当てられないので、エラーが出力されるステップS114。CPU101は、たとえば、グラフィック処理装置104を制御して、モニタ104aの画面上にエラーを表示させ、関数割り当て処理を終了する。図38は、出力される割り当て情報の例を示す図である。図38の例では、各分割名の関数が、メモリバンク番号が0~4のメモリバンクに割り当てられている。以上のような関数割り当て処理が終了すると、図38に示したような割り当て情報を用いて、図8のステップS24のアドレス計算が行われる。以下、アドレス計算処理の詳細を説明する。アドレス計算処理図39は、アドレス計算処理の一例を示すフローチャートである。CPU101は、たとえば、RAM102に保持されている、割り当て情報d14、メモリバンク構成情報d3、関数サイズ情報d11などの情報を入力するステップS120。その後、CPU101は変数の初期化を行うステップS121。ここでは、CPU101は、メモリバンク構成情報d3をもとに、関数の開始アドレスを示す変数start_addr[M]を、メモリバンク番号がMのメモリバンクの開始アドレスに設定する。続いてCPU101は、割り当て情報d14から、同じ分割名のついた関数群を抽出するステップS122。たとえば、図38に示したような割り当て情報から、まず、メモリバンク番号が0のメモリバンクに割り当てられる分割名MAINの関数main,f1b,f2b,f2cが抽出される。そして、CPU101は、カウンタ変数iに1を設定しステップS123、抽出した関数群のうち、i番目の関数fiの開始アドレスとして、変数start_addr[M]を割り当てるステップS124。その後、CPU101は、割り当てた関数fiのコードサイズをもとに、変数start_addr[M]を更新した後ステップS125、カウンタ変数iが抽出した関数の数nよりも小さいか否かを判定するステップS126。i<nの場合には、CPU101は、カウンタ変数iをインクリメントしステップS127、ステップS124からの処理を繰り返す。カウンタ変数iがnに達した場合、CPU101は、割り当て情報d14の全ての分割名の関数群について割り当てが完了したか判定するステップS128。全ての割り当てが完了した場合には、CPU101は、メモリマップを出力しステップS128、たとえば、RAM102に格納し、アドレス計算処理を終える。全ての割り当てが完了していない場合には、CPU101は、ステップS122からの処理を繰り返す。図40は、出力されるメモリマップの一例を示す図である。メモリマップには、各メモリバンクに割り当てられた、各関数の開始アドレスが設定されている。以上のようなアドレス計算処理が終了し、メモリマップが作成されると、図7に示したように、ステップS12の電力制御コード挿入処理が行われる。以下、電力制御コード挿入処理の詳細を説明する。電力制御コード挿入処理図41は、電力制御コード挿入処理の一例を示すフローチャートである。CPU101は、たとえば、RAM102に保持されている、プログラムアセンブリd2、メモリマップd4などの情報を入力するステップS130。次に、CPU101は、プログラムd2の先頭から命令を取り出していきステップS131、その命令が関数呼び出し命令であるか否か判定するステップS132。命令が、関数呼び出し命令である場合には、ステップS133の処理が行われ、関数呼び出し命令ではない場合、ステップS135の処理が行われる。命令が、関数呼び出し命令の場合、CPU101は、メモリマップd4を参照して、呼び出し元関数と呼び出し先関数のメモリバンクが同一か否かを判定するステップS133。呼び出し元関数と呼び出し先関数のメモリバンクが同一でない場合には、ステップS134の処理が行われ、同一の場合には、ステップS135の処理が行われる。呼び出し元関数と呼び出し先関数のメモリバンクが同一でない場合、CPU101は、電力制御コードを生成して、関数呼び出し命令の直前と直後に挿入するステップS134。関数呼び出し命令の直前に挿入される電力制御コードは、呼び出し元関数が配置されているメモリバンクの電力制御状態を省電力状態とし、呼び出し先関数が配置されているメモリバンクの電力制御状態を通常状態とするものである。また、関数呼び出し命令の直後に挿入される電力制御コードは、呼び出し元関数が配置されているメモリバンクと、関数mainが配置されているメモリバンク以外のメモリバンクの電力制御状態を省電力状態とするものである。その後、CPU101は、取り出した命令が、関数の末尾のものか否かを判定するステップS135。CPU101が取り出した命令が、関数の末尾であれば、ステップS136の処理が行われ、関数の末尾でなければ、ステップS138の処理が行われる。取り出した命令が関数の末尾である場合、CPU101は、関数とその関数の全ての呼び出し元関数のメモリバンクが同一であるか否かを判定するステップS136。関数とその関数の全ての呼び出し元関数のメモリバンクが同一ではない場合、ステップS137の処理が行われ、同一の場合には、ステップS138の処理が行われる。関数とその関数の全ての呼び出し元関数のメモリバンクが同一ではない場合、CPU101は、関数の末尾に、電力制御コードを挿入するステップS137。この電力制御コードは、その関数を呼び出している全ての関数が配置されているメモリバンクの電力制御状態を、通常状態とするものである。続いて、CPU101は、プログラム全体の末尾を検出するステップS138。プログラム全体の末尾が検出された場合、CPU101は、電源制御コード入りのプログラムアセンブリd5を出力しステップS139、たとえば、RAM102などに記憶し、電力制御コード挿入処理を終える。一方、ステップS138の処理で、プログラム全体の末尾が検出されていない場合には、ステップS131からの処理が繰り返される。以上のようにして生成された電源制御コード入りのプログラムアセンブリd5は、図7に示したように、アセンブルにより、電力制御コード入りプログラムオブジェクトd6となる。さらに、リンカにより、メモリマップd4など他のライブラリとリンクされ、電力制御コード入りプログラムバイナリd7が生成されステップS14、プログラム生成処理が終了する。以上のようにして生成された電力制御コード入りプログラムd7が、図2に示したような電子装置50に入力されると、たとえば、プロセッサ20は、メモリマップd4をもとに、関数を命令コード用メモリ12のメモリバンク11-0~11-3...に割り当てる。そして、プロセッサ20は、メモリバンク11-0~11-3...の電力制御コード入りプログラムd7を実行していくことで、再帰部分を含むような呼び出し関係の多いプログラムを実行する場合であっても、メモリ部10の消費電力を削減することができる。その結果、低消費電力の電子装置50が得られる。以下、消費電力削減例について説明する。たとえば、電力制御対象の電子装置50の命令コード用メモリ12が、4つのメモリバンク11-0~11-3を有し、メモリバンク11-0,11-1の通常状態での消費電力が2mW、省電力状態での消費電力が0.5mWとする。また、メモリバンク11-2,11-3の通常状態での消費電力が4mW、省電力状態での消費電力が1.0mWとする。そして、プログラムは、関数f1,f2,f3による再帰部と関数mainを有しているとする。また、関数mainはメモリバンク11-0に、関数f1はメモリバンク11-1に、関数f2はメモリバンク11-2に、関数f3はメモリバンク11-3に配置されるものとする。たとえば、ある入力に対して、プログラムが以下のように実行されたとする。関数mainが15msec実行された後、関数f1が呼び出され、380msec実行された後、関数f2が呼び出され、3msec実行された後、関数f3が呼び出され、10msec実行された後、関数f2に復帰する。そして関数f2が7msec実行された後、関数f1に復帰し、関数f1が580msec実行された後、関数mainに戻り、関数mainが5msec実行される。以上のようなプログラム動作が行われる場合、本実施の形態の電力制御方法によれば、メモリバンク11-0~11-3の合計消費エネルギーは、6mJである。一方、再帰部の処理の際、再帰部に含まれる関数f1~f3が配置されるメモリバンク11-1~11-3を常に通常状態としておく場合の合計消費エネルギーは、11.85mJであるから、大幅な電力削減が可能となる。なお、上記の説明では、たとえば、図6に示したようなコンピュータ100がプログラムを生成するとしたが、これに限定されない。たとえば、図2に示した電子装置50のプロセッサ20自体が、メモリ部10に格納されたプログラムを読み込んで、上記のような電力制御コードが含まれるプログラムを生成するようにしてもよい。第3の実施の形態上記の第2の実施の形態では、図32に示したような関数割り当て処理の際、メモリバンクの容量より大きな再帰部を分割し、一方の関数群をそのメモリバンクに割り当て、他方の関数群を、他の分割部よりも先に、他のメモリバンクに割り当てていた。しかし、以下のようにすれば、少ないメモリバンクにも効率よく迅速に関数を割り当てることができるようになる。図42は、第3の実施の形態における関数割り当て処理の一例を示すフローチャートである。CPU101は、図32に示した例と同様に、各種情報の入力ステップS140と、各種変数の初期化ステップS141を行うが、以下に示すような項目を分割情報に追加する。図43は、初期化後の分割情報の一例を示す図である。図43に示される分割情報には、前述の図34に示したような、その分割名の関数の割り当てが済んでいるか否かを示す情報の代わりに、その分割名の分割部の残りコードサイズという項目が追加されている。残りコードサイズは、その分割名で示される分割部に含まれる関数のうち、メモリバンクへの割り当てが行われていないものの合計コードサイズを示している。初期化が終わると、CPU101は、前述の図32のステップS102の処理と同様に、分割名がMAINの関数について、メモリバンクへの割り当てを行うステップS142。続いて、CPU101は、残り容量が最大のメモリバンクM_Maxと、残りコードサイズが最大の分割部F_Maxを選択するステップS143。M_Maxには、変数m_rest[M]が最大のメモリバンクが選択される。F_Maxには、残りコードサイズが最大の分割名の関数群が選択される。以下、ステップS144~S154は、前述の図32のステップS104~S114の処理とほぼ同様である。ただし、ステップS151の処理において、CPU101は、関数群FをM_Maxに割り当てた後、分割情報において、割り当てた関数群Fを含む分割部の残りコードサイズから、関数群Fのコードサイズを減じる。図44は、分割情報の更新例を示す図である。図44では、分割名R1の分割部のうち、関数f2a~f9aのメモリバンクへの割り当て後の分割情報の更新例が示されている。上記の例において、各関数f2a~f9aのコードサイズは1.0KBであるから、合計コードサイズは8.0KBである。CPU101は、これを分割名R1の分割部の合計コードサイズから減じて、残りコードサイズを1.0KBとする。これにより、ステップS143の処理に戻った際、分割情報で管理される分割部の中から、残りコードサイズが最大の分割名R2の分割部の関数f3b~f6bが関数群Fとして選択され、メモリバンクへの割り当てが行われる。図45は、割り当て情報の更新例を示す図である。分割名R1_1の関数群が、メモリバンク番号が1のメモリバンクに割り当てられた後、分割名R1_2の関数群よりも先に、分割名R2の関数群が、メモリバンクメモリバンク番号=2に割り当てられている様子が示されている。小さいコードサイズのものを先にメモリバンクに割り当てると、後で、メモリバンクの残り容量が足りなくて、大きな関数群を配置できなくなり、エラーとなる可能性がある。しかし、以上のような関数割り当て処理によれば、残りコードサイズが大きい分割部から、メモリバンクに割り当てられるようにしたので、少ないメモリバンクにも効率よく迅速に関数を割り当てることができるようになる。第4の実施の形態以下では、さらに、より迅速に関数をメモリバンクに割り当てることが可能な関数割り当て処理について説明する。図46は、第4の実施の形態における関数割り当て処理の一例を示すフローチャートである。CPU101は、第3の実施の形態と同様に、各種情報の入力ステップS160と、各種変数の初期化ステップS161を行う。その後、CPU101は、以下に示すような早見表を作成するステップS162。図47は、早見表の一例を示す図である。早見表には、個々の分割案のコードサイズがまとめられている。なお、各分割案のコードサイズは、分割案の第2要素の値となっている。たとえば、図30に示したような、テーブルtbl1では、分割案f1a,f2aで分割したときの各関数群のコードサイズは1,8となっているため、第2要素の値の8KBが、早見表におけるコードサイズとなる。分割名がr1,r2、MAINなどの、再帰部ではない分割部については、分割案はNULLとなっており、その分割部のコードサイズが示されている。CPU101は、上記のような早見表の作成を終えると、前述の図32のステップS102の処理と同様に、分割名がMAINの関数について、メモリバンクへの割り当てを行うステップS163。続いて、CPU101は、残り容量が最大のメモリバンクM_Maxと、早見表を参照して、コードサイズが最大の分割部F_Maxを選択するステップS164。複数のメモリバンクにおいて、最大の残り容量が8KBの場合、図47の早見表の例では、8KBに収まる範囲では、分割案f1a,f2aのコードサイズが最大であるので、この分割案を有する分割名R1の分割部が分割部F_Maxとして選択される。ステップS165~S172は、図42に示したステップS144~S151の処理とほぼ同様であるが、ステップS167の処理では、早見表の前述した最大のコードサイズの分割案が選択され、その分割案の第2要素の関数群を関数群Fとして設定する。たとえば、前述の分割案f1a,f2aが設定され、第2要素の関数群関数f2a~f9aが関数群Fとして設定される。関数群FのM_Maxへの割り当て後、CPU101は、早見表を更新するステップS173。たとえば、分割案f1a,f2aの第2要素の関数群関数f2a~f9aをメモリバンクに割り当てた後、早見表は以下のように更新される。図48は、早見表の更新例を示す図である。図48のように、メモリバンクに割り当てた分割名MAINと、分割名R1のデータ以下エントリと呼ぶについては、削除されている。ただし、分割名R1の分割部のうち、上記分割案f1a,f2aの第1要素である関数f1aについては未割り当てであるので、図45に示した割り当て情報で記した分割名R1_2のエントリが新たに早見表に追加される。分割名R1_2のエントリは、コードサイズは、関数f1aのコードサイズであるから1.0KBであり、分割案についてはNULLとなっている。図46のステップS174~S176の処理については、図42のステップS152~S154の処理と同じである。関数群FのM_Maxへの割り当てと、早見表の更新が繰り返され、最後に割り当て情報が出力される。図49は、早見表作成処理の例を示すフローチャートである。CPU101は、たとえば、図43に示したような分割情報を入力しステップS180、分割情報から1エントリ図43のようなテーブルの一行のデータを取得するステップS181。そして、CPU101は、取得したエントリが再帰部であるか否かを判定するステップS182。再帰部であるか否かは、たとえば、分割情報の分割名により判別できる。図43に示した分割情報の例では、分割名がR1またはR2の場合には、再帰部として判定され、ステップS184の処理が行われる。分割名がそれ以外の場合たとえば、MAIN、r1,2などには、再帰部ではないと判定され、ステップS188の処理が行われる。CPU101は、エントリを再帰部と判定した場合、その再帰部に対する分割案を1エントリ取得するステップS184。たとえば、分割名R1の分割部再帰部の分割案は、図30に示したテーブルtbl1のような組み合わせがあり、各組み合わせたとえば、f1a,f1a、f1a,f2aなどが1エントリとして取得される。そして、CPU101は、早見表に、同一分割名で同一コードサイズのエントリが登録済みか否かを判定しステップS185、登録済みでなければ、早見表にそのエントリを登録するステップS186。早見表に登録した後、または、取得したエントリと同一分割名で同一コードサイズのエントリが登録済みの場合、CPU101は、分割案の全エントリについてのステップS184~S186の処理が完了したか否かを判定するステップS187。分割案の全エントリについてのステップS184~S186の処理が完了した場合には、ステップS189の処理が行われ、完了していないエントリが残っている場合には、そのエントリについて、ステップS184からの処理が繰り返される。一方、CPU101は、ステップS182において、分割情報のエントリが再帰部ではないと判定した場合、そのエントリを早見表に登録して、ステップS189の処理に進む。分割案の全エントリについてのステップS184~S186の処理が完了した場合、または、ステップS188の処理の後、CPU101は、分割情報の全エントリについて、ステップS181~S188の処理が完了したか否かを判定するステップS189。分割情報の全エントリについて、ステップS181~S188の処理が完了した場合には、CPU101は、早見表を出力しステップS190、たとえば、RAM102などに格納し、早見表の作成処理を終了する。分割情報の全エントリについて、ステップS181~S188の処理が完了していない場合には、ステップS181からの処理が繰り返される。以上のような処理により、図47に示したような早見表が作成される。図50は、早見表の更新処理の例を示すフローチャートである。CPU101は、早見表と分割情報とを入力しステップS200、更新対象のエントリが分割案未決定の再帰部であるか否か判定するステップS201。更新対象のエントリが分割案未決定の再帰部である場合には、ステップS202の処理が行われ、更新対象のエントリが分割案未決定の再帰部でない場合には、ステップS204の処理が行われる。たとえば、図47に示したような早見表において、コードサイズが8.0KB、分割名R1、分割案f1a,f2aのエントリを更新する場合、図43に示したような分割情報では分割名R1の分割案はNULLである。そのため、分割案未決定の再帰部と判定され、CPU101は、更新対象のエントリと同一の分割名のエントリを早見表から削除するステップS202。その後、CPU101は、分割案決定後のエントリを早見表に登録するステップS203。これにより、たとえば、図48に示したように、分割名R1のエントリが削除され、分割名R1_2のエントリが追加された早見表が得られる。一方、更新対象のエントリが分割案未決定の再帰部でない場合には、CPU101は、そのエントリを早見表から削除するステップS204。ステップS203またはS204の処理後、CPU101は早見表を出力しステップS205、たとえば、RAM102などに格納し、早見表の更新処理を終了する。以上のように、早見表を用いてメモリバンクへの関数の割り当てを行うことにより、さらに迅速に関数をメモリバンクに割り当てることが可能となる。なお、上記の電力制御方法や、電力制御コード入りのプログラムの生成処理は、たとえば、図6に示したようなハードウェア構成を有するコンピュータによって実現することができる。その場合、電子装置1,50やコンピュータ100が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、HDD、フレキシブルディスクFD、磁気テープなどがある。光ディスクには、DVD、DVD-RAM、CD-ROM/RWなどがある。光磁気記録媒体には、MOMagnetoOpticaldiskなどがある。プログラムを流通させる場合には、たとえば、そのプログラムが記録されたDVD、CD-ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。また、上記の処理機能の少なくとも一部を、DSP、ASICApplicationSpecificIntegratedCircuit、PLDProgrammableLogicDeviceなどの電子回路で実現することもできる。以上、実施の形態に基づき、本発明の電力制御方法、電子装置、プログラム及びプログラムの生成方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。"