(57)【要約】【課題】プログラム変更時の再検査をさらに低減できる情報処理装置を提供すること。【解決手段】変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段１０３と、変更前後のプログラムの変更部を抽出する変更部抽出手段１４１と、変更部の命令の先頭からの仮想アドレスを決定すると共に、変更前のプログラムのアドレスを固定したまま、変更前のプログラム及び前記変更部を記憶手段に配置した際の該変更部の物理アドレスを決定し、物理アドレスと仮想アドレスとを対応づけた中間テーブルを作成するアドレス決定手段１４２と、変更後のプログラムの各命令と、変更後のプログラムの各命令を先頭からアドレス毎に比較し、異なる命令が記述されている場合は、中間テーブルの物理アドレスと仮想アドレスとを取り出して登録したアドレス変換テーブルを作成するアドレス変換テーブル作成手段１４３と、を有する情報処理装置１００を提供する。【選択図】図４
2013080386.tif 000002
【特許請求の範囲】
【請求項１】
変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段と、
変更前のプログラムと変更後のプログラムの変更部を抽出する変更部抽出手段と、
前記変更部を含め変更後のプログラムの各命令を外部の記憶手段に配置した際の仮想アドレスを決定すると共に、
変更前のプログラムの物理アドレスを固定したまま、変更前のプログラム及び前記変更部を前記外部の記憶手段に配置した際の該変更部の物理アドレスを決定し、前記変更部の前記仮想アドレスと前記物理アドレスとを対応づけた中間テーブルを作成するアドレス決定手段と、
変更後のプログラムの各命令と、変更前のプログラムの各命令を先頭からアドレス毎に比較し、同じ命令が記述されている場合は、それらのアドレスを対応付けて登録し、異なる命令が記述されている場合は、前記中間テーブルの前記仮想アドレスと前記物理アドレスとを対応づけて登録したアドレス変換テーブル、を作成するアドレス変換テーブル作成手段と、
を有する情報処理装置。
【請求項２】
前記変更部抽出手段が、変更前のプログラムにあり変更後のプログラムにない命令を前記変更部として抽出した場合、
前記アドレス変換テーブル作成手段は、変更後のプログラムにない命令の前記仮想アドレスの命令を、変更前のプログラムから検索し、該仮想アドレスと検索した命令の物理アドレスを対応づけてアドレス変換テーブルに登録する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記アドレス変換テーブル作成手段は、前記仮想アドレスと物理アドレスの同じアドレスに異なる命令が記述されているが、前記中間テーブルに登録されていない前記仮想アドレスについて、該仮想アドレスの命令を変更前のプログラムから検索し、該仮想アドレスと検索した命令の物理アドレスを対応づけてアドレス変換テーブルに登録する、
ことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
請求項１又は２に記載された情報処理装置により生成されたアドレス変換テーブルと、
変更前のプログラム及び前記変更部が記憶された前記外部の記憶手段と、
命令実行手段が読み出す命令のアドレスを生成するアドレス生成手段と、
前記アドレス生成手段が生成したアドレスと、該アドレスと同じ前記アドレス変換テーブルの前記仮想アドレスに対応づけられた前記物理アドレスとが異なる場合、該アドレスを前記物理アドレスに変換するアドレス変換手段と、
前記アドレス変換手段が変換した前記物理アドレスの命令を前記記憶手段から読み出し、前記命令実行手段に供給する命令読み出し手段と、
を有する情報処理装置。
【請求項５】
情報処理装置が作成するプログラムのアドレスを管理するアドレス管理方法であって、
変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段から、変更部抽出手段が、変更前のプログラムと変更後のプログラムを読み出し、両者の変更部を抽出するステップと、
アドレス決定手段が、前記変更部を含め変更後のプログラムの各命令を外部の記憶手段に配置した際の仮想アドレスを決定するステップと、
変更前のプログラムの物理アドレスを固定したまま、変更前のプログラム及び前記変更部を外部の記憶手段に配置した際の該変更部の物理アドレスを決定するステップと、
前記変更部の前記仮想アドレスと前記物理アドレスとを対応づけた中間テーブルを作成するステップと、
アドレス変換テーブル作成手段が、変更後のプログラムの各命令と、変更前のプログラムの各命令を先頭からアドレス毎に比較するステップと、
同じ命令が記述されている場合は、それらのアドレスを対応付けて登録し、異なる命令が記述されている場合は、前記中間テーブルの前記仮想アドレスと前記物理アドレスとを対応づけて登録したアドレス変換テーブルを作成するステップと、
を有するアドレス管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行ファイルを作成する情報処理装置に関する。
【背景技術】
【０００２】
Ｃ言語などの高級言語は、コンピュータがプログラムを実行するために、開発者がコーディングしたソースコードを、コンピュータが処理可能なオブジェクトコードに変換する翻訳処理を必要とする。
【０００３】
図１は、一般的な翻訳処理の手順の一例を示す。コンパイラはソースコードに対し、字句解析（キーワードや変数の抽出）、構文解析（文法に従っているかの解析）、意味解析（実行可能の解析）、コード生成（オブジェクトコードの生成）等の処理を施す。リンカは、オブジェクトコードが参照する他のファイルやライブラリを特定して結合する。これによりコンピュータが実行可能な実行ファイルが生成される。組み込みソフトの場合、実行ファイルはＲＯＭに記憶され、一般にプログラムを呼ばれる。
【０００４】
ところで、ソフトウェア開発では、一度は製品開発が完了しＲＯＭに記憶されたプログラムに対し、処理内容を修正したり追加したりすることがよく行われる。開発者がソースコードを変更した場合、その変更が一部（例えば、一命令でも）でも上記の翻訳処理の全てをソースコードの全体に行う必要がある。
【０００５】
図２は、ソースコードの変更が実行ファイルに与える影響を説明する図の一例である。変更前のプログラムは３つの関数Ａ〜Ｃを有し、ＲＯＭの図示するアドレスに記憶される。開発者が関数Ａに３つの命令を追加する変更を加えた場合、翻訳処理により生成される実行ファイルにも関数Ａの変更が反映されるので、関数Ａが記憶されるＲＯＭのアドレスの一部だけでなく、変更箇所以降の全ての命令のアドレスが変更になる。図では３つのＰＯＰ命令を含め、ソースコードの変更がない関数Ｂ，Ｃの命令のアドレスが全て変更になっている。
【０００６】
命令とアドレスの関係が変更になると、ＣＰＵが命令Ａを実行する際にメモリにアクセスするタイミングが、同じ命令Ａを実行する場合でも変わってくるおそれがある。メモリアクセスのタイミングが変わると、それまでは生じていなかった不具合が生じる可能性を否定できない。このため、ソフトウェア開発では、ソースコードに対する一部の変更でも、プログラム全体の再検査が行われている。車載ソフトではプログラムの開発コストのうち、検査工程のコストが３〜７割を占めると言われており、プログラムの変更に伴う再検査の工程が大きなコスト増となっている。
【０００７】
ソースコードの変更に伴う命令の再配置を抑制する技術も提案されている（例えば、特許文献１参照。）。特許文献１には、変更のない関数については元のアドレスに配置する言語処理装置が開示されている。
【０００８】
図３は、特許文献１のプログラムの再配置を説明する図の一例である。ソースコードの変更により、実行ファイルに例えば以下のコードが追加されたものとする。
POP  edi
POP  exi
追加によりこれらの命令以降の命令はアドレスが変更される。しかし、特許文献１の言語処理装置は、変更のない関数Ｂ,Ｃの命令はアドレスを変更しない。このため、アドレスが変更になる命令は、関数Ａの“POP  edi”から関数Ａの最後の命令に留めることができる。変更により関数Ａのサイズが大きくなったため、関数Ｂの直前のアドレスまでに配置困難になった命令は、関数Ｃよりも後のアドレスに配置される。このように、引用文献１では、関数単位でプログラムを記憶することで、アドレスの変更を最小限にすることができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００２−１０８６２５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１では、変更された関数Ａのいくつかの命令についてアドレスの変更があるため、アドレスに変更が生じた命令については再検査が必要になるという問題がある。つまり図３の関数Ａの“POP  edi”から関数Ａの最後の命令までは再検査が必要であるため、コスト低減効果が十分ではない。
【００１１】
本発明は、上記課題に鑑み、プログラム変更時の再検査をさらに低減できる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段と、変更前のプログラムと変更後のプログラムの変更部を抽出する変更部抽出手段と、前記変更部を含め変更後のプログラムの各命令を外部の記憶手段に配置した際の仮想アドレスを決定すると共に、変更前のプログラムのアドレスを固定したまま、変更前のプログラム及び前記変更部を記憶手段に配置した際の該変更部の物理アドレスを決定し、前記物理アドレスと前記相対アドレスとを対応づけた中間テーブルを作成するアドレス決定手段と、変更後のプログラムの各命令と、変更後のプログラムの各命令を先頭からアドレス毎に比較し、同じ命令が記述されている場合は、それらのアドレスを対応付けて登録し、異なる命令が記述されている場合は、前記中間テーブルの前記物理アドレスと前記相対アドレスとを取り出して登録したアドレス変換テーブルを作成するアドレス変換テーブル作成手段と、を有する情報処理装置を提供する。
【発明の効果】
【００１３】
プログラム変更時の再検査をさらに低減できる情報処理装置を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】一般的な翻訳処理の手順の一例を示す図である。
【図２】ソースコードの変更が実行ファイルに与える影響を説明する図の一例である。
【図３】特許文献１のプログラムの再配置を説明する図の一例である。
【図４】変更前後のプログラムの配置を説明する図の一例である。
【図５】開発用情報処理装置、及び、開発されたプログラムを実行する車両を有するプログラム配信システムを模式的に示す図の一例である。
【図６】開発用情報処理装置及びマイコンのハードウェア構成図の一例である。
【図７】開発用プログラムの機能ブロック図の一例である。
【図８】リンカがアドレス変換テーブルを生成する手順を示すフローチャート図の一例である。
【図９】変更前プログラムと変更後プログラムの比較を説明する図の一例である。
【図１０】アドレス変換テーブルの作成を説明する図の一例である。
【図１１】マイコンの機能ブロックの一例を示す図である。
【図１２】マイコンがアドレスを変換してプログラムを読み出す手順を示すフローチャート図の一例である。
【図１３】リンカがアドレス変換テーブルを生成する手順を示すフローチャート図の一例である（実施例２）。
【図１４】変更前プログラムと変更後プログラムの比較を説明する図の一例である（実施例２）。
【図１５】アドレス変換テーブルの作成を説明する図の一例である（実施例２）。
【図１６】変更前プログラムと変更後プログラムの比較を説明する図の一例である（実施例３）。
【図１７】アドレス変換テーブルの作成を説明する図の一例である（実施例３）。
【発明を実施するための形態】
【００１５】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【実施例１】
【００１６】
図４は、変更前後のプログラムの配置を説明する図の一例である。関数Ａにだけ、以下のようなコードの追加が生じる変更があったとする。
POP  edi
POP  esi
POP  ebx
(i)  本実施形態のリンカは、実行ファイルに何らかの変更が生じても、変更前の実行ファイルにおける命令とアドレスの関係を一切変更しない。図示するように、変更が生じない関数Ｂ，Ｃだけでなく、変更が加えられた関数Ａも、変更前と同じＲＯＭの同じアドレスに配置される。
【００１７】
そして、元の実行ファイルに存在しない命令は、同じＲＯＭの関数Ａ〜Ｃとは別の領域に配置される（記憶される）。
(ii)  一方、このままでは、上記３つの命令を、関数Ａのどの命令の次に実行すればよいか不明となる。このため、リンカは変更前の実行ファイルの各命令のアドレスと、変更後の実行ファイルの各命令のアドレスを対応づけるアドレス変換テーブルを生成する。
【００１８】
リンカは、オブジェクトコードを生成する際に、追加命令を他の命令と区別することなく１つの実行ファイルに結合する。よって、実行ファイルの先頭アドレスを基準とした、追加命令の相対的なアドレスは判明している（以下、リンカが生成した変更後の実行ファイルの、ＲＯＭに書き込まれと仮定した場合の配置を仮想メモリ配置という。また、仮想メモリ配置のアドレスを仮想配置アドレスという）。変更後のプログラムは仮想メモリ配置の順に実行される。したがって、仮想メモリ配置の命令と、変更前の同じアドレスに記憶されている命令を比較して一致しない命令は、仮想メモリ配置の命令と領域外の命令の物理アドレスとを対応づけることでアドレス変換テーブルを生成できる。
【００１９】
(iii)  ＣＰＵが、ＲＯＭに記憶された変更後の実行ファイル（変更なしの実行ファイル＋領域外の追加分の命令）を実行する場合、プログラムカウンタには、ＲＯＭのアドレス順に、ＣＰＵが次に読み出す命令のアドレスが順次、格納される。しかし、ＣＰＵが単に順番に命令を実行しても追加された３つの命令を実行できない。このため、プログラムカウンタは、アドレス変換部に次に読み出す命令のアドレスを出力する。
【００２０】
アドレス変換部はアドレス変換テーブルを参照して、読み出す命令のアドレスを仮想メモリ配置のアドレスとして、仮想メモリ配置アドレスに対応づけられた物理アドレスをアドレスコントローラに出力する（読み出す命令のアドレスの物理アドレスに変換する）。したがって、ＣＰＵが追加された命令を実行する際は、必要に応じて関数Ａ〜Ｃの領域外にアクセスする。
【００２１】
以上のようにして、関数Ａ〜Ｃのアドレスを変えずに、追加命令だけを領域外に記憶しても、ＣＰＵは変更後の実行ファイルを不都合なく実行できる。ソフトウェアの検査工程においては、開発者は、関数Ａ〜Ｃのアドレスに変更がないので、領域外の命令にアクセスするテストのみを実行すればよい。したがって、プログラム変更時の再検査の工程を大幅に削減でき、ソフトウェアの開発コストを大幅に低減できる。
【００２２】
〔構成例〕
図５は、本実施形態の開発用情報処理装置、及び、開発されたプログラムを実行するマイコン２００が搭載された車両を有するプログラム配信システム５００を模式的に示す図の一例である。開発用情報処理装置１００は、一般的なソフトウェア開発の各工程を実行するＰＣ（Personal  Computer）やワークステーションなどのコンピュータである。検査工程が完了したプログラムは、車両３００の出荷時にマイコン２００のＲＯＭに記憶される。また、車両３００の出荷後にプログラムに変更があった場合は、ディーラなどのサービスエンジニアがツールを使用して車両３００のマイコン２００のＲＯＭに変更後のプログラムを書き込む。また、車両３００の出荷後に、プログラムに変更があった場合、開発者等がプログラムをサーバ４００に記憶しておけば、通信装置（ＤＣＭ：Data  Communication  Module）がサーバ４００からダウンロードすることができる。車載されたマイコン２００は、ダウンロードしたプログラムを車両３００のＲＯＭに書き込む。開発用情報処理装置１００で開発されたプログラムはいずれの態様でＲＯＭに記憶されてもよく、記憶された後の実行方法は同じである。
【００２３】
図６（ａ）は開発用情報処理装置１００のハードウェア構成図の一例を示す。開発用情報処理装置１００は、ＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、ＨＤＤ１０４、ネットワークＩ／Ｆ１０５、グラフィックボード１０６、キーボード１０７、マウス１０８、メディアドライブ１０９、及び、ＤＶＤ−ＲＯＭドライブ１１０を有する。ＣＰＵ１０１は、ＨＤＤ１０４に記憶された開発用プログラム１３０を実行して開発用情報処理装置１００の全体の動作を制御する。ＲＯＭ１０２は、ＩＰＬ（Initial  Program  Loader）や静的なデータを記憶しており、車載されたＲＯＭとは異なるものである。ＲＡＭ１０３は、ＣＰＵ１０１が開発用プログラム１３０を実行する際のワークエリアとして使用される。
【００２４】
ＨＤＤ１０４にはＣＰＵ１０１が実行する開発用プログラム１３０やＯＳが記憶される。ネットワークＩ／Ｆ１０５はネットワークに接続するための例えばイーサネット（登録商標）カードであり、主にレイヤ１、２の処理を提供する。レイヤ３以上の処理は、ＯＳに含まれるＴＣＰ／ＩＰのプロトコルスタックや不図示の通信プログラムが提供する。
【００２５】
グラフィックボード１０６は、ＣＰＵ１０１がビデオＲＡＭに書き込んだ描画コマンドを解釈してディスプレイ１２０にウィンドウ、メニュー、カーソル、文字又は画像などの各種情報を表示する。キーボード１０７は、文字、数値、各種指示などのための複数のキーを備え、ユーザの操作を受け付けＣＰＵ１０１に通知する。同様に、マウス１０８はカーソルの移動、メニューなどの処理対象の選択、処理内容などのユーザの操作を受け付ける。メディアドライブ１０９は、フラッシュメモリ等の記録メディア１１１に対するデータの読み出し又は書き込み（記憶）を制御する。ＤＶＤ−ＲＯＭドライブ１１０は、着脱可能な記録媒体の一例としてのＣＤ−ＲＷ、ＤＶＤ−ＲＷ等の光メディア１１２に対する各種データの読み出し又は書き込みを制御する。また、上記各構成要素を電気的に接続するためのアドレスバスやデータバス等のバスライン１１３を備えている。
【００２６】
開発用プログラム１３０は、インストール可能な形式又は実行可能な形式のファイルで、コンピュータで読み取り可能な記録メディア１１１や光メディア１１２に記録して流通される。また、開発用プログラム１３０は、不図示のサーバからインストール可能な形式又は実行可能な形式のファイルで開発用情報処理装置１００に配布されてもよい。
【００２７】
図６（ｂ）は、車両３００に搭載されるマイコン２００のハードウェア構成図の一例である。マイコン２００は、ＥＣＵ（Electronic  Control  Unit）に搭載されることが想定されているがその用途は車両に限定されない。車載されるＥＣＵには、その主要な機能により、エンジンＥＣＵ、ブレーキＥＣＵ、ボディＥＣＵ、ナビゲーションＥＣＵ（ＡＶ・情報処理ＥＣＵ）、ゲートウェイＥＣＵ等の種類がある。本実施例のマイコン２００はＥＣＵの機能の違いに影響されず搭載されることが可能である。また、複数の機能が１つに統合されたＥＣＵにマイコン２００を搭載してもよい。
【００２８】
マイコン２００は、バスに接続されたＣＰＵ１１、ＲＯＭ１２、ＩＮＴＣ１３、ＲＡＭ１４、ＤＭＡＣ１５、並びに、Ｉ／Ｏブリッジ１６を有し、Ｉ／Ｏブリッジ１６にはＡＤＣ１７及びＣＡＮコントローラ１８が接続されている。
【００２９】
ＣＰＵ１１は１つ以上のコアを有し、プログラムカウンタ２０１及びアドレス変換部２０２を含む、一般的な構成（例えば、ＡＬＵ等の演算装置、命令バッファ、命令デコーダ、レジスタセット等）を有している。アドレス変換部２０２はＣＰＵ１１の外部に配置されていてもよい。
【００３０】
ＲＯＭ１２はフラッシュメモリなどの不揮発メモリであり、ＣＰＵ１１が実行するプログラム２１０や静的なパラメータを記憶している。ＲＯＭ１２にはアドレスコントローラ２０３が配置されている。アドレスコントローラ２０３は、アドレス変換部２０２が出力した命令のアドレスを解釈してＲＯＭ１２に出力する。指定されたアドレスの命令はＲＯＭ１２から読み出されＣＰＵ１１の命令バッファに記憶される。
【００３１】
ＩＮＴＣ１３はＩＲＱやその他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してＣＰＵ１１に通知する。これによりＣＰＵ１１は、割り込みした周辺機器に応じて決まったアドレスの命令をＲＯＭ１２から読み出して処理を実行する。
【００３２】
ＲＡＭ１４は、ＣＰＵ１１がプログラム２１０を実行するための作業領域である。ＣＰＵ１１はＲＯＭ１２からプログラム２１０を読み込み、また、必要であればデータバスを介してＲＡＭ１４からデータを読み出しプログラム２１０を実行する。ＤＭＡＣ１５は、ＣＰＵ１１からの指示によりＲＡＭ１４からＩ／Ｏブリッジ１６を介して周辺機器にデータを送信する。また、周辺機器から割り込みされたＣＰＵ１１から指示を受けて、Ｉ／Ｏブリッジ１６を介して周辺機器からデータを受け取り、ＲＡＭ１４に書き込む。
【００３３】
Ｉ／Ｏブリッジ１６は、マルチプレクサ又はブリッジ回路であり、チャネル毎にＡＤＣ、及び、ＣＡＮコントローラとそれぞれ接続されており、これらの周辺機器とデータを送受信する。ＡＤＣ（analog  to  digital  converter）１７は、センサが検出したアナログ信号をデジタル信号に変換する。なお、ＡＤＣ１７もＩＮＴＣ１３を介して変換の終了をＣＰＵ１１に通知する。ＣＡＮコントローラ１８は、車載ネットワークを介して接続された他のＥＣＵと通信するための通信装置である。ＣＡＮコントローラ１８は、ＣＰＵ１１から通信データの送信要求を受け付けるとフレームの各フィールドにＩＤやデータを格納しＣＡＮバスに出力する。また、ＣＡＮコントローラ１８は、受信すべきＩＤの通信データを検出するとそれを取り込みＣＰＵ１１に割り込んで通知する。
【００３４】
＜開発用情報処理装置の機能ブロック＞
図７は、開発用プログラム１３０の機能ブロック図の一例を示す。本実施形態では開発用プログラム１３０のリンカ１４０がいくつかの新たな機能を有するが、これらの機能はリンカ１４０とは別の機能として開発用プログラム１３０に実装してもよい。
【００３５】
リンカ１４０は、変更部特定部１４１、変更部アドレス決定部１４２、及び、アドレス変換テーブル作成部１４３を有する。リンカ１４０にこれらの機能を起動させるため、開発者はリンク時にリンカオプションを指定する。リンカオプションは、例えば、次のように指定し、ＸＸＸをリンカ１４０の仕様に応じて設定することで、デバッグ情報の作成、プログラムデータベースファイルの作成等、種々のオプションを指定できる。
LINK    /ＸＸＸ
リンカ１４０は、開発者が変更したソースコードから生成されたオブジェクトコードを結合して実行ファイル（プログラム２１０）を生成する。図ではこれを変更後プログラムとしている。開発用情報処理装置１００のＨＤＤ１０４には変更後プログラムと変更前プログラムが記憶されている。
【００３６】
本実施形態のリンカ１４０は、変更部特定のリンカオプションが指定されると、変更部特定部１４１が、変更前プログラムと変更後プログラムの変更部を特定する。なお、リンカ１４０には、変更部特定のリンカオプションと共に、プログラム２１０のＲＯＭ１２における先頭アドレスが指定される。よって、ＲＯＭ１２におけるプログラム２１０の各命令のアドレスはリンカ１４０にとって既知となる。
【００３７】
変更部特定部１４１は、変更前プログラムと変更後プログラムの変更部を特定する。変更部アドレス決定部１４２は、変更部のＲＯＭ１２における物理アドレスを決定する。アドレス変換テーブル作成部１４３は、アドレス変換テーブルを生成する。これらの処理については後に詳述する。
【００３８】
〔アドレス変換テーブルの作成〕
図８は、リンカ１４０がアドレス変換テーブルを生成する手順を示すフローチャート図の一例である。以下、Ｓ１０〜Ｓ３０まで順に説明する。
＜Ｓ１０  変更部の抽出＞
図９（ａ）は、変更前プログラムと変更後プログラムの比較を説明する図の一例である。図９（ａ）では「POP  edi」「POP  esi」「POP  ebx」の３つの命令が追加されている。
ａ１．まず、変更部特定部１４１はＲＯＭ１２における先頭アドレスに変更後プログラムの先頭を配置した場合の仮想配置アドレスを求める。変更前プログラムについても同様である。
ａ２．次に、変更部特定部１４１は、変更前プログラムの命令をアドレス順に読み出し、変更後プログラムに同じ命令が登録されているか否かを判定する。すなわち、変更部特定部１４１は、変更前プログラムの１つの命令について、変更後プログラムの全ての命令をアドレス順に比較する。
ａ３．変更部特定部１４１は、変更前プログラムと変更後プログラムの両方にある命令を、変更後プログラムから除いた残りを変更部として抽出する。変更部特定部１４１は、追加された命令の仮想配置アドレス、及び、変更後プログラムの命令を１組として、変更された全ての命令を取り出す。
【００３９】
＜Ｓ２０  変更部の物理アドレスの決定＞
図９（ｂ）は、実行ファイルの変更部の物理アドレスの決定について説明する図の一例である。
ｂ１．変更後プログラムの非変更部は、変更前プログラムと同じＲＯＭ１２のアドレスに記憶される。このため、ＲＯＭ１２における非変更部のアドレスは固定であると共に既知である。変更部アドレス決定部１４２は、非変更部の最終アドレスの次のアドレス、又は、最終アドレスから若干離れたアドレスを先頭に、変更部を配置した時の物理アドレスを決定する。図９（ｂ）では、0xFF00から変更部の命令が配置されることになる。
ｂ２．変更部アドレス決定部１４２は、変更部の命令の仮想配置アドレスと、物理アドレスを対応づけて記憶する。
【００４０】
＜Ｓ３０  アドレス変換テーブルの作成＞
図１０はアドレス変換テーブルの作成を説明する図の一例である。
アドレス変換テーブル作成部１４３は、変更部特定部１４１が特定した変更された命令の仮想配置アドレス、及び、物理アドレスを用いて、アドレス変換テーブルを作成する。
ｃ１．ＲＯＭ１２に記憶されるのは変更前プログラム（変更後プログラムの非変更部）と追加分である。このため、アドレス変換テーブル作成部１４３は、仮想メモリ配置のアドレスの命令と変更前プログラムの物理アドレスの命令とを順番に比較し、同じアドレスに異なる命令がある場合に、アドレスを変更する。図では、仮想配置アドレスの0xF0A3〜0xF0BF（関数Ａの最後）までのアドレスに、同じアドレスに異なる命令がある。また、変更後プログラムに追加された命令のため、仮想配置アドレスの0xF0BFから0xF0C2までの命令も変換の対象となる。
ｃ２．アドレス変換テーブル作成部１４３は、仮想配置アドレスと同じ物理アドレスに同じ命令がある場合、変更前プログラムの仮想配置アドレスと変更後プログラムの物理アドレスを対応づけて、アドレス変換テーブルを作成する。つまり同じアドレス同士を対応づける。
ｃ３．仮想配置アドレスと同じ物理アドレスの異なる命令のうち、領域外に配置される命令は、領域外の物理アドレスを対応づける。このため、アドレス変換テーブル作成部１４３は、上記b.2で抽出された仮想配置アドレスと物理アドレスを取り出してアドレス変換テーブルに書き出す。
ｃ４．仮想配置アドレスと同じ物理アドレスの異なる命令のうち、残りの命令は、関数Ａ〜Ｃの領域内に同じ命令が存在するはずなので、仮想配置アドレスの１命令ずつ、変更前プログラムの命令を検索し、変更前プログラムの命令のアドレスを仮想配置アドレスに対応づける。以上のようにして、アドレス変換テーブルが作成される。
【００４１】
＜車両のマイコンの機能ブロック＞
図１１は、マイコン２００の機能ブロックの一例を示す図である。プログラム２１０の非変更部は、変更前プログラムと同じＲＯＭ１２の物理アドレスに、変更部は、変更部アドレス決定部１４２が決定したＲＯＭ１２の物理アドレスに記憶される。
【００４２】
プログラムカウンタ２０１は、原則的にＲＯＭ１２の先頭アドレスから順番に命令のアドレスを指定し、ＣＰＵ１１がＲＯＭ１２から命令を読み出す。しかし、ＲＯＭ１２には変更前の実行ファイルが記憶されているので、ＣＰＵ１１が変更部にアクセスするタイミングで、ＣＰＵ１１は変更後の命令が記憶されている領域外のアドレスから命令を読み出さなければならない。
【００４３】
そこで、アドレス変換部２０２は、プログラムカウンタ２０１が決定したアドレスを、アドレス変換テーブルの仮想配置アドレスとして、仮想配置アドレスに対応づけられた物理アドレスを読み出す。例えば、プログラムカウンタ２０１が決定したアドレスが0xF000の場合、アドレス変換テーブルから0xF000が読み出される。プログラムカウンタ２０１が決定したアドレスが0xF0A0〜0xF0A2の場合も、アドレス変換テーブルから0xF0A0〜0xF0A2が読み出される。
【００４４】
これに対し、プログラムカウンタ２０１が決定したアドレスが0xF0A3の場合、アドレス変換テーブルから0xFF00が読み出され、同様に0xF0A4に対してはアドレス変換テーブルから0xFF0１が読み出され、0xF0A5に対してはアドレス変換テーブルから0xFF02が読み出される。アドレス変換テーブルにより、ＣＰＵ１１が読み出す命令のアドレスを変更することができる。
【００４５】
なお、アドレス変換テーブルは、アドレス変換部２０２に記憶されていてもよいし、ＲＯＭ１２に記憶しておき、マイコン２００の起動時にプログラム２１０がＲＯＭ１２から読み出しアドレス変換部２０２のレジスタ等に読み出してもよい。
【００４６】
アドレスコントローラ２０３は、アドレス変換部２０２が命令バスのアドレス線(Address)に出力した物理アドレスのうちRowアドレスをRowコントローラに出力する。Rowコントローラは、Rowアドレスをデコードして、Row線をアクティブ状態にする。  
また、アドレスコントローラ２０３は、アドレス変換部２０２が命令バスのアドレス線(Address)に出力した物理アドレスのうちColumnアドレスをColumnコントローラに出力する。Columnコントローラは、Columnアドレスをデコードして、Column線をアクティブ状態にする。Row線/Column線の両方がアクティブになったＲＯＭ１２の領域のデータが、データ線に出力されＣＰＵ１１に取り込まれる。
【００４７】
〔テスト工程〕
ＲＯＭ１２には、図９（ｂ）に示した非変更部の命令と追加分の命令が記憶される。開発者は、変更部の命令が記憶された0xFF00〜0xFF02にＣＰＵ１１がアクセスするテストパターンを作成してテストを行うか、又は、例えばＳＭＶコードでＣＰＵ１１が0xFF00〜0xFF02にアクセスするモデルを作成しモデル検査を行うなどの、検査工程を行う。したがって、本実施例では、プログラム２１０の全体をテストする場合と比べ、検査工程を大幅に削減できる。
【００４８】
〔マイコンの動作手順〕
図１２は、マイコン２００がアドレスを変換してプログラム２１０を読み出す手順を示すフローチャート図の一例である。図１２のフローチャート図は、マイコン２００の起動中、繰り返し実行される。
【００４９】
アドレス変換部２０２は、プログラムカウンタ２０１から読み出し先の命令のアドレスを取得する（Ｓ１１０）。
【００５０】
アドレス変換部２０２は、アドレス変換テーブルを参照し、プログラムカウンタ２０１から取得したアドレスに対応づけられた物理アドレスを読み出す（Ｓ１２０）。
【００５１】
アドレス変換部２０２は、プログラムカウンタ２０１から取得したアドレスと、アドレス変換テーブルから読み出した物理アドレスを比較する（Ｓ１３０）。
【００５２】
両者が一致しない場合（Ｓ１３０Ｎｏ）、アドレス変換部２０２はアドレス変換テーブルから読み出した物理アドレスをアドレスコントローラに出力する（Ｓ１７０）。
【００５３】
両者が一致する場合（Ｓ１３０Ｙｅｓ）、アドレス変換部２０２はプログラムカウンタ２０１から取得したアドレスをアドレスコントローラに出力する（Ｓ１４０）。
【００５４】
アドレスコントローラ２０３は指定されたアドレスの命令をＣＰＵ１１に供給する（Ｓ１５０）。
【００５５】
ＣＰＵ１１が命令を実行すると、プログラムカウンタ２０１はアドレスを１つインクリメントする（Ｓ１６０）。このような処理を繰り返すことで、変更部を含め変更後のプログラム２１０が実行される。
【００５６】
本実施例の開発用情報処理装置１００又は車載されるマイコン２００によれば、プログラムが変更されても変更前と同じアドレスに記憶することで、プログラム変更時の再検査の工程を大幅に削減でき、ソフトウェアの開発コストを大幅に低減できる。
【実施例２】
【００５７】
実施例１では、変更により命令が追加された場合について説明したが、変更により一部の命令が消去される場合もあり得る。本実施例では変更により命令が消去された場合の開発用情報処理装置１００について説明する。
【００５８】
図１３は、リンカ１４０がアドレス変換テーブルを生成する手順を示すフローチャート図の一例である。図１３では、実施例１と比較してＳ２０が不要になる。
【００５９】
＜Ｓ１０  変更部を抽出＞
図１４は、変更前プログラムと変更後プログラムの比較を説明する図の一例である。図１４では、変更前プログラムから「xor  esp  eax」が削除されている。
ａ１．まず、変更部特定部１４１はＲＯＭ１２における先頭アドレスに変更後プログラムの先頭を配置した場合の仮想配置アドレスを求める。変更前プログラムについても同様である。
ａ２．次に、変更部特定部１４１は、変更前プログラムの命令をアドレス順に読み出し、変更後プログラムに同じ命令が登録されているか否かを判定する。すなわち、変更部特定部１４１は、変更前プログラムの１つの命令について、変更後プログラムの全ての命令をアドレス順に比較する。
ａ３．実施例１では、変更前プログラムになく変更後プログラムにある命令を抽出したが、本実施例では変更前プログラムにあり変更後プログラムにない命令を抽出する。変更部特定部１４１は、変更された（削除された）命令の仮想配置アドレス、及び、命令がないという情報「命令なし」を１組として、変更された全ての命令を取り出す。
【００６０】
本実施例では、追加されたことによる命令の変更部はない。よって、変更部アドレス決定部１４２は物理アドレスを決定する必要はない。
【００６１】
＜Ｓ３０  アドレス変換テーブルの作成＞
次に、アドレス変換テーブル作成部１４３がアドレス変換テーブルを生成する。
図１５は、アドレス変換テーブルの作成を説明する図の一例である。
【００６２】
追加された命令がない場合、ＲＯＭ１２に記憶されるプログラム２１０は変更の前と後で全く変わらない。しかし、ソースコードの変更を反映するため、ＣＰＵ１１が変更により削除された命令を実行することを回避する必要がある。
ｃ１．アドレス変換テーブル作成部１４３は、仮想メモリ配置のアドレスの命令と変更前プログラムの物理アドレスの命令とを順番に比較し、同じアドレスに異なる命令がある場合に、アドレスを変更する。図では、仮想配置アドレスの0xF0A2〜0xF0BE（関数Ａの最後）まで、同じアドレスに異なる命令がある。
ｃ２．アドレス変換テーブル作成部１４３は、仮想配置アドレスと同じ物理アドレスに同じ命令がある場合、変更前プログラムのアドレスと変更後プログラムのアドレスを対応づけて、アドレス変換テーブルを作成する。
ｃ３．仮想配置アドレスと同じ物理アドレスの異なる命令のうち、「命令なし」の命令は、仮想配置アドレスに対応づける必要がない。しかし、仮想配置アドレスに、ＲＯＭ１２の別のアドレスを対応づける必要がある。このため、アドレス変換テーブル作成部１４３は、「命令なし」の命令と同じ命令を変更前プログラムから検索し、「命令なし」の命令の仮想配置アドレスに変更前プログラムの命令の対応づける。
ｃ４．仮想配置アドレスと同じ物理アドレスの異なる命令のうち、残りの命令は、関数Ａ〜Ｃの領域内に同じ命令が存在するはずなので、仮想配置アドレスの１命令ずつ、変更前プログラムの命令を検索し、変更前プログラムの命令のアドレスを仮想配置アドレスに対応づける。以上のようにして、アドレス変換テーブルが作成される。
【００６３】
変更により一部の命令が消去された場合、消去後の命令のアドレスは１つずつ詰まっているので、命令とアドレスの関係がずれてしまう。このため、本来であれば、プログラム２１０の大部分で検査工程をやり直す必要が生じる。これに対し本実施例では、ＲＯＭ１２に記憶される実行ファイルに全く変更がないので、検査工程を大幅に削減できる。
【実施例３】
【００６４】
本実施例では、実施例１と実施例２を組み合わせた開発用情報処理装置１００について説明する。実施例１と２の２つの態様で変更部を抽出し、アドレス変換テーブルを生成すればよい。
本実施例の手順は実施例１と同様なのでフローチャート図は省略する。
【００６５】
＜Ｓ１０  変更部の抽出＞
図１６は、変更前プログラムと変更後プログラムの比較を説明する図の一例である。図１６では、「POP  edi」「POP  esi」「POP  ebx」の３つの命令が追加され、かつ、変更前プログラムから「xor  esp  eax」が削除されている。
ａ１．まず、変更部特定部１４１はＲＯＭ１２における先頭アドレスに変更後プログラムの先頭を配置した場合の仮想配置アドレスを求める。変更前プログラムについても同様である。
ａ２．次に、変更部特定部１４１は、変更前プログラムの命令をアドレス順に読み出し、変更後プログラムに同じ命令が登録されているか否かを判定する。すなわち、変更部特定部１４１は、変更前プログラムの１つの命令について、変更後プログラムの全ての命令をアドレス順に比較する。
【００６６】
a3‐1．図１６（ａ）に示すように、変更部特定部１４１は、変更前プログラムになく変更後プログラムにある命令を抽出する。変更部特定部１４１は、変更部の命令の仮想配置アドレス、及び、変更後プログラムの命令を１組として、変更された全ての命令を取り出す。
【００６７】
a3‐2．図１６（ａ）に示すように、変更部特定部１４１は、変更前プログラムにあり変更後プログラムにない命令を抽出する。変更部特定部１４１は、変更部の命令の仮想配置アドレス、及び、命令がないという情報「命令なし」を１組として、変更された全ての命令を取り出す。
【００６８】
＜Ｓ２０  物理アドレスの決定＞
変更部アドレス決定部１４２は、図１６（ｂ）に示すように、Ｓ3‐1の処理により得られた変更部についてのみ、物理アドレスを決定する。処理手順は実施例1と同様である。
ｂ１．変更部アドレス決定部１４２は、非変更部の最終アドレスの次のアドレス、又は、最終アドレスから若干離れたアドレスを先頭に、変更部を配置した時の物理アドレスを決定する。図１６では、0xFF00から変更部の命令が配置されることになる。
ｂ２．変更部アドレス決定部１４２は、変更部の命令の仮想配置アドレスと、物理アドレスを対応づけて記憶する。
【００６９】
＜Ｓ３０  アドレス変換テーブルの作成＞
図１７はアドレス変換テーブルの作成を説明する図の一例である。
アドレス変換テーブル作成部１４３は、変更部特定部１４１が特定した変更部、仮想配置アドレス、及び、物理アドレスを用いて、アドレス変換テーブル生成する。
ｃ１．アドレス変換テーブル作成部１４３は、仮想メモリ配置のアドレスの命令と変更前プログラムの物理アドレスの命令とを順番に比較し、同じアドレスに異なる命令がある場合に、アドレスを変更する。図では、仮想配置アドレスの0xF0A2〜0xF0BF（関数Ａの最後）まで、同じアドレスに異なる命令がある。また、変更後プログラムに追加された命令のため仮想配置アドレスの0xF0BF〜0xF0Cの命令も対象となる。
ｃ２．アドレス変換テーブル作成部１４３は、仮想配置アドレスと同じ物理アドレスに同じ命令がある場合、変更前プログラムのアドレスと変更後プログラムのアドレスを対応づけて、アドレス変換テーブルを作成する。
ｃ３．仮想配置アドレスと同じ物理アドレスの異なる命令のうち、領域外に配置される命令は、領域外の物理アドレスを対応づける。このため、アドレス変換テーブル作成部１４３は、上記b.2で抽出された仮想配置アドレスと物理アドレスを取り出してアドレス変換テーブルに書き出す。
【００７０】
「命令なし」の命令については、実施例２と同様に仮想配置アドレスの命令と同じ命令を検索すればよい。しかし、図示する例では、追加された命令が、「命令なし」の命令のアドレスに記述されるので、追加された命令の仮想配置アドレスと物理アドレスの対応付けを優先する。
ｃ４．仮想配置アドレスと同じ物理アドレスとで異なる命令のうち、残りの命令は、領域内に同じ命令が存在するはずなので、仮想配置アドレスの１命令ずつ、変更前の命令を検索し、変更前の命令を仮想配置アドレスに対応づける。
【００７１】
以上説明したように、本実施例の開発用情報処理装置１００は、命令が追加されても、削除されても、アドレス変換テーブルを作成することで、ＲＯＭ１２に記憶される変更前後のプログラム２１０のアドレスを変える必要がない。このため検査工程を大幅に削減できる。
【符号の説明】
【００７２】
１１      ＣＰＵ
１２      ＲＯＭ
１００    開発用情報処理装置
１３０    開発用プログラム
１４０    リンカ
１４１    変更部特定部
１４２    変更部アドレス決定部
１４３    アドレス変換テーブル作成部
２００    マイコン
２０１    プログラムカウンタ
２０２    アドレス変換部
２０３    アドレスコントローラ
２１０    プログラム
３００    車両
４００    サーバ
【図１】
2013080386.tif 000003
【図２】
2013080386.tif 000004
【図３】
2013080386.tif 000005
【図４】
2013080386.tif 000006
【図５】
2013080386.tif 000007
【図６】
2013080386.tif 000008
【図７】
2013080386.tif 000009
【図８】
2013080386.tif 000010
【図９】
2013080386.tif 000011
【図１０】
2013080386.tif 000012
【図１１】
2013080386.tif 000013
【図１２】
2013080386.tif 000014
【図１３】
2013080386.tif 000015
【図１４】
2013080386.tif 000016
【図１５】
2013080386.tif 000017
【図１６】
2013080386.tif 000018
【図１７】
2013080386.tif 000019