(57)【要約】【課題】      ＲＯＭに実装されているプログラムに対して非同期に実行するパッチ処理プログラムを所定の割り込み要因に従い周期的に起動することで、ＲＯＭに実装されているプログラムにおいて欠落している処理を、フックする仕組みを仕掛けた場所以外で、補完することにより修正する。【解決手段】  複数のプログラムの実行を管理して、制御対象を制御する情報処理方法は、予めＲＯＭに実装されている第１制御プログラムの制御内容を修正する必要があるか否かを判断し、その判断結果に基づいて、制御内容を修正する場合、第１プログラムとは非同期に、所定の割り込み要因により周期的に実行する第２制御プログラムを起動させ、その起動した第２制御プログラムの処理により、第１制御プログラムが制御対象を制御する結果を判定して、第１制御プログラムの制御内容を補完するための修正処理を実行する。【選択図】  図４Ａ
2005174130.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムの実行を管理して、制御対象を制御する情報処理方法であって、
予めＲＯＭに実装されている第１制御プログラムの制御内容を修正する必要があるか否かを判断する判断工程と、
前記判断工程の判断結果に基づいて、前記制御内容を修正する場合、前記第１プログラムとは非同期に、所定の割り込み要因により周期的に実行する第２制御プログラムを起動する起動工程と、
前記起動した第２制御プログラムの処理により、前記第１制御プログラムが前記制御対象を制御する結果を判定して、当該第１制御プログラムの制御内容を補完するための修正処理を実行するパッチ処理工程と、
を備えることを特徴とする情報処理方法。
【請求項２】
前記起動工程は、前記第２制御プログラムを、タイマ割り込みを起動要因とし、周期的に起動することを特徴とする請求項１に記載の情報処理方法。
【請求項３】
前記第２制御プログラムは、書き換え可能なメモリに登録されており、その内容の編集が可能なプログラムであることを特徴とする請求項１または２に記載の情報処理方法。
【請求項４】
複数のプログラムの実行を管理して、制御対象を制御する情報処理装置であって、
予めＲＯＭに実装されている第１制御プログラムの制御内容を修正する必要があるか否かを判断する判断手段と、
前記判断手段の判断結果に基づいて、前記制御内容を修正する場合、前記第１プログラムとは非同期に、所定の割り込み要因により周期的に実行する第２制御プログラムを起動する起動手段と、
前記起動した第２制御プログラムの処理により、前記第１制御プログラムが前記制御対象を制御する結果を判定して、当該第１制御プログラムの制御内容を補完するための修正処理を実行するパッチ処理手段と、
を備えることを特徴とする情報処理装置。
【請求項５】
前記起動手段は、前記第２制御プログラムを、タイマ割り込みを起動要因とし、周期的に起動することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記第２制御プログラムは、書き換え可能なメモリに登録されており、その内容の編集が可能なプログラムであることを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
画像を撮影するための撮影手段と、
前記撮影手段を制御するために、複数のプログラムの実行を管理する情報処理手段とを備え、当該情報処理手段が、
予めＲＯＭに実装されている第１制御プログラムの制御内容を修正する必要があるか否かを判断する判断手段と、
前記判断手段の判断結果に基づいて、前記制御内容を修正する場合、前記第１プログラムとは非同期に、所定の割り込み要因により周期的に実行する第２制御プログラムを起動する起動手段と、
前記起動した第２制御プログラムの処理により、前記第１制御プログラムが前記撮影手段を制御する結果を判定して、当該第１制御プログラムの制御内容を補完するための修正処理を実行するパッチ処理手段と、
を備えることを特徴とする撮像装置。
【請求項８】
請求項１乃至請求項３のいずれか１項に記載の情報処理方法をコンピュータによって実行させることを特徴とするプログラム。
【請求項９】
請求項１乃至請求項３のいずれか１項に記載の情報処理方法をコンピュータによって実行させるためのプログラムを格納することを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＯＭに予め実装されたソフトウェアを修正処理するための情報処理技術に関するものである。
【背景技術】
【０００２】
一般にＲＯＭ上のプログラムを変更する情報処理として、いわゆるパッチ処理が用いられているが、このパッチ処理に関しては、いわゆるトラップ機能を用いて、自動的に指定されたアドレスに制御を移してプログラムモジュールの変更処理を実行することができる。また、ハードウェアのトラップ機能を用いない場合には、フラッシュＲＯＭなどの書き換え可能なＲＯＭを使用してＲＯＭプログラム自体を書き換える方法や、あらかじめ不具合が予想される個所に対して、フック（ＲＯＭ上の命令の実行前にＲＡＭ上の命令を実行）するための仕組みを用意しておく方法、例えば、以下の特許文献１に示されるものがある。
【特許文献１】特開平０７−７３０３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、フラッシュＲＯＭはマスクＲＯＭに対し高価であるし、単純なソフトウェアフック機構の場合には予想外の個所について不具合がおきると、その不具合を修正できない場合があった。
【０００４】
本発明は上記の課題を解決するべく、ＲＯＭに実装されているプログラムに対して非同期に実行するパッチ処理プログラムを所定の割り込み要因に従い周期的に起動することで、ＲＯＭに実装されているプログラムにおいて欠落している処理を、フックする仕組みを仕掛けた場所以外で、補完することにより修正する情報処理装置及び情報処理方法等を提供することを目的とするものである。
【課題を解決するための手段】
【０００５】
上記の課題を解決し、その目的を達成するべく、本発明にかかる情報処理方法、装置等は主として以下の構成を有することを特徴とする。
【０００６】
すなわち、複数のプログラムの実行を管理して、制御対象を制御する情報処理方法は、
予めＲＯＭに実装されている第１制御プログラムの制御内容を修正する必要があるか否かを判断する判断工程と、
前記判断工程の判断結果に基づいて、前記制御内容を修正する場合、前記第１プログラムとは非同期に、所定の割り込み要因により周期的に実行する第２制御プログラムを起動する起動工程と、
前記起動した第２制御プログラムの処理により、前記第１制御プログラムが前記制御対象を制御する結果を判定して、当該第１制御プログラムの制御内容を補完するための修正処理を実行するパッチ処理工程とを備えることを特徴とする。
【０００７】
好ましくは、上記の情報処理方法において、前記起動工程は、前記第２制御プログラムを、タイマ割り込みを起動要因とし、周期的に起動する。
【０００８】
あるいは、上記の情報処理方法において、前記第２制御プログラムは、書き換え可能なメモリに登録されており、その内容の編集が可能なプログラムであることが好ましい。
【０００９】
また、本発明にかかる複数のプログラムの実行を管理して、制御対象を制御する情報処理装置は、
予めＲＯＭに実装されている第１制御プログラムの制御内容を修正する必要があるか否かを判断するための判断手段と、
前記判断手段の判断結果に基づいて、前記制御内容を修正する場合、前記第１プログラムとは非同期に、所定の割り込み要因により周期的に実行する第２制御プログラムを起動する起動手段と、
前記起動した第２制御プログラムの処理により、前記第１制御プログラムが前記制御対象を制御する結果を判定して、当該第１制御プログラムの制御内容を補完するための修正処理を実行するパッチ処理手段とを備えることを特徴とする。
【発明の効果】
【００１０】
ＲＯＭに実装されているプログラムに対して非同期に実行するパッチ処理プログラムを所定の割り込み要因に従い周期的に起動することで、ＲＯＭに実装されているプログラムにおいて欠落している処理を、フックする仕組みを仕掛けた場所以外で、補完することにより修正することが可能になる。
【発明を実施するための最良の形態】
【００１１】
＜第１実施形態＞
以下添付図面を参照して本発明の好適な実施形態について詳細に説明する。
【００１２】
なお、以下に説明する実施形態では、カメラを制御するための制御ソフトウエアの制御内容を補完することにより修正する情報処理を例に挙げて説明する。
【００１３】
図１Ａは本実施形態におけるカメラの概略的な構成を示すブロック図である。制御部１には操作スイッチ（ＳＷ）２、測距回路３、測光回路４、ストロボ回路５、給送駆動及びレンズ駆動用モータ駆動回路６、シャッタ駆動回路７が接続している。更に、制御部１には、データディスク読み取りフォトリフレクタ（ＰＲ）８、シャッタの作動検出用フォトインタラプタ（ＰＩ）９、レンズ位置検出用のフォトインタラプタ（ＰＩ）１０（これを、「鏡筒フォトインタラプタ（ＰＩ）」ともいう。）、給送検出用フォトリフレクタ（ＰＲ）１１も接続している。制御部１に接続する測距回路３には距離を計測するための測距センサ１２、測光回路４には測光センサ１３、そしてストロボ回路５には発光部１４が接続している。給送駆動及びレンズ駆動用モータ駆動回路６には給送駆動用モータ（Ｍ１）１５及びレンズ駆動用モータ（Ｍ２）１６が接続し、シャッタ駆動回路７にはシャッタ１７が接続している。
【００１４】
更に、制御部１には磁気記録用ヘッド駆動回路１８が接続しており、磁気記録用ヘッド駆動回路１８は読み書き兼用の磁気ヘッド１９の駆動を制御する。
【００１５】
制御部１は図１Ｂに示すように、ＣＰＵ２１、ＲＡＭ２２、ＲＯＭ２３、ＥＥＰＲＯＭ２４、タイマ２５を有している。ＣＰＵ２１は、前述の図１Ａにおける各回路（３，４，５，６，７，１８）及び操作スイッチ（ＳＷ）２、Ａ／Ｄ変換器２０、更には各フォトインタラプタ（８、１１）と接続しており、ＲＯＭ２３に格納されている制御プログラムによりカメラ１００全体の制御を行なうと共に、操作ＳＷ２からの操作入力に対応してカメラの各機能の実行制御、例えば、ＲＯＭ内に格納された各処理モジュールの実行による各機能の実現のための実行制御を行なう。ＲＡＭ２２はデータ或いは処理結果の一時記憶及び中間作業領域等に用いられる。ＲＯＭ２３は前述の制御プログラム及びデジタルカメラ１００のその他の各機能を実行させるためのプログラムモジュールを記録する記録媒体である。
【００１６】
ＥＥＰＲＯＭ２４には、後に説明するパッチ処理用のプログラム群、およびデータテーブル（図６）が格納されており、ＣＰＵ２１は、カメラ１００を制御するためのプログラムの実行において、ＥＥＰＲＯＭ２４に格納されているパッチ処理用のプログラム（詳細は図５Ａ、Ｂで説明する。）を呼び出し、必要な修正処理を施してカメラの動作を制御する。
【００１７】
タイマ２５は、パッチ処理プログラムを起動するための割り込み要因となる制御周期となるタイミング情報を生成する。ＣＰＵ２１はタイマ２５が生成するタイミング情報を用いて適切な制御周期を設定してパッチ処理プログラムを起動させることができる。このタイミング情報は、図３の鏡筒制御におけるフォトインタラプタからの出力信号処理を説明する図におけるサンプリング間隔と同調するようにしてもよい。
【００１８】
次に、上記カメラにおける撮影時の動作の流れを、図２に示すフローチャートを用いて説明する。この撮影時の動作は、未露光及び途中まで露光したフィルムカートリッジが装填された場合の動作を例としている。まず、電源ＯＦＦの状態（図２のＳ１）から、操作スイッチ（ＳＷ）２内の不図示のメインＳＷをＯＮするためにバリア開閉ボタンが操作されると（Ｓ２）、バリア開動作を行なう（Ｓ３）。モータ駆動回路６によるレンズ駆動モータ（Ｍ２）１６への通電によりレンズ鏡筒が沈端位置からＷＩＤＥ端まで繰り出す。その際にレンズバリアが開動作する。
【００１９】
尚、フローには記載していないが、レンズバリアが開動作（Ｓ３）した後は、測光回路４により測光演算し、測光結果が所定レベル未満のときはストロボ回路５を作動させ、ストロボ発光用のコンデンサの予備充電が行なわれる。一方、測光結果が所定レベル以上のときはそのまま撮影可能状態となる。バリア開動作において、レンズ位置検出用フォトインタラプタ（ＰＩ）１０の信号変化を得て、レンズ位置を検出する。このレンズ位置検出用フォトインタラプタの信号検出についての詳細な説明は後述する。
【００２０】
処理をステップＳ４に進め、撮影待機状態において操作ＳＷ２に属するレリーズボタンが第１ストローク操作（半押し操作）され（この操作をＳＷ１とする）、ＳＷ１のＯＮを検出すると（Ｓ５−Ｙｅｓ）、処理をステップＳ６に進めてバッテリーチェック（ＢＣ）を行なう。電源電池の電圧が所定値以上であれば（Ｓ７−Ｙｅｓ）、処理をステップＳ８に進めて測距（焦点検出）動作に移行する。一方、電源電池の電圧が所定値未満であれば（Ｓ７−Ｎｏ）、処理をステップＳ４の撮影待機状態に戻す。なお、電圧不足の場合、制御部１はレリーズキーをロックをして、キー入力に基づいてカメラが動作しないように制御する。このとき、制御部１は電池の交換が必要である旨を撮影者に警告することができる。
【００２１】
ステップＳ８において測距動作が終了すると、処理をステップＳ９に進め、測光動作を実行する。この際、測光回路４により被写体の輝度が測定され、制御部１はその測定結果に基づいて測光演算する。演算結果が所定輝度以下の場合であって、ストロボ発光が許可されているときにはストロボ充電動作をおこなう。ストロボ充電動作は、ストロボ回路５を駆動し、発光用の電荷エネルギーをメインコンデンサに蓄える動作である。前述した予備充電電圧に加え所定電圧値まで充電し、到達した時点で充電を停止する。
【００２２】
ステップＳ９の測光動作時が完了すると、ステップＳ１０のＳＷ２のＯＮ待ちのシーケンスへ移行する。ステップＳ１０では、操作ＳＷ２に属するレリーズボタンの第２ストローク操作（全押し操作（この操作をＳＷ２とする））でＯＮする。このＳＷ２のＯＮ信号は制御部１に入力され、ＳＷ２がＯＮされると（Ｓ１０−Ｙｅｓ）、ステップＳ１１のフォーカス駆動動作に移行する（Ｓ１１）。ステップＳ１１のフォーカス駆動処理においては、前述のステップＳ８での測距結果から制御部１で演算した結果に基づくフォーカス値を達成するために、モータ駆動回路６によりレンズ駆動モータ（Ｍ２）１６が駆動制御される。モータ回転に対応したパルス信号を検出するため、レンズ位置検出用フォトインタラプタ１０の出力信号により、設定されるべきレンズ位置が決定される。
【００２３】
一連のフォーカス駆動が完了すると、処理をステップＳ１２のシャッタ制御に移行する。まずステップＳ９の測光処理で得られた被写体輝度に対応するシャッタスピード及びシャッタ開口が決定され、シャッタ駆動回路７によりシャッタ１７が駆動される。シャッタ作動検出用フォトインタラプタ（ＰＩ）９からのパルス信号でシャッタ開口時間やストロボの発光タイミングが制御される。ステップＳ１２におけるシャッタ制御が終了すると、処理をステップＳ１３に進め、フォーカスリセット駆動処理に移行する。ここでは、モータ駆動回路６によりレンズ駆動モータ（Ｍ２）１６に通電して、ステップＳ１１におけるフォーカス駆動で繰り出されたレンズ鏡筒を待機位置まで戻す処理を行なう。
【００２４】
ステップＳ１３のフォーカスリセット駆動の終了後は、処理をステップＳ１４に進め、フィルム巻上げシーケンスに移行する。このフィルム巻上げシーケンスは、モータ駆動回路６により給送モータ（Ｍ１）１５を駆動することにより行われる。給送モータ（Ｍ１）１５の制御は給送検出用フォトリフレクタ１１の信号、更には、データディスクのセンサ位置を検出するデータディスク読み取りフォトリフレクタ８の信号を用いて行なう。
【００２５】
このフィルム巻上げ動作の際に、磁気記録用ヘッド駆動回路１８により書き込み／読み取り可能な磁気ヘッド１９を作動させる。これにより、フィルムの磁気記録部に各種の撮影に関する情報（ＩＸ情報や撮影済み情報等）を磁気記録する。この際、ＶＥＩを「途中まで露光済み」表示とする。ステップＳ１４のフィルム巻上げシーケンスが正常に行なわれると、一連の撮影シーケンスを終了する。
【００２６】
次に、鏡筒制御におけるフォトインタラプタからの出力信号処理について、図３を用いて説明する。フォトインタラプタからのアナログ出力信号（曲線で描かれたＰＩ生信号Ａ）は制御部１に接続するＡ／Ｄ変換器２０に入力される。Ａ／Ｄ変換器２０は入力される信号を、あらかじめ適切な値に調整してある閾値に基づき二値のパルス信号（整形後波形Ｂ）に変換する。制御部１は、このパルス信号の立ち上がり、立ち下がりの両エッジを全てカウントすることで、鏡筒の位置情報を検出し、この検出した位置情報に基づきモータ駆動回路６を介してレンズ駆動モータ（Ｍ２）１６を制御する。
【００２７】
ＣＰＵ２１が実行する制御プログラムはＲＯＭ２３に実装されており、この制御プログラムの実行により鏡筒の位置制御が実行される。図４Ｂは、鏡筒の位置制御のための制御プログラムの処理ステップの流れを説明するフローチャートであるが、ここでは、ＲＯＭ２３に実装されているプログラムを修正する例として、ステップＳ２４の後に、本来行なうべき「レンズ位置検出用フォトインタラプタ１０用のＬＥＤを消灯」するための処理が欠落している例を説明する。
【００２８】
まず、ステップＳ２３において、鏡筒駆動制御のために必要なレンズ位置検出用フォトインタラプタ１０用のＬＥＤを点灯させ、ステップＳ２４において、モータ駆動回路６を介してレンズ駆動モータ（Ｍ２）１６に通電を行い鏡筒を駆動する。この際、レンズ位置検出用フォトインタラプタ１０からの信号を用い、鏡筒を所定の位置に停止させる。図４Ｂに示す鏡筒の位置制御プログラムはここで処理を終えているが、本来であれば、鏡筒の駆動処理が終わった後に、フォトインタラプタ用のＬＥＤを消灯するといった後処理が必要となる。この制御プログラムにはＬＥＤを消灯できないといったバグが存在していることになる。
【００２９】
このような場合、例えば、前述したカメラ１００における一連の撮影シーケンスで、鏡筒をフォーカス制御した後に露光動作を行い、フィルム給送を行うが、ここで、シャッタ制御や給送制御に関してもフォトインタラプタやフォトリフレクタが用いられており、鏡筒制御で点灯したＬＥＤが消灯できないことにより、シャッタ制御やフィルム給送が誤動作してしまうこともありえる。そこで、ＲＯＭ２３に既に実装されているプログラムを実行する場合には、以下に説明する修正処理を含めた鏡筒の位置制御の実行が必要になる。
【００３０】
＜パッチ処理用のプログラムの登録＞
図４Ａは、修正処理を含めた鏡筒の位置制御プログラムの処理の流れを説明するフローチャートである。
【００３１】
まず、ステップＳ２１において、ＣＰＵ２１はＲＯＭ２３に実装されている制御プログラムに対して修正が必要かどうかを判断する。制御プログラムの修正が必要であれば（Ｓ２１−Ｙｅｓ）、処理をステップＳ２２に進めてＥＥＰＲＯＭ２４上の修正処理を実行するためのプログラム（以下、「コールバック関数」という。）を登録するための処理を実行する（図５Ａ）。
【００３２】
一方、ＲＯＭ２３に実装されている制御プログラムの修正が必要なければ（Ｓ２１−Ｎｏ）、ステップＳ２３に処理を進め、鏡筒駆動制御のために必要なレンズ位置検出用フォトインタラプタ１０用のＬＥＤを点灯させ（Ｓ２３）、モータ駆動回路６を介してレンズ駆動モータ（Ｍ２）１６に通電を行い鏡筒を駆動する（Ｓ２４）。この際、レンズ位置検出用フォトインタラプタ１０からの信号を用い、鏡筒を所定の位置に停止させる。
【００３３】
上述の図４Ｂのケースの場合、すでにＲＯＭ２３に実装されている（ＲＯＭ化されている）プログラムはその内容を変更することはできないので、パッチ処理によりＬＥＤを消灯する処理を修正処理として補完する必要がある。ここで、図５Ａ、ＢによりＬＥＤを消灯するための修正処理について説明する。
【００３４】
図４Ｂのフローチャートにおいて、プログラムを修正する場合に最もオーソドックスな方法としては、図４ＢのステップＳ２４における鏡筒駆動制御の後に、ＬＥＤを消灯するための処理ステップをパッチ処理により追加することであるが、このためには、ステップＳ２４の後ろにパッチプログラムの呼び出し処理が埋め込まれている必要がある。
【００３５】
しかしながら、前もってＲＯＭプログラムに発生するバグ部分を予想することは不可能であり、適切な部分にパッチプログラムの呼び出しを埋め込んでおくことは非常に困難である。本実施形態で説明する修正処理では、図５Ａ、Ｂのフローチャートで示すパッチプログラムをＥＥＰＲＯＭ２４上に用意しておき、ＲＯＭ２３に実装されているプログラムにおいて、本来修正が必要な部分以外からのパッチ処理の呼び出しによって、プログラム上の問題を修正している。図４Ｂで説明したフローチャートでは、本来修正が必要な箇所は、ステップＳ２４の後ろであるが、図４Ａのフローチャートでは、修正が必要か否かのオプション設定を制御シーケンスの冒頭であるステップＳ２１、Ｓ２２に設け、これらのステップから修正処理が必要な場合はステップＳ２２からＥＥＰＲＯＭ２４上のパッチプログラムが呼び出される。
【００３６】
図４ＡのステップＳ２１において、プログラムの修正が必要かどうかの判断が行われるが、ここでの判断処理はＥＥＰＲＯＭ２４上のプログラムを呼び出してパッチ処理が必要であるかどうかのフラグを用意し、このフラグを参照することにより判断してもよいし、実際にパッチ処理プログラムを呼び出しておいて、もし必要がない場合はＥＥＰＲＯＭ２４上のプログラムになにも処理を行なわせずに処理を終了するようにしてもよい。
【００３７】
図６はＥＥＰＲＯＭ２４に設けられたデータテーブルであり、制御対象６０１（鏡筒の位置制御、シャッタの駆動制御、磁気ヘッドの駆動制御など）と各制御対象に対してパッチ処理が必要か否かを識別するためのフラグ情報６０２（例えば、「１」はパッチ処理が必要であることを示し、「０」はパッチ処理が必要でないことを示す。）、そして各制御対象に対するパッチ処理プログラム６０３が対応付けらた状態で格納されている。フラグ情報６０２は、ユーザが操作ＳＷ２を介してマニュアル操作により設定してもよいし、カメラ駆動において不具合が発生した制御対象を制御部１が監視して、その監視結果に従ってＲＯＭ２３に実装されている各制御プログラムを修正するようにフラグ情報６０２を書き換えるようにしてもよい。また、パッチ処理プログラム６０３（ａ〜ｆ）は、書き換え可能なメモリ上に格納されており、そのプログラムの内容は編集を加えることによりカスタマイズすることができるものである。これにより、内容の変更ができないＲＯＭ２３に実装されている制御プロクラムに対して、柔軟な修正処理を施すことが可能になる。
【００３８】
ここでは、鏡筒の位置制御プログラムの修正が必要（フラグ＝１）であるとして（Ｓ２１−Ｙｅｓ）、ステップＳ２２から図５Ａにおけるパッチ処理プログラム（処理Ａ）が呼び出され、処理Ａのプログラムは、ＲＯＭ２３に実装されている制御プログラム（図４Ｂ）を補完することにより修正するための準備として、タイマ割り込みによるコールバック関数として処理Ｂ（図５Ｂ）を鏡筒の位置制御プログラムに登録する（Ｓ３１）。この登録処理が終了した後、図４Ａの制御プログラムのシーケンスに処理を復帰させ、これ以降、図４Ａのフローチャートの処理において、タイマ割り込み により周期的に呼び出されるコールバック関数として登録された処理Ｂ（図５Ｂ）は図４Ａに示す一連の制御プログラムの実行とは非同期に実行されることになる。
【００３９】
＜コールバック関数の登録＞
ここで、割り込み要因によるコールバック関数の登録について具体的に説明する。ＲＯＭ２３に実装されているプログラムには、各種割り込み要因により発生する割り込み処理から呼び出すことのできる関数を登録するためのステップが予め実装されている（図４Ａの場合では、ステップＳ２１、Ｓ２２が対応する。）。ここで、割り込み要因としては、レリーズボタンなどの部材が操作されると発生する操作入力キーによる割り込みや、Ａ／Ｄ変換が終了したタイミングで発生するＡ／Ｄ割り込み、タイマカウンタのオーバフロー、一致検出で発生するタイマ割り込みなどがある。タイマ割り込みによるコールバック関数の登録に関して用意されているＣ言語によるI/Fである SetTimerCallback(  ) 関数は、引数として、例えば、タイマの種類、コールバック関数のポインタ、一致検出のためのタイマカウンタをとることができる。
【００４０】
ＲＯＭ２３に実装されている制御プログラム上のステップＳ２２から呼び出されたＥＥＰＲＯＭ２４上のパッチ処理用の処理Ａのプログラムは、ＲＯＭ２３に実装されている SetTimerCallback(  ) 関数を呼び出すことで、ＥＥＰＲＯＭ２４上のプログラム処理Ｂがタイマ割り込みにより周期的に起動されるように登録する。処理Ａのプログラム（図５Ａ）が呼び出された段階では、まだＲＯＭ２３に対する補完による修正はなされておらず、以後ＲＯＭ２３に実装されている制御プログラムとは非同期に起動される処理Ｂのプログラム（図５Ｂ）によって、制御プログラムの制御内容は、適切なタイミングで補完されることとなる。
【００４１】
次に、割り込み要因によるコールバック関数として登録された処理Ｂのプログラムの内容について説明する。図５Ｂのフローチャートに示す処理Ｂは、タイマ割り込みにより周期的に起動されるが、まずステップＳ４１において、ＲＡＭ２２上のモータ駆動中フラグを確認し、フラグ（＝１）が立っていなければ（Ｓ４１−Ｎｏ）、処理をステップＳ４２に進める。フラグ（＝１）が立っていれば（ＳＳ４１−Ｙｅｓ）、処理をステップＳ４３に進める。モータ駆動中か否かを特定するためのフラグは、制御部１の管理の下、モータの駆動状態に応じたフラグ値（「１」または「０」）が中間作業領域等に用いられるＲＡＭ２２に格納される。このモータ駆動中フラグは、先ほどの処理Ａのプログラム（図５Ａ）におけるコールバック関数の登録時に初期値としてフラグ＝０（モータは停止）としてクリアされているものとする。
【００４２】
ステップＳ４２では、モータ駆動信号を確認し駆動信号が確認されれば（Ｓ４２−Ｙｅｓ）、処理をステップＳ４４に進めてモータ駆動中フラグを１にセットして（Ｓ４４）、処理を終了する。このステップでは、停止していたモータが駆動状態に制御が切り替えられたか否かを判断する。
【００４３】
一方、モータ駆動信号が検出されなければ（Ｓ４２−Ｎｏ）、制御部１はそのままフラグの値を更新しないで処理を終了する。ここで、「モータ駆動信号」とは、例えばモータ駆動回路６を動作させるための入力信号をいう。レンズ駆動モータ（Ｍ２）１６を駆動する場合、レンズ鏡筒が沈端位置へ戻るための回転、またはＷＩＤＥ端方向へ進む場合の回転、及び鏡筒の位置を保持するためのブレーキといった制御が２つの入力信号の制御によって行えるが、この入力信号（制御部１側から見ると出力信号）の状態を監視することで鏡筒が駆動中かどうかを確認することができる。
【００４４】
ステップＳ４２の判断において、制御部１がモータ駆動信号を検出した場合（Ｓ４２−Ｙｅｓ）、処理をステップＳ４４に進めて、制御部１は、モータ駆動中フラグを「１」に更新して処理を終了する。
【００４５】
一方、ステップＳ４１の判断で、モータ駆動中フラグ（＝１）が立っていた場合は（Ｓ４１−Ｙｅｓ）、処理をステップＳ４３に進め、ここでも同様にモータ駆動信号の検出の有無を確認する。このステップでは、モータ駆動状態が継続しているか否かを判断する。ステップＳ４３における判断で、実際にモータ駆動信号を検出した場合（Ｓ４３−Ｙｅｓ）、処理をそのまま終了させ、モータ駆動信号が検出されない場合（モータの駆動が停止している場合）は（Ｓ４３−Ｎｏ）、処理をステップＳ４５に進め、ＬＥＤを消灯する。そして、処理をステップＳ４６に進め、タイマ割り込みのコールバックを解除するための手続きを行い、処理を終える。ステップＳ４５の処理は、図４Ｂで欠落していた、ＬＥＤの消灯を行なうための修正処理ステップであり、処理Ｂのプログラムを図４Ａの制御プログラムの処理フローとは、非同期に実行させることにより、モータの駆動状態に応じて、必要な補完による修正処理を実行することが可能になる。
【００４６】
タイマ割り込みのコールバック関数の登録を解除するための手続には、先に説明したSetTimerCallback(  ) の登録と同様に、ＲＯＭ２３にすでに用意されているI/Fである関数を利用することができる。例えば、単にタイマ割り込みを禁止する処理や、あるいはタイマの動作を停止させる処理などが考えられる。タイマ割り込みを禁止する処理等を実行するための処理がステップＳ４６で呼び出され、図４ＡのステップＳ２２の処理に対して登録されると、以降、図４Ａにおける処理において、図５Ｂのフロー（処理Ｂ）が起動されることはなくなる。
【００４７】
上記のＥＥＰＲＯＭ２４上の修正プログラムによる処理は、ＲＯＭ２３上に実装されている制御プログラムとは非同期に行われるため、制御プログラム（図４Ａ）においては、パッチ処理（図５Ｂ）がバックグラウンドで行われていることとは無関係に処理が進められ、例えば、レリーズキーの押下による処理で言えば、鏡筒のフォーカス駆動が終わり、シャッタを駆動しようとした段階では、鏡筒を駆動するためのモータの駆動状態は図５Ｂの処理においてモニターされており、モータの駆動停止が確認されると（Ｓ４３−Ｎｏ）、鏡筒制御用のフォトインタラプタＬＥＤは消灯されることになる（Ｓ４５）。尚、図５Ｂのプログラムを実行されるために設定される割り込み周期は適切な制御周期を確保するための値が用いられることが好ましい。
【００４８】
以上説明した実施形態では割り込み要因としてタイマ割り込みを使用し、周期的に起動されるコールバック関数内で、制御部１から出力されるモータ駆動制御用の出力信号を監視することでパッチ処理のタイミングが検出され、ＲＯＭに実装された制御プログラムの修正を行ったが、コールバック関数を起動するための割り込み要因はタイマ割り込みに限定されるものではなく、例えば通信制御に用いられるシリアルＩ／Ｏに関する信号を割り込み要因としてもよいし、また、Ａ／Ｄ変換に関する信号を割り込み要因としてもよい。
【００４９】
以上説明したとおり本実施形態によれば、ＲＯＭに実装されているプログラムに対して非同期に実行するパッチ処理プログラムを所定の割り込み要因に従い、周期的に起動することで、ＲＯＭに実装されているプログラムにおいて欠落している処理を、フックする仕組みを仕掛けた場所以外で、補完することにより修正することが可能になる。
【００５０】
＜第２実施形態＞
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェア（図４Ａ、図５Ａ、図５Ｂの手順）のプログラムコードを記憶した記憶媒体を、システムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００５１】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【００５２】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【００５３】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【図面の簡単な説明】
【００５４】
【図１Ａ】実施形態におけるカメラの概略的な構成を示すブロック図である。
【図１Ｂ】制御部１の構成を示すブロック図である。
【図２】実施形態におけるカメラの撮影動作に関するフローチャートである。
【図３】鏡筒制御におけるフォトインタラプタからの出力信号処理を説明する図である。
【図４Ａ】修正処理を含めた鏡筒の位置制御プログラムの処理の流れを説明するフローチャートである。
【図４Ｂ】鏡筒の位置制御のための制御プログラムの処理ステップの流れを説明するフローチャートである。
【図５Ａ】修正処理を実行するコールバック関数の組み込み処理を説明するフローチャートである。
【図５Ｂ】修正処理を実行するコールバック関数の処理の流れを説明するフローチャートである。
【図６】ＥＥＰＲＯＭ２４に設けられたデータテーブルの構成例を説明する図である。
【符号の説明】
【００５５】
１：制御部
２：操作スイッチ
３：測距回路
４：測光回路
５：ストロボ回路
６：モータ駆動回路
７：シャッタ駆動回路
８：データティスク読み取りフォトリフレクタ（ＰＲ）
９：シャッターの作動検出用フォトインタラプタ（ＰＩ）
１０：レンズ位置検出用のフォトインタラプタ（ＰＩ）
１１：給送検出用フォトリフレクタ（ＰＲ）
１２：測距センサ
１３：測光センサ
１４：発光部
１５：給送駆動用モータ（Ｍ１）
１６：レンズ駆動用モータ（Ｍ２）
１７：シャッタ
１８：磁気記録用ヘッド駆動回路
１９：磁気ヘッド
【図１Ａ】
2005174130.tif 000003
【図１Ｂ】
2005174130.tif 000004
【図２】
2005174130.tif 000005
【図３】
2005174130.tif 000006
【図４Ａ】
2005174130.tif 000007
【図４Ｂ】
2005174130.tif 000008
【図５Ａ】
2005174130.tif 000009
【図５Ｂ】
2005174130.tif 000010
【図６】
2005174130.tif 000011