(57)【要約】【課題】  低コストで、ＲＯＭのコードの不具合を解消できる情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法を提供する。【解決手段】  情報処理装置３０は、ＣＰＵ３２と、ＣＰＵ３２の実行コードが格納されるＲＯＭ３４と、ＣＰＵ３４により読み出されるコードのアドレス情報が格納されるアドレス管理用メモリと、実行コードのパッチコードを格納するためのパッチコード用メモリとを含む。アドレス情報が、実行コードが格納されるＲＯＭ３４のアドレスのうちパッチコードに置き換えられるＲＯＭ３４のアドレスに代えて、パッチコードが格納されるパッチコード用メモリのアドレスを含む。ＣＰＵ３２は、アドレス管理用メモリに格納されるアドレス情報に基づいてＲＯＭ３４又はパッチコード用メモリから読み出されたコードに対応した処理を行う。【選択図】      図２
2008198060.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵ（Central Processing Unit)と、
前記ＣＰＵの実行コードが格納されるＲＯＭ（Read Only Memory)と、
前記ＣＰＵにより読み出されるコードのアドレス情報が格納されるアドレス管理用メモリと、
前記実行コードのパッチコードを格納するためのパッチコード用メモリとを含み、
前記アドレス情報が、
前記実行コードが格納される前記ＲＯＭのアドレスのうち前記パッチコードに置き換えられる前記ＲＯＭのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含み、
前記ＣＰＵが、
前記アドレス管理用メモリに格納される前記アドレス情報に基づいて前記ＲＯＭ又は前記パッチコード用メモリから読み出されたコードに対応した処理を行うことを特徴とする情報処理装置。
【請求項２】
請求項１において、
前記アドレス管理用メモリには、
前記実行コードが格納される前記ＲＯＭのアドレスが格納された後に、前記パッチコードに置き換えられる前記ＲＯＭのアドレスが、前記パッチコードが格納される前記パッチコード用メモリのアドレスにより上書きされることを特徴とする情報処理装置。
【請求項３】
請求項１又は２において、
前記パッチコードが、
前記実行コードのソースコードの関数単位で生成されたコードであることを特徴とする情報処理装置。
【請求項４】
請求項１又は２において、
前記パッチコードが、
前記実行コードのソースコードのファイル単位で生成されたコードであることを特徴とする情報処理装置。
【請求項５】
請求項１又は２において、
前記パッチコードが、
所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであることを特徴とする情報処理装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記アドレス管理用メモリ及び前記パッチコード用メモリが、ＲＡＭ（Random Access Memory）であることを特徴とする情報処理装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記ＲＯＭが、
ＲＯＭの製造工程において１回だけコードが書き込み可能なメモリであることを特徴とする情報処理装置。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記ＲＯＭが、
マスクＲＯＭ又はワンタイムＲＯＭであることを特徴とする情報処理装置。
【請求項９】
請求項１乃至８のいずれか記載の情報処理装置と、
展開前の前記パッチコードが格納されるパッチコード格納メモリとを含み、
前記パッチコード格納メモリから読み出された前記パッチコードが前記パッチコード用メモリに展開されると共に、前記実行コードが格納される前記ＲＯＭのアドレスのうち前記パッチコードに置き換えられる前記ＲＯＭのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含むアドレス情報が前記アドレス管理用メモリに格納されることを特徴とするパッチコード実装システム。
【請求項１０】
請求項９記載のパッチコード実装システムと、
前記情報処理装置の処理結果に基づいて制御される周辺装置とを含むことを特徴とする電子機器。
【請求項１１】
ＲＯＭ（Read Only Memory）に格納される実行コードの少なくとも一部に代えてＣＰＵ（Central Processing Unit）により実行されるパッチコードの実装方法であって、
前記実行コードが格納されるＲＯＭのアドレス情報をアドレス管理用メモリに配置し、
前記パッチコードと前記実行コードとをリンクしたコードを生成し、
該コードから前記パッチコードを取り出し、
前記パッチコードをパッチコード用メモリに配置すると共に、前記パッチコードと前記実行コードのリンク後のアドレス情報を前記アドレス管理用メモリに上書きすることを特徴とするパッチコードの実装方法。
【請求項１２】
ＲＯＭ（Read Only Memory）に格納される実行コードの少なくとも一部に代えてＣＰＵ（Central Processing Unit）により実行されるパッチコードの実装方法であって、
パッチコード用ソースコードに基づいて生成されたパッチコード用オブジェクトファイルをリンク処理して前記パッチコードを生成し、
前記パッチコードをパッチコード用メモリに配置すると共に、予め前記実行コードのＲＯＭのアドレス情報が格納されるアドレス管理用メモリに、リンク処理後の前記パッチコードのアドレス情報を上書きすることを特徴とするパッチコードの実装方法。
【請求項１３】
請求項１１又は１２において、
前記パッチコードが、
前記実行コードのソースコードの関数単位で生成されたコードであることを特徴とするパッチコードの実装方法。
【請求項１４】
請求項１１又は１２において、
前記パッチコードが、
前記実行コードのソースコードのファイル単位で生成されたコードであることを特徴とするパッチコードの実装方法。
【請求項１５】
請求項１１又は１２において、
前記パッチコードが、
所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであることを特徴とするパッチコードの実装方法。
【請求項１６】
請求項１１乃至１５のいずれかにおいて、
前記アドレス管理用メモリ及び前記パッチコード用メモリが、ＲＡＭ（Random Access Memory）であることを特徴とするパッチコードの実装方法。
【請求項１７】
請求項１１乃至１６のいずれかにおいて、
前記ＲＯＭが、
ＲＯＭの製造工程において１回だけコードが書き込み可能なメモリであることを特徴とするパッチコードの実装方法。
【請求項１８】
請求項１１乃至１７のいずれかにおいて、
前記ＲＯＭが、
マスクＲＯＭ又はワンタイムＲＯＭであることを特徴とするパッチコードの実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法に関する。
【背景技術】
【０００２】
近年の電子機器の高機能化は、集積回路技術の進歩によるところが大きい。このような電子機器には、ますます高性能化される中央演算処理装置（Central Processing Unit：以下、ＣＰＵ）や、ますます大容量化する読み出し専用メモリ（Read Only Memory：以下、ＲＯＭ）及びランダムアクセスメモリ（Random Access Memory：以下、ＲＡＭ）が実装される。そして、ＣＰＵ、ＲＯＭ及びＲＡＭにより、電子機器の種々の複雑な制御が実現される。
【０００３】
このような電子機器の製造メーカ側は、ユーザの要求を満足させるような機能を次々と実現していく必要があり、ＣＰＵ、ＲＯＭ及びＲＡＭにより実現される機能はより高機能化が望まれる。そのため、複雑な制御を実現するプログラムの設計や検査に、多くの工数がかけられる。
【０００４】
ところで、最終的に検査をパスして量産化されたＲＯＭのコードにも不具合が存在し、電子機器の誤動作等の原因となることがある。この場合、ＲＯＭのコードを変更することが不可能であるため、ＲＯＭ自体を交換する必要があり、多大な費用を費やしていた。
【０００５】
このようなＲＯＭのコードに存在する不具合対策が、例えば特許文献１及び特許文献２に開示されている。
【０００６】
特許文献１では、バグの発生した固定記憶手段の記憶情報の修正アドレスと修正内容とを記憶させ、コンパレータにより処理手段の実行アドレスをモニタさせる。そして、コンパレータにより処理の実行アドレスと修正アドレスとを比較し、両アドレスが一致したときに出力される一致信号を割込要求信号として発生させる。この割込要求信号により、固定記憶手段から修正内容記憶手段に処理手段のアクセスを切り換える。
【０００７】
また、特許文献２では、パッチ情報検索手段、アドレス演算手段及びパッチ処理手段からなるパッチライブラリを目的プログラム内に備えさせ、目的プログラムの起動時にパッチテーブルからパッチ情報を検索させる。アドレス演算手段は、パッチ情報を用いてパッチデータが格納されたアドレスを演算し、パッチ処理手段が該パッチデータでパッチ処理を行う。
【特許文献１】特開平６−３１８２６１号公報
【特許文献２】特開平６−２４２９９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１には、処理手段のアドレスをモニタするコンパレータや割込要求信号を発生させるハードウェアを付加回路として設ける必要がある。そのため、特許文献１に開示された技術が適用される電子機器では、予めバグが発生することを想定して専用の付加回路を設けておく必要があり、製造コストが高くなるという問題がある。
【０００９】
また、特許文献２には、パッチライブラリを目的プログラム内に備えさせる必要がある。そのため、特許文献２に開示された技術が適用される電子機器においても、予めバグが発生することを想定して目的プログラムの容量が大きくなってしまい、電子機器に搭載されるメモリのコスト高を招くという問題がある。
【００１０】
以上のように、予めＲＯＭのコードのバグ等の不具合の発生を前提に装置が構成されてコスト高となることを回避することが望ましく、低コストでＲＯＭのコードの不具合を解消できることが望ましい。
【００１１】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、低コストで、ＲＯＭのコードの不具合を解消できる情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法を提供することにある。
【００１２】
また本発明の他の目的は、予め不具合の発生した構成を採用することなく、低コストで、ＲＯＭのコードの不具合を解消できる情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法を提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決するために本発明は、
ＣＰＵ（Central Processing Unit)と、
前記ＣＰＵの実行コードが格納されるＲＯＭ（Read Only Memory)と、
前記ＣＰＵにより読み出されるコードのアドレス情報が格納されるアドレス管理用メモリと、
前記実行コードのパッチコードを格納するためのパッチコード用メモリとを含み、
前記アドレス情報が、
前記実行コードが格納される前記ＲＯＭのアドレスのうち前記パッチコードに置き換えられる前記ＲＯＭのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含み、
前記ＣＰＵが、
前記アドレス管理用メモリに格納される前記アドレス情報に基づいて前記ＲＯＭ又は前記パッチコード用メモリから読み出されたコードに対応した処理を行う情報処理装置に関係する。
【００１４】
本発明においては、ＲＯＭに実行コードが格納され、アドレス管理用メモリにアドレス情報が格納され、更にパッチコード用メモリに実行コードのパッチコードが格納される。そして、ＣＰＵが該アドレス情報に基づいて、ＲＯＭ又はパッチコード用メモリから読み出したコードに対応した処理を行うようにしたので、ＲＯＭの実行コードに代えてパッチコードを実行できる。これにより、ＲＯＭのコードの不具合を低コストで解消できるようになる。
【００１５】
また本発明に係る情報処理装置では、
前記アドレス管理用メモリには、
前記実行コードが格納される前記ＲＯＭのアドレスが格納された後に、前記パッチコードに置き換えられる前記ＲＯＭのアドレスが、前記パッチコードが格納される前記パッチコード用メモリのアドレスにより上書きされてもよい。
【００１６】
本発明によれば、アドレス管理用メモリに、パッチコードが格納されるパッチコード用メモリのアドレスを上書きするようにしたので、予め不具合の発生した構成を採用することなく、ＲＯＭコードの不具合を解消できるようになる。
【００１７】
また本発明に係る情報処理装置では、
前記パッチコードが、
前記実行コードのソースコードの関数単位で生成されたコードであってもよい。
【００１８】
また本発明に係る情報処理装置では、
前記パッチコードが、
前記実行コードのソースコードのファイル単位で生成されたコードであってもよい。
【００１９】
また本発明に係る情報処理装置では、
前記パッチコードが、
所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
【００２０】
また本発明に係る情報処理装置では、
前記アドレス管理用メモリ及び前記パッチコード用メモリが、ＲＡＭ（Random Access Memory）であってもよい。
【００２１】
また本発明に係る情報処理装置では、
前記ＲＯＭが、
ＲＯＭの製造工程において１回だけコードが書き込み可能なメモリであってもよい。
【００２２】
また本発明に係る情報処理装置では、
前記ＲＯＭが、
マスクＲＯＭ又はワンタイムＲＯＭであってもよい。
【００２３】
上記のいずれかの発明によれば、情報処理装置のより一層の低コスト化を実現できるようになる。
【００２４】
また本発明は、
上記のいずれか記載の情報処理装置と、
展開前の前記パッチコードが格納されるパッチコード格納メモリとを含み、
前記パッチコード格納メモリから読み出された前記パッチコードが前記パッチコード用メモリに展開されると共に、前記実行コードが格納される前記ＲＯＭのアドレスのうち前記パッチコードに置き換えられる前記ＲＯＭのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含むアドレス情報が前記アドレス管理用メモリに格納されるパッチコード実装システムに関係する。
【００２５】
本発明によれば、予め不具合の発生した構成を採用することなく、低コストで、ＲＯＭのコードの不具合を解消できるパッチコード実装システムを提供できる。
【００２６】
また本発明は、
上記記載のパッチコード実装システムと、
前記情報処理装置の処理結果に基づいて制御される周辺装置とを含む電子機器に関係する。
【００２７】
本発明によれば、予め不具合の発生した構成を採用することなく、低コストで、ＲＯＭのコードの不具合を解消できる情報処理装置が適用された電子機器を提供できる。
【００２８】
また本発明は、
ＲＯＭ（Read Only Memory）に格納される実行コードの少なくとも一部に代えてＣＰＵ（Central Processing Unit）により実行されるパッチコードの実装方法であって、
前記実行コードが格納されるＲＯＭのアドレス情報をアドレス管理用メモリに配置し、
前記パッチコードと前記実行コードとをリンクしたコードを生成し、
該コードから前記パッチコードを取り出し、
前記パッチコードをパッチコード用メモリに配置すると共に、前記パッチコードと前記実行コードのリンク後のアドレス情報を前記アドレス管理用メモリに上書きするパッチコードの実装方法に関係する。
【００２９】
また本発明は、
ＲＯＭ（Read Only Memory）に格納される実行コードの少なくとも一部に代えてＣＰＵ（Central Processing Unit）により実行されるパッチコードの実装方法であって、
パッチコード用ソースコードに基づいて生成されたパッチコード用オブジェクトファイルをリンク処理して前記パッチコードを生成し、
前記パッチコードをパッチコード用メモリに配置すると共に、予め前記実行コードのＲＯＭのアドレス情報が格納されるアドレス管理用メモリに、リンク処理後の前記パッチコードのアドレス情報を上書きするパッチコードの実装方法に関係する。
【００３０】
また本発明に係るパッチコード実装方法では、
前記パッチコードが、
前記実行コードのソースコードの関数単位で生成されたコードであってもよい。
【００３１】
また本発明に係るパッチコード実装方法では、
前記パッチコードが、
前記実行コードのソースコードのファイル単位で生成されたコードであってもよい。
【００３２】
また本発明に係るパッチコード実装方法では、
前記パッチコードが、
所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
【００３３】
また本発明に係るパッチコード実装方法では、
前記アドレス管理用メモリ及び前記パッチコード用メモリが、ＲＡＭ（Random Access Memory）であってもよい。
【００３４】
また本発明に係るパッチコード実装方法では、
前記ＲＯＭが、
ＲＯＭの製造工程において１回だけコードが書き込み可能なメモリであってもよい。
【００３５】
また本発明に係るパッチコード実装方法では、
前記ＲＯＭが、
マスクＲＯＭ又はワンタイムＲＯＭであってもよい。
【００３６】
上記のいずれかの発明によれば、予め不具合の発生した構成を採用することなく、低コストで、ＲＯＭのコードの不具合を解消できるパッチコード実装方法を提供できる。
【発明を実施するための最良の形態】
【００３７】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００３８】
１．  情報処理装置
図１に、本実施形態における情報処理装置が適用された電子機器の構成の概要のブロック図を示す。
【００３９】
本実施形態における電子機器６０は、パッチコード実装システム７０と、１又は複数の周辺装置５０とを含む。図１では、周辺装置が１であるものとして説明するが、電子機器６０が複数の周辺装置を含んでもよい。
【００４０】
パッチコード実装システム７０は、本実施形態における情報処理装置を含み、ＲＯＭ化された実行コードに対してパッチコードが適用されたコードに対応した処理を行う。ここで、情報処理装置は、ＣＰＵ、ＲＯＭ及びＲＡＭを有し、ＲＯＭ化されたプログラムの実行コード又はパッチコードを読み出し、ＣＰＵによりコードに対応した処理を行う。図１の周辺装置５０としては、例えばＩ／Ｏ装置、記憶装置、処理装置がある。このような周辺装置５０は、情報処理装置３０の処理結果に基づいて制御される。
【００４１】
電子機器６０では、例えば同一基板（プリント基板、フイルム基板、半導体基板等）上に、情報処理装置３０及び周辺装置５０が搭載される。このような電子機器６０としては、携帯電話機、携帯型情報機器（ＰＤＡ等）、デジタルカメラ、プロジェクタ、携帯型オーディオプレーヤ、マスストレージデバイス、ビデオカメラ、電子手帳、ＧＰＳ（Global Positioning System）装置、メモリカード等のアクセス制御を行うメモリコントローラ、センサ装置、ゲーム装置、プロジェクタ（投写型表示装置）等がある。
【００４２】
ＲＯＭ化されたプログラムの実行コードを用いて処理を行わせることで、情報処理装置、該情報処理装置を含む電子機器６０の低コスト化が実現される。その一方で、ＲＯＭの実行コードを変更することが不可能であるため、情報処理装置の設計段階において、プログラムの内容を十分に検討し、且つ検証する必要がある。従って、高機能化が進む情報処理装置の設計工数が増大している。
【００４３】
このような状況下で、情報処理装置が実装された電子機器が量産化された後に、短い設計期間での検証等を原因として、ＲＯＭ化されたプログラム自体に不具合が存在してしまうことがある。この場合、一般的には、修正後のプログラムの実行コードを搭載したＲＯＭの交換等が必要となり、コスト高を招く。
【００４４】
そこで、本実施形態では、万が一、ＲＯＭ化されたプログラムの修正が必要になった場合でも、ＲＯＭの交換等が一切不要な情報処理装置等を提供する。より具体的には、情報処理装置に、ＲＯＭ化されたプログラムを修正したコードであるパッチコードを以下のように展開させることで、ＲＯＭ化されたプログラムの修正が必要になった場合でも、ＲＯＭの交換等を不要にする。
【００４５】
図２に、図１のパッチコード実装システム７０の構成例のブロック図を示す。図２において、図１と同一部分には同一符号を付し、適宜説明を省略する。
【００４６】
パッチコード実装システム１０は、情報処理装置３０と、外部装置８０とを含む。情報処理装置３０と外部装置８０とは、通信路９０を介して接続される。通信路９０は、１又は複数の信号線からなるバス、シリアル信号線、差動信号線であってもよいし、ＲＳ−２３２Ｃ（Recommended Standard 232 Version C）、ＵＳＢ（Universal Serial Bus）、イーサネット（登録商標）等の所定のプロトコルを有するインタフェース用信号線であってもよい。また、通信路９０は、無線伝送路であってもよい。
【００４７】
情報処理装置３０は、ＣＰＵ３２、ＲＯＭ３４、ＲＡＭ３６を含む。ＣＰＵ３４は、バス３９を介してＲＯＭ３４、ＲＡＭ３６と接続される。ＲＯＭ３８は、読み出し可能だが書き換え不可能なメモリであればよい。そのため、ＲＯＭ３８は、フラッシュＲＯＭであってもよい。また、ＲＯＭ３８は、ＲＯＭ３８の製造工程において１回だけコードが書き込み可能なメモリであってもよく、例えばマスクＲＯＭやワンタイムＲＯＭであることがコストの観点から望ましい。ＲＡＭ３６は、読み出し可能で、書き換え可能なメモリであればよい。
【００４８】
このような情報処理装置３０では、ＲＯＭ３４又はＲＡＭ３６に格納されたプログラムが読み出されて、該ＣＰＵ３２が該プログラムに対応した処理を実行する。これにより、情報処理装置３０は、主にＲＯＭ３４に格納された実行コードに対応した処理を実行でき、低コスト化を図る。
【００４９】
より具体的には、情報処理装置３０のＲＯＭ３４に、ＣＰＵ３２の実行コードが格納される。この実行コードは、ＲＯＭ３４の製造工程において書き込まれる。ＲＡＭ３６には、ＲＯＭ３４の実行コードを修正したパッチコードが格納される。また、ＲＡＭ３６には、ＲＯＭ３４の実行コード及びＲＡＭ３６のパッチコードが格納されるメモリアドレスを管理するためのアドレス情報が格納される。ＣＰＵ３２は、ＲＯＭ３４の実行コード又はＲＡＭ３６のパッチコードを順次読み出して処理しながら、次に処理すべきコードをＲＡＭ３６のアドレス情報で指定された領域から読み出す。
【００５０】
ＲＡＭ３６に格納されるアドレス情報は、実行コードが格納されるＲＯＭ３４のアドレスのうちパッチコードに置き換えられるＲＯＭ３６のアドレスに代えて、パッチコードが格納されるＲＡＭ３６のアドレスを含む。ＣＰＵ３２は、ＲＡＭ３６に格納されるアドレス情報に基づいてＲＯＭ３４又はＲＡＭ３６から読み出されたコードに対応した処理を行う。
【００５１】
このようなアドレス情報は、実行コードをＲＯＭ３４に書き込む処理を行う際に、一度確定した情報である。そして、ＲＯＭ３４の実行コードの修正が必要になり、ＲＡＭ３６のパッチコードを情報処理装置３０のメモリ空間に配置する場合には、該パッチコードを参照するためのアドレス情報が更新される。即ち、ＲＡＭ３６には、実行コードが格納されるＲＯＭ３４のアドレスが格納された後に、パッチコードに置き換えられるＲＯＭ３４のアドレスが、パッチコードが格納されるＲＡＭ３６のアドレスにより上書きされる。そのため、パッチコードが格納されるメモリは、新たに書き込み可能に構成されたメモリであることが望ましい。そして、アドレス情報が格納されるメモリは、パッチコードと共に更新されるため、書き込み可能に構成されたメモリであることが望ましい。
【００５２】
図２では、ＲＡＭ３６が、アドレス情報及びパッチコードを格納するが、本実施形態はこれに限定されない。例えば、情報処理装置３０が、各メモリが読み出し及び書き込みが可能なアドレス管理用メモリとパッチコード用メモリを有し、アドレス管理用メモリにアドレス情報、パッチコード用メモリにパッチコードが格納されてもよい。図２では、アドレス管理用メモリの機能及びパッチコード用メモリの機能がＲＡＭ３６により実現されている。この場合、アドレス情報は、実行コードが格納されるＲＯＭ３４のアドレスのうちパッチコードに置き換えられるＲＯＭ３４のアドレスに代えて、パッチコードが格納されるパッチコード用メモリのアドレスを含む。ＣＰＵ３２は、アドレス管理用メモリに格納されるアドレス情報に基づいてＲＯＭ３４又はパッチコード用メモリから読み出されたコードに対応した処理を行う。アドレス管理用メモリには、実行コードが格納されるＲＯＭ３４のアドレスが格納された後に、パッチコードに置き換えられるＲＯＭ３４のアドレスが、パッチコードが格納されるパッチコード用メモリのアドレスにより上書きされる。
【００５３】
これにより、ＣＰＵ３２は、ＲＯＭ３４の実行コード又はＲＡＭ３６のパッチコードを順次読み出して処理しながら、次に処理すべきコードをＲＡＭ３６のアドレス情報で指定された領域から読み出すことができる。そのため、実行コードのうち、修正が必要な部分ではパッチコードが読み出される。この結果、情報処理装置３０では、ＲＯＭ化されたプログラムの修正が必要になった場合でも、ＲＯＭの交換等を不要にできる。
【００５４】
一方、外部装置８０は、パッチコード格納メモリとしてのメモリ８２を含む。メモリ８２には、展開前のパッチコードが格納される。このパッチコードは、通信路９０を介して情報処理装置３０内のＲＡＭ３６に転送される。例えば、情報処理装置３０は、初期化処理時に、メモリ８２のパッチコードをＲＡＭ３６に展開する処理を行う。なお、メモリ８２において、パッチコードに対応したアドレス情報が格納され、上記の初期化処理時に、該アドレス情報をＲＡＭ３６に展開させることが望ましい。
【００５５】
２．  パッチコードの実装方法
図３に、本実施形態における実行コードの説明図を示す。
【００５６】
本実施形態における実行コードは、例えば図３に示す処理により生成される。まず、ＣＰＵ３２により処理させたい内容を実現するためのヘッダファイルＨＦ、ソースファイルＳＣ１、ＳＣ２を用意する。次に、ヘッダファイルＨＦとソースファイルＳＣ１を入力ファイルとして、コンパイラによるコンパイル処理でオブジェクトファイルＯＢＪ１を生成する。同様に、ソースファイルＳＣ２を入力ファイルとして、コンパイラによるコンパイル処理でオブジェクトファイルＯＢＪ２を生成する。図３では、ソースファイルＳＣ１、ＳＣ２を別個にコンパイル処理するものとして説明したが、まとめてコンパイル処理を行ってもよい。
【００５７】
次に、コンパイラと共に予め用意されているライブラリＬＩＢ、オブジェクトファイルＯＢＪ１、ＯＢＪ２を入力ファイルとして、リンカによりリンク処理で、情報処理装置３０のメモリ空間内に所与の配置情報に基づいて配置された実行コードＥＸＥが生成される。このリンク処理では、情報処理装置３０のメモリ空間内の配置情報を示すアドレス情報もまた出力される。
【００５８】
以上のようなコンパイラによるコンパイル処理、リンカによるリンク処理は、開発システムの図示しないＣＰＵにより行われる。こうして生成された実行コードＥＸＥは、ＲＯＭ化される。
【００５９】
図４に、本実施形態における実行コードのＲＯＭ化の処理フローを示す。
【００６０】
まず、図示しない開発システムでは、ソースコードがコンパイル処理（ステップＳ１０）された後に、リンク処理（ステップＳ１１）が行われる。これにより、上述のように実行コードが生成される。
【００６１】
その後、実行コードＥＸＥは、ＲＯＭデータとして、ＲＯＭの製造工程においてＲＯＭ３６に書き込まれる。そして、リンク処理の際に用いられたリンク情報（メモリ配置情報）としてのアドレス情報、若しくはリンク処理により得られたアドレス情報を、情報処理装置３０のＲＡＭ３６に展開させるように実装する処理が行われる（エンド）。
【００６２】
このようにＲＡＭ３６に展開されたアドレス情報は、パッチコードが搭載される際に更新される。このパッチコードは、次のように実装される。
【００６３】
図５に、本実施形態におけるパッチコードの実装処理の処理例のフロー図を示す。
【００６４】
まず、図示しない開発システムにおいて、ＲＯＭ３４の実行コードのソースプログラムのうち、必要な部分が修正されたパッチ用ソースコードに対してコンパイル処理が行われる（ステップＳ２０）。これにより、パッチコード用のオブジェクトファイルが生成される。次に、実行コードのソースプログラムを含む全ソースコードのオブジェクトファイルと、上記のパッチコード用のオブジェクトファイルとがリンク処理される（ステップＳ２１）。
【００６５】
ここで、パッチコードが、実行コードのソースコードの関数単位、実行コードのソースコードのファイル単位、又は所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
【００６６】
次に、上述の開発システムにおいて、ステップＳ２１でリンク処理されて得られたコードの中から、パッチ用のソースコードに対応するコードであるパッチコードが抽出される（ステップＳ２２）。この抽出処理は、ステップＳ２１におけるリンク処理で行われるメモリ空間内の配置情報（アドレス情報）に基づいて行うことができる。
【００６７】
その後、ステップＳ２２で抽出したパッチコードを情報処理装置３０のＲＡＭ３６に展開し、リンク処理で用いられたアドレス情報を該ＲＡＭ３６に上書きさせるように情報処理装置３０に実装する処理を行い（ステップＳ２３）、一連の処理を終了する（エンド）。例えば、初期化処理時に該パッチコード及びアドレス情報をＲＡＭ３６に展開する処理を、初期化関数内に実装する。この初期化関数は、情報処理装置３０のＣＰＵ３２の初期化時に実行するように設定されている。この結果、情報処理装置３０は、初期化処理時に、ＲＯＭ３４又は図示しない外部記憶装置から読み出したパッチコード及びアドレス情報をＲＡＭ３６に展開させる処理を行うことができる。この結果、ＲＡＭ３６に既に格納されていた実行コードのアドレス情報を上書きする処理を行うことができる。
【００６８】
なお、図５では、全ソースコードのオブジェクトファイルと、パッチコード用のオブジェクトファイルとを用いてリンク処理を行っていたが、本実施形態は、これに限定されるものではない。
【００６９】
図６に、本実施形態の変形例におけるパッチコードの実装処理の処理例のフロー図を示す。
【００７０】
まず、上述の開発システムでは、ＲＯＭ３４の実行コードのソースプログラムのうち、必要な部分が修正されたパッチ用ソースコードに対してコンパイル処理が行われる（ステップＳ３０）。これにより、パッチコード用のオブジェクトファイルが生成される。次に、この開発システムにおいて、実行コードのソースプログラムを含む全ソースコードのオブジェクトファイルと、上記のパッチコード用のオブジェクトファイルとがリンク処理される（ステップＳ３１）。
【００７１】
ここで、パッチコードが、実行コードのソースコードの関数単位、実行コードのソースコードのファイル単位、又は所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
【００７２】
その後、ステップＳ３２で得られたパッチコードを情報処理装置３０のＲＡＭ３６に展開し、リンク処理で用いられたアドレス情報を該ＲＡＭ３６に上書きさせるように情報処理装置３０に実装する処理を行い（ステップＳ３２）、一連の処理を終了する（エンド）。例えば、初期化処理時に該パッチコード及びアドレス情報をＲＡＭ３６に展開する処理を、初期化関数内に実装する。この初期化関数は、情報処理装置３０のＣＰＵ３２の初期化時に実行するように設定されている。この結果、情報処理装置３０は、初期化処理時に、ＲＯＭ３４又は図示しない外部記憶装置から読み出したパッチコード及びアドレス情報をＲＡＭ３６に展開させる処理を行うことができる。この結果、ＲＡＭ３６に既に格納されていた実行コードのアドレス情報を上書きする処理を行うことができる。
【００７３】
以上説明したようにパッチコードを実装することで、情報処理装置３０のＣＰＵ３２は、ＲＯＭ３４の実行コード又はＲＡＭ３６のパッチコードを順次読み出して処理しながら、次に処理すべきコードをＲＡＭ３６のアドレス情報で指定された領域から読み出すことができ、実行コードのうち、修正が必要な部分ではパッチコードを読み出すことができる。こうすることで、本実施形態によれば、ＲＯＭ３４に実行コードが配置されている場合に、パッチコードが該実行コードの一部に置き換えることができ、実行コードを変更した場合と同様の効果を得ることができる。
【００７４】
３．  具体的な説明
次に、本実施形態について具体的に説明する。
【００７５】
図７に、本実施形態の具体例におけるヘッダファイル、ソースファイルの一例を示す。以下では、ヘッダファイルＨＦ（ファイル名“mod.h”）と２つのソースファイルＳＣ１（ファイル名“Mod.c”）、ＳＣ２（ファイル名“AnotherMod.c”）から実行コードが生成されるものとする。そして、ソースファイルＳＣ２において、モジュールが呼び出されるものとする。
【００７６】
ヘッダファイルＨＦでは、MODという型の構造体、関数Func()、変数FileVarがマクロで定義されている。より具体的には、ヘッダファイルＨＦにより、関数Func()が関数pFunc()であり、変数FileVarがMod.cのファイルスコープ変数であることが定義されている。なお、グローバル変数g_Globalは、通常のグローバル変数と同様に参照される。
【００７７】
ソースファイルＳＣ１は、１つのモジュールを表しており、モジュール構造体の初期化関数ModInit()と関数f_Func()とグローバル変数g_Globalを含む。また、ソースファイルＳＣ１には、構造体g_MODの実体が記載されている。ここで、初期化関数ModInit()では、関数pFunc()としてf_Func()を参照するように定義されているので、構造体g_MODは、関数f_Funcへのポインタ、グローバル変数g_Global、ファイルスコープ変数がメンバであることを示している。
【００７８】
図８に、図７のファイル構成において関数が呼び出されるときの動作説明図を示す。
【００７９】
図８において、図７と同一部分には同一符号を付し、適宜説明を省略する。ソースファイルＳＣ２において関数Func()が呼び出されると、ヘッダファイルＨＦの定義に従って、Funcというマクロが展開される。その結果、g_MOD->pFuncが参照され、ソースファイルＳＣ１で規定された構造体g_MODの内容から、関数f_Func()が呼び出される。このとき、初期化関数ModInit()では、関数f_Func()へのポインタが設定されているため、この関数f_Func()へのポインタを参照して、関数f_Func()を呼び出す。この関数f_Func()へのポインタが、本実施形態におけるアドレス情報に相当する。
【００８０】
ここで、図７又は図８のようなファイル構成において、関数f_Func（）に修正が必要になった場合を考える。
【００８１】
図９に、図７又は図８のファイル構成に対してパッチコードが適用されたときの動作説明図を示す。図９において、図７又は図８と同一部分には同一符号を付し、適宜説明を省略する。
【００８２】
図９では、関数f_Func()に置き換えて関数func()を実行させるためのパッチコード用ソースファイルＰＣ１が用意される。このパッチコード用ソースファイルＰＣ１には、修正対象の関数f_Func()を置換するパッチ関数func()の他に、ソースファイルＳＣ１の初期化関数ModInit()に対応する初期化関数ModPatchInit()が記載されている。
【００８３】
初期化関数ModPatchInit()において、構造体g_MODが表す関数へのポインタが関数func()へのポインタとなるように定義される。そのため、初期化関数ModInit()のコードに、初期化関数ModPatchInit()のコードを上書きすることで、ソースファイルＳＣ１により構造体g_MODが表す関数f_Func()へのポインタｐ１が関数func()へのポインタｐ２に更新される。従って、関数func()のコードを新たにＲＡＭに格納することで、初期化処理時において関数func()へのポインタに更新された後に、関数Func()が呼び出されたときに、該ＲＡＭに格納された関数func()のコードが実行されることになる。その結果、関数f_Func()が関数func()に置換されることになる。
【００８４】
なお、このような初期化関数ModPatchInit()を、ＲＯＭの実行コードを設計する段階で予め設けておき、アドレスを固定的に定めておいてもよい。
【００８５】
図１０に、本実施形態の具体例におけるソースファイルと情報処理装置におけるメモリ空間との関係の一例を示す。
【００８６】
図１０では、ヘッダファイルＨＦ、ソースファイルＳＣ１、ＳＣ２、パッチコード用ソースファイルＰＣ１がコンパイル処理及びリンク処理された後のコードの、ＲＯＭ３４及びＲＡＭ３６の配置状態を示している。リンク処理では、予めＲＯＭ３４に配置すべき実行コードのコード領域、定数領域、初期値領域が確保されている。リンク処理の結果、各領域にモジュール構造体初期化関数、その他の関数の実体、定数等が配置され、各関数や定数のアドレスが確定する。同様に、リンク処理では、予めＲＡＭ３６に配置すべき変数領域、パッチ領域が確保されている。リンク処理の結果、各領域に変数やモジュール構造体、パッチコードが配置され、各変数や構造体、パッチコードのアドレスが確定する。
【００８７】
本実施形態では、ヘッダファイルＨＦ、ソースファイルＳＣ１、ＳＣ２の実行コードは、ＲＯＭ３４のコード領域に配置され、各実行コードが格納されるＲＯＭ３４のアドレス情報（ポインタ）はＲＡＭ３６の変数領域に格納される。また、パッチコード用ソースファイルＰＣ１の実行コードはＲＡＭ３６のパッチ領域、該実行コードのＲＡＭ３６のアドレス情報（ポインタ）はＲＡＭ３６の変数領域に格納される。この際、パッチコード用ソースファイルＰＣ１の実行コードのＲＡＭ３６のアドレス情報は、ヘッダファイルＨＦ、ソースファイルＳＣ１、ＳＣ２の実行コードのＲＯＭ３４のアドレス情報を更新するように上書きされる。
【００８８】
以上のように、本実施形態やその具体例によれば、低コストでＲＯＭのコードの不具合を解消できる情報処理装置等を提供できるようになる。
【００８９】
ところで、プログラムのソースファイルでは、一般的に、複数の関数から参照されるグローバル変数が用いられる。ところが、このグローバル変数は、リンク処理を行うことでアドレスが確定する。そのため、グローバル変数が多数の場合には、各グローバル変数についてそれぞれパッチコード用ソースファイルで定義し直すとコードサイズが大きくなるため、パッチコードから実行コードが用いたグローバル変数を参照しないようにすることが望ましい。このような事態を回避するために、パッチコードを作成する際に、実行コードの全てのソースファイルとコンパイル処理、リンク処理を行うことで、パッチコードから実行コード内のグローバル変数を参照できるようになる。
【００９０】
一方、ファイルスコープ変数であるファイル内グローバル変数については、パッチコードから参照できない。そこで、該変数のスコープ範囲をプログラム全体に広げることも考えられるが、このような変数のスコープ範囲を変更させてしますと変数の管理が複雑になってしまう。そこで、本実施形態では、構造体g_MOD内にファイル内グローバル変数を定義している。
【００９１】
図１１に、図７又は図８のファイル構成においてファイル内グローバル変数を参照する場合の動作説明図を示す。
【００９２】
図１１において、図７又は図８と同一部分には同一符号を付し、適宜説明を省略する。
【００９３】
図１１では、変数FileVarが、関数f_Funcで呼び出されるものとする。変数FileVarが呼び出されると、ヘッダファイルＨＦで定義されたマクロに従って展開される。その結果、ソースファイルＳＣ１の構造体g_MODで定義されたgMOD->b_FileVarが参照される。
【００９４】
このように、構造体g_MODでファイル内グローバル変数を定義することで、不要なファイルから参照されることなく、必要なファイルにのみ参照可能なファイル内グローバル変数を提供できる。
【００９５】
なお、図７〜図１０では、パッチコードが、実行コードのソースコードの関数単位で生成されたコードであるものとして説明したが、実行コードのソースコードのファイル単位、又は所与の機能を実行するための１又は複数のファイルであるモジュール単位で生成されたコードであっても当業者であれば同様に実現できる。
【００９６】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。
【００９７】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【図面の簡単な説明】
【００９８】
【図１】本実施形態における情報処理装置が適用された電子機器の構成の概要のブロック図。
【図２】図１のパッチコード実装システムの構成例のブロック図。
【図３】本実施形態における実行コードの説明図。
【図４】本実施形態における実行コードのＲＯＭ化の処理フローを示す図。
【図５】本実施形態におけるパッチコードの実装処理の処理例のフロー図。
【図６】本実施形態の変形例におけるパッチコードの実装処理の処理例のフロー図。
【図７】本実施形態の具体例におけるヘッダファイル、ソースファイルの一例を示す図。
【図８】図７のファイル構成において関数が呼び出されるときの動作説明図。
【図９】図７又は図８のファイル構成に対してパッチコードが適用されたときの動作説明図。
【図１０】本実施形態の具体例におけるソースファイルと情報処理装置におけるメモリ空間との関係の一例を示す図。
【図１１】図７又は図８のファイル構成においてファイル内グローバル変数を参照する場合の動作説明図を示す図。
【符号の説明】
【００９９】
３０  情報処理装置、  ３２  ＣＰＵ、  ３４  ＲＯＭ、  ３６  ＲＡＭ、
３９  バス、  ５０  周辺装置、  ６０  電子機器、
７０  パッチコード実装システム、  ８０  外部装置、  ８２  メモリ、
９０  通信路、  ＨＦ  ヘッダファイル、  ＰＣ１  パッチコード用ソースファイル、
ＳＣ１、ＳＣ２  ソースファイル
【図１】
2008198060.tif 000003
【図２】
2008198060.tif 000004
【図３】
2008198060.tif 000005
【図４】
2008198060.tif 000006
【図５】
2008198060.tif 000007
【図６】
2008198060.tif 000008
【図７】
2008198060.tif 000009
【図８】
2008198060.tif 000010
【図９】
2008198060.tif 000011
【図１０】
2008198060.tif 000012
【図１１】
2008198060.tif 000013
【手続補正書】
【提出日】平成20年4月23日(2008.4.23)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
パッチコード実装システム７０は、情報処理装置３０と、外部装置８０とを含む。情報処理装置３０と外部装置８０とは、通信路９０を介して接続される。通信路９０は、１又は複数の信号線からなるバス、シリアル信号線、差動信号線であってもよいし、ＲＳ−２３２Ｃ（Recommended Standard 232 Version C）、ＵＳＢ（Universal Serial Bus）、イーサネット（登録商標）等の所定のプロトコルを有するインタフェース用信号線であってもよい。また、通信路９０は、無線伝送路であってもよい。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００４７
【補正方法】変更
【補正の内容】
【００４７】
情報処理装置３０は、ＣＰＵ３２、ＲＯＭ３４、ＲＡＭ３６を含む。ＣＰＵ３２は、バス３９を介してＲＯＭ３４、ＲＡＭ３６と接続される。ＲＯＭ３４は、読み出し可能だが書き換え不可能なメモリであればよい。そのため、ＲＯＭ３４は、フラッシュＲＯＭであってもよい。また、ＲＯＭ３４は、ＲＯＭ３４の製造工程において１回だけコードが書き込み可能なメモリであってもよく、例えばマスクＲＯＭやワンタイムＲＯＭであることがコストの観点から望ましい。ＲＡＭ３６は、読み出し可能で、書き換え可能なメモリであればよい。