説明

情報処理装置、アドレス管理方法

【課題】プログラム変更時の再検査をさらに低減できる情報処理装置を提供すること。
【解決手段】変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段103と、変更前後のプログラムの変更部を抽出する変更部抽出手段141と、変更部の命令の先頭からの仮想アドレスを決定すると共に、変更前のプログラムのアドレスを固定したまま、変更前のプログラム及び前記変更部を記憶手段に配置した際の該変更部の物理アドレスを決定し、物理アドレスと仮想アドレスとを対応づけた中間テーブルを作成するアドレス決定手段142と、変更後のプログラムの各命令と、変更後のプログラムの各命令を先頭からアドレス毎に比較し、異なる命令が記述されている場合は、中間テーブルの物理アドレスと仮想アドレスとを取り出して登録したアドレス変換テーブルを作成するアドレス変換テーブル作成手段143と、を有する情報処理装置100を提供する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、実行ファイルを作成する情報処理装置に関する。
【背景技術】
【0002】
C言語などの高級言語は、コンピュータがプログラムを実行するために、開発者がコーディングしたソースコードを、コンピュータが処理可能なオブジェクトコードに変換する翻訳処理を必要とする。
【0003】
図1は、一般的な翻訳処理の手順の一例を示す。コンパイラはソースコードに対し、字句解析(キーワードや変数の抽出)、構文解析(文法に従っているかの解析)、意味解析(実行可能の解析)、コード生成(オブジェクトコードの生成)等の処理を施す。リンカは、オブジェクトコードが参照する他のファイルやライブラリを特定して結合する。これによりコンピュータが実行可能な実行ファイルが生成される。組み込みソフトの場合、実行ファイルはROMに記憶され、一般にプログラムを呼ばれる。
【0004】
ところで、ソフトウェア開発では、一度は製品開発が完了しROMに記憶されたプログラムに対し、処理内容を修正したり追加したりすることがよく行われる。開発者がソースコードを変更した場合、その変更が一部(例えば、一命令でも)でも上記の翻訳処理の全てをソースコードの全体に行う必要がある。
【0005】
図2は、ソースコードの変更が実行ファイルに与える影響を説明する図の一例である。変更前のプログラムは3つの関数A〜Cを有し、ROMの図示するアドレスに記憶される。開発者が関数Aに3つの命令を追加する変更を加えた場合、翻訳処理により生成される実行ファイルにも関数Aの変更が反映されるので、関数Aが記憶されるROMのアドレスの一部だけでなく、変更箇所以降の全ての命令のアドレスが変更になる。図では3つのPOP命令を含め、ソースコードの変更がない関数B,Cの命令のアドレスが全て変更になっている。
【0006】
命令とアドレスの関係が変更になると、CPUが命令Aを実行する際にメモリにアクセスするタイミングが、同じ命令Aを実行する場合でも変わってくるおそれがある。メモリアクセスのタイミングが変わると、それまでは生じていなかった不具合が生じる可能性を否定できない。このため、ソフトウェア開発では、ソースコードに対する一部の変更でも、プログラム全体の再検査が行われている。車載ソフトではプログラムの開発コストのうち、検査工程のコストが3〜7割を占めると言われており、プログラムの変更に伴う再検査の工程が大きなコスト増となっている。
【0007】
ソースコードの変更に伴う命令の再配置を抑制する技術も提案されている(例えば、特許文献1参照。)。特許文献1には、変更のない関数については元のアドレスに配置する言語処理装置が開示されている。
【0008】
図3は、特許文献1のプログラムの再配置を説明する図の一例である。ソースコードの変更により、実行ファイルに例えば以下のコードが追加されたものとする。
POP edi
POP exi
追加によりこれらの命令以降の命令はアドレスが変更される。しかし、特許文献1の言語処理装置は、変更のない関数B,Cの命令はアドレスを変更しない。このため、アドレスが変更になる命令は、関数Aの“POP edi”から関数Aの最後の命令に留めることができる。変更により関数Aのサイズが大きくなったため、関数Bの直前のアドレスまでに配置困難になった命令は、関数Cよりも後のアドレスに配置される。このように、引用文献1では、関数単位でプログラムを記憶することで、アドレスの変更を最小限にすることができる。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2002−108625号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、特許文献1では、変更された関数Aのいくつかの命令についてアドレスの変更があるため、アドレスに変更が生じた命令については再検査が必要になるという問題がある。つまり図3の関数Aの“POP edi”から関数Aの最後の命令までは再検査が必要であるため、コスト低減効果が十分ではない。
【0011】
本発明は、上記課題に鑑み、プログラム変更時の再検査をさらに低減できる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明は、変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段と、変更前のプログラムと変更後のプログラムの変更部を抽出する変更部抽出手段と、前記変更部を含め変更後のプログラムの各命令を外部の記憶手段に配置した際の仮想アドレスを決定すると共に、変更前のプログラムのアドレスを固定したまま、変更前のプログラム及び前記変更部を記憶手段に配置した際の該変更部の物理アドレスを決定し、前記物理アドレスと前記相対アドレスとを対応づけた中間テーブルを作成するアドレス決定手段と、変更後のプログラムの各命令と、変更後のプログラムの各命令を先頭からアドレス毎に比較し、同じ命令が記述されている場合は、それらのアドレスを対応付けて登録し、異なる命令が記述されている場合は、前記中間テーブルの前記物理アドレスと前記相対アドレスとを取り出して登録したアドレス変換テーブルを作成するアドレス変換テーブル作成手段と、を有する情報処理装置を提供する。
【発明の効果】
【0013】
プログラム変更時の再検査をさらに低減できる情報処理装置を提供することができる。
【図面の簡単な説明】
【0014】
【図1】一般的な翻訳処理の手順の一例を示す図である。
【図2】ソースコードの変更が実行ファイルに与える影響を説明する図の一例である。
【図3】特許文献1のプログラムの再配置を説明する図の一例である。
【図4】変更前後のプログラムの配置を説明する図の一例である。
【図5】開発用情報処理装置、及び、開発されたプログラムを実行する車両を有するプログラム配信システムを模式的に示す図の一例である。
【図6】開発用情報処理装置及びマイコンのハードウェア構成図の一例である。
【図7】開発用プログラムの機能ブロック図の一例である。
【図8】リンカがアドレス変換テーブルを生成する手順を示すフローチャート図の一例である。
【図9】変更前プログラムと変更後プログラムの比較を説明する図の一例である。
【図10】アドレス変換テーブルの作成を説明する図の一例である。
【図11】マイコンの機能ブロックの一例を示す図である。
【図12】マイコンがアドレスを変換してプログラムを読み出す手順を示すフローチャート図の一例である。
【図13】リンカがアドレス変換テーブルを生成する手順を示すフローチャート図の一例である(実施例2)。
【図14】変更前プログラムと変更後プログラムの比較を説明する図の一例である(実施例2)。
【図15】アドレス変換テーブルの作成を説明する図の一例である(実施例2)。
【図16】変更前プログラムと変更後プログラムの比較を説明する図の一例である(実施例3)。
【図17】アドレス変換テーブルの作成を説明する図の一例である(実施例3)。
【発明を実施するための形態】
【0015】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【実施例1】
【0016】
図4は、変更前後のプログラムの配置を説明する図の一例である。関数Aにだけ、以下のようなコードの追加が生じる変更があったとする。
POP edi
POP esi
POP ebx
(i) 本実施形態のリンカは、実行ファイルに何らかの変更が生じても、変更前の実行ファイルにおける命令とアドレスの関係を一切変更しない。図示するように、変更が生じない関数B,Cだけでなく、変更が加えられた関数Aも、変更前と同じROMの同じアドレスに配置される。
【0017】
そして、元の実行ファイルに存在しない命令は、同じROMの関数A〜Cとは別の領域に配置される(記憶される)。
(ii) 一方、このままでは、上記3つの命令を、関数Aのどの命令の次に実行すればよいか不明となる。このため、リンカは変更前の実行ファイルの各命令のアドレスと、変更後の実行ファイルの各命令のアドレスを対応づけるアドレス変換テーブルを生成する。
【0018】
リンカは、オブジェクトコードを生成する際に、追加命令を他の命令と区別することなく1つの実行ファイルに結合する。よって、実行ファイルの先頭アドレスを基準とした、追加命令の相対的なアドレスは判明している(以下、リンカが生成した変更後の実行ファイルの、ROMに書き込まれと仮定した場合の配置を仮想メモリ配置という。また、仮想メモリ配置のアドレスを仮想配置アドレスという)。変更後のプログラムは仮想メモリ配置の順に実行される。したがって、仮想メモリ配置の命令と、変更前の同じアドレスに記憶されている命令を比較して一致しない命令は、仮想メモリ配置の命令と領域外の命令の物理アドレスとを対応づけることでアドレス変換テーブルを生成できる。
【0019】
(iii) CPUが、ROMに記憶された変更後の実行ファイル(変更なしの実行ファイル+領域外の追加分の命令)を実行する場合、プログラムカウンタには、ROMのアドレス順に、CPUが次に読み出す命令のアドレスが順次、格納される。しかし、CPUが単に順番に命令を実行しても追加された3つの命令を実行できない。このため、プログラムカウンタは、アドレス変換部に次に読み出す命令のアドレスを出力する。
【0020】
アドレス変換部はアドレス変換テーブルを参照して、読み出す命令のアドレスを仮想メモリ配置のアドレスとして、仮想メモリ配置アドレスに対応づけられた物理アドレスをアドレスコントローラに出力する(読み出す命令のアドレスの物理アドレスに変換する)。したがって、CPUが追加された命令を実行する際は、必要に応じて関数A〜Cの領域外にアクセスする。
【0021】
以上のようにして、関数A〜Cのアドレスを変えずに、追加命令だけを領域外に記憶しても、CPUは変更後の実行ファイルを不都合なく実行できる。ソフトウェアの検査工程においては、開発者は、関数A〜Cのアドレスに変更がないので、領域外の命令にアクセスするテストのみを実行すればよい。したがって、プログラム変更時の再検査の工程を大幅に削減でき、ソフトウェアの開発コストを大幅に低減できる。
【0022】
〔構成例〕
図5は、本実施形態の開発用情報処理装置、及び、開発されたプログラムを実行するマイコン200が搭載された車両を有するプログラム配信システム500を模式的に示す図の一例である。開発用情報処理装置100は、一般的なソフトウェア開発の各工程を実行するPC(Personal Computer)やワークステーションなどのコンピュータである。検査工程が完了したプログラムは、車両300の出荷時にマイコン200のROMに記憶される。また、車両300の出荷後にプログラムに変更があった場合は、ディーラなどのサービスエンジニアがツールを使用して車両300のマイコン200のROMに変更後のプログラムを書き込む。また、車両300の出荷後に、プログラムに変更があった場合、開発者等がプログラムをサーバ400に記憶しておけば、通信装置(DCM:Data Communication Module)がサーバ400からダウンロードすることができる。車載されたマイコン200は、ダウンロードしたプログラムを車両300のROMに書き込む。開発用情報処理装置100で開発されたプログラムはいずれの態様でROMに記憶されてもよく、記憶された後の実行方法は同じである。
【0023】
図6(a)は開発用情報処理装置100のハードウェア構成図の一例を示す。開発用情報処理装置100は、CPU101、ROM102、RAM103、HDD104、ネットワークI/F105、グラフィックボード106、キーボード107、マウス108、メディアドライブ109、及び、DVD−ROMドライブ110を有する。CPU101は、HDD104に記憶された開発用プログラム130を実行して開発用情報処理装置100の全体の動作を制御する。ROM102は、IPL(Initial Program Loader)や静的なデータを記憶しており、車載されたROMとは異なるものである。RAM103は、CPU101が開発用プログラム130を実行する際のワークエリアとして使用される。
【0024】
HDD104にはCPU101が実行する開発用プログラム130やOSが記憶される。ネットワークI/F105はネットワークに接続するための例えばイーサネット(登録商標)カードであり、主にレイヤ1、2の処理を提供する。レイヤ3以上の処理は、OSに含まれるTCP/IPのプロトコルスタックや不図示の通信プログラムが提供する。
【0025】
グラフィックボード106は、CPU101がビデオRAMに書き込んだ描画コマンドを解釈してディスプレイ120にウィンドウ、メニュー、カーソル、文字又は画像などの各種情報を表示する。キーボード107は、文字、数値、各種指示などのための複数のキーを備え、ユーザの操作を受け付けCPU101に通知する。同様に、マウス108はカーソルの移動、メニューなどの処理対象の選択、処理内容などのユーザの操作を受け付ける。メディアドライブ109は、フラッシュメモリ等の記録メディア111に対するデータの読み出し又は書き込み(記憶)を制御する。DVD−ROMドライブ110は、着脱可能な記録媒体の一例としてのCD−RW、DVD−RW等の光メディア112に対する各種データの読み出し又は書き込みを制御する。また、上記各構成要素を電気的に接続するためのアドレスバスやデータバス等のバスライン113を備えている。
【0026】
開発用プログラム130は、インストール可能な形式又は実行可能な形式のファイルで、コンピュータで読み取り可能な記録メディア111や光メディア112に記録して流通される。また、開発用プログラム130は、不図示のサーバからインストール可能な形式又は実行可能な形式のファイルで開発用情報処理装置100に配布されてもよい。
【0027】
図6(b)は、車両300に搭載されるマイコン200のハードウェア構成図の一例である。マイコン200は、ECU(Electronic Control Unit)に搭載されることが想定されているがその用途は車両に限定されない。車載されるECUには、その主要な機能により、エンジンECU、ブレーキECU、ボディECU、ナビゲーションECU(AV・情報処理ECU)、ゲートウェイECU等の種類がある。本実施例のマイコン200はECUの機能の違いに影響されず搭載されることが可能である。また、複数の機能が1つに統合されたECUにマイコン200を搭載してもよい。
【0028】
マイコン200は、バスに接続されたCPU11、ROM12、INTC13、RAM14、DMAC15、並びに、I/Oブリッジ16を有し、I/Oブリッジ16にはADC17及びCANコントローラ18が接続されている。
【0029】
CPU11は1つ以上のコアを有し、プログラムカウンタ201及びアドレス変換部202を含む、一般的な構成(例えば、ALU等の演算装置、命令バッファ、命令デコーダ、レジスタセット等)を有している。アドレス変換部202はCPU11の外部に配置されていてもよい。
【0030】
ROM12はフラッシュメモリなどの不揮発メモリであり、CPU11が実行するプログラム210や静的なパラメータを記憶している。ROM12にはアドレスコントローラ203が配置されている。アドレスコントローラ203は、アドレス変換部202が出力した命令のアドレスを解釈してROM12に出力する。指定されたアドレスの命令はROM12から読み出されCPU11の命令バッファに記憶される。
【0031】
INTC13はIRQやその他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してCPU11に通知する。これによりCPU11は、割り込みした周辺機器に応じて決まったアドレスの命令をROM12から読み出して処理を実行する。
【0032】
RAM14は、CPU11がプログラム210を実行するための作業領域である。CPU11はROM12からプログラム210を読み込み、また、必要であればデータバスを介してRAM14からデータを読み出しプログラム210を実行する。DMAC15は、CPU11からの指示によりRAM14からI/Oブリッジ16を介して周辺機器にデータを送信する。また、周辺機器から割り込みされたCPU11から指示を受けて、I/Oブリッジ16を介して周辺機器からデータを受け取り、RAM14に書き込む。
【0033】
I/Oブリッジ16は、マルチプレクサ又はブリッジ回路であり、チャネル毎にADC、及び、CANコントローラとそれぞれ接続されており、これらの周辺機器とデータを送受信する。ADC(analog to digital converter)17は、センサが検出したアナログ信号をデジタル信号に変換する。なお、ADC17もINTC13を介して変換の終了をCPU11に通知する。CANコントローラ18は、車載ネットワークを介して接続された他のECUと通信するための通信装置である。CANコントローラ18は、CPU11から通信データの送信要求を受け付けるとフレームの各フィールドにIDやデータを格納しCANバスに出力する。また、CANコントローラ18は、受信すべきIDの通信データを検出するとそれを取り込みCPU11に割り込んで通知する。
【0034】
<開発用情報処理装置の機能ブロック>
図7は、開発用プログラム130の機能ブロック図の一例を示す。本実施形態では開発用プログラム130のリンカ140がいくつかの新たな機能を有するが、これらの機能はリンカ140とは別の機能として開発用プログラム130に実装してもよい。
【0035】
リンカ140は、変更部特定部141、変更部アドレス決定部142、及び、アドレス変換テーブル作成部143を有する。リンカ140にこれらの機能を起動させるため、開発者はリンク時にリンカオプションを指定する。リンカオプションは、例えば、次のように指定し、XXXをリンカ140の仕様に応じて設定することで、デバッグ情報の作成、プログラムデータベースファイルの作成等、種々のオプションを指定できる。
LINK /XXX
リンカ140は、開発者が変更したソースコードから生成されたオブジェクトコードを結合して実行ファイル(プログラム210)を生成する。図ではこれを変更後プログラムとしている。開発用情報処理装置100のHDD104には変更後プログラムと変更前プログラムが記憶されている。
【0036】
本実施形態のリンカ140は、変更部特定のリンカオプションが指定されると、変更部特定部141が、変更前プログラムと変更後プログラムの変更部を特定する。なお、リンカ140には、変更部特定のリンカオプションと共に、プログラム210のROM12における先頭アドレスが指定される。よって、ROM12におけるプログラム210の各命令のアドレスはリンカ140にとって既知となる。
【0037】
変更部特定部141は、変更前プログラムと変更後プログラムの変更部を特定する。変更部アドレス決定部142は、変更部のROM12における物理アドレスを決定する。アドレス変換テーブル作成部143は、アドレス変換テーブルを生成する。これらの処理については後に詳述する。
【0038】
〔アドレス変換テーブルの作成〕
図8は、リンカ140がアドレス変換テーブルを生成する手順を示すフローチャート図の一例である。以下、S10〜S30まで順に説明する。
<S10 変更部の抽出>
図9(a)は、変更前プログラムと変更後プログラムの比較を説明する図の一例である。図9(a)では「POP edi」「POP esi」「POP ebx」の3つの命令が追加されている。
a1.まず、変更部特定部141はROM12における先頭アドレスに変更後プログラムの先頭を配置した場合の仮想配置アドレスを求める。変更前プログラムについても同様である。
a2.次に、変更部特定部141は、変更前プログラムの命令をアドレス順に読み出し、変更後プログラムに同じ命令が登録されているか否かを判定する。すなわち、変更部特定部141は、変更前プログラムの1つの命令について、変更後プログラムの全ての命令をアドレス順に比較する。
a3.変更部特定部141は、変更前プログラムと変更後プログラムの両方にある命令を、変更後プログラムから除いた残りを変更部として抽出する。変更部特定部141は、追加された命令の仮想配置アドレス、及び、変更後プログラムの命令を1組として、変更された全ての命令を取り出す。
【0039】
<S20 変更部の物理アドレスの決定>
図9(b)は、実行ファイルの変更部の物理アドレスの決定について説明する図の一例である。
b1.変更後プログラムの非変更部は、変更前プログラムと同じROM12のアドレスに記憶される。このため、ROM12における非変更部のアドレスは固定であると共に既知である。変更部アドレス決定部142は、非変更部の最終アドレスの次のアドレス、又は、最終アドレスから若干離れたアドレスを先頭に、変更部を配置した時の物理アドレスを決定する。図9(b)では、0xFF00から変更部の命令が配置されることになる。
b2.変更部アドレス決定部142は、変更部の命令の仮想配置アドレスと、物理アドレスを対応づけて記憶する。
【0040】
<S30 アドレス変換テーブルの作成>
図10はアドレス変換テーブルの作成を説明する図の一例である。
アドレス変換テーブル作成部143は、変更部特定部141が特定した変更された命令の仮想配置アドレス、及び、物理アドレスを用いて、アドレス変換テーブルを作成する。
c1.ROM12に記憶されるのは変更前プログラム(変更後プログラムの非変更部)と追加分である。このため、アドレス変換テーブル作成部143は、仮想メモリ配置のアドレスの命令と変更前プログラムの物理アドレスの命令とを順番に比較し、同じアドレスに異なる命令がある場合に、アドレスを変更する。図では、仮想配置アドレスの0xF0A3〜0xF0BF(関数Aの最後)までのアドレスに、同じアドレスに異なる命令がある。また、変更後プログラムに追加された命令のため、仮想配置アドレスの0xF0BFから0xF0C2までの命令も変換の対象となる。
c2.アドレス変換テーブル作成部143は、仮想配置アドレスと同じ物理アドレスに同じ命令がある場合、変更前プログラムの仮想配置アドレスと変更後プログラムの物理アドレスを対応づけて、アドレス変換テーブルを作成する。つまり同じアドレス同士を対応づける。
c3.仮想配置アドレスと同じ物理アドレスの異なる命令のうち、領域外に配置される命令は、領域外の物理アドレスを対応づける。このため、アドレス変換テーブル作成部143は、上記b.2で抽出された仮想配置アドレスと物理アドレスを取り出してアドレス変換テーブルに書き出す。
c4.仮想配置アドレスと同じ物理アドレスの異なる命令のうち、残りの命令は、関数A〜Cの領域内に同じ命令が存在するはずなので、仮想配置アドレスの1命令ずつ、変更前プログラムの命令を検索し、変更前プログラムの命令のアドレスを仮想配置アドレスに対応づける。以上のようにして、アドレス変換テーブルが作成される。
【0041】
<車両のマイコンの機能ブロック>
図11は、マイコン200の機能ブロックの一例を示す図である。プログラム210の非変更部は、変更前プログラムと同じROM12の物理アドレスに、変更部は、変更部アドレス決定部142が決定したROM12の物理アドレスに記憶される。
【0042】
プログラムカウンタ201は、原則的にROM12の先頭アドレスから順番に命令のアドレスを指定し、CPU11がROM12から命令を読み出す。しかし、ROM12には変更前の実行ファイルが記憶されているので、CPU11が変更部にアクセスするタイミングで、CPU11は変更後の命令が記憶されている領域外のアドレスから命令を読み出さなければならない。
【0043】
そこで、アドレス変換部202は、プログラムカウンタ201が決定したアドレスを、アドレス変換テーブルの仮想配置アドレスとして、仮想配置アドレスに対応づけられた物理アドレスを読み出す。例えば、プログラムカウンタ201が決定したアドレスが0xF000の場合、アドレス変換テーブルから0xF000が読み出される。プログラムカウンタ201が決定したアドレスが0xF0A0〜0xF0A2の場合も、アドレス変換テーブルから0xF0A0〜0xF0A2が読み出される。
【0044】
これに対し、プログラムカウンタ201が決定したアドレスが0xF0A3の場合、アドレス変換テーブルから0xFF00が読み出され、同様に0xF0A4に対してはアドレス変換テーブルから0xFF01が読み出され、0xF0A5に対してはアドレス変換テーブルから0xFF02が読み出される。アドレス変換テーブルにより、CPU11が読み出す命令のアドレスを変更することができる。
【0045】
なお、アドレス変換テーブルは、アドレス変換部202に記憶されていてもよいし、ROM12に記憶しておき、マイコン200の起動時にプログラム210がROM12から読み出しアドレス変換部202のレジスタ等に読み出してもよい。
【0046】
アドレスコントローラ203は、アドレス変換部202が命令バスのアドレス線(Address)に出力した物理アドレスのうちRowアドレスをRowコントローラに出力する。Rowコントローラは、Rowアドレスをデコードして、Row線をアクティブ状態にする。
また、アドレスコントローラ203は、アドレス変換部202が命令バスのアドレス線(Address)に出力した物理アドレスのうちColumnアドレスをColumnコントローラに出力する。Columnコントローラは、Columnアドレスをデコードして、Column線をアクティブ状態にする。Row線/Column線の両方がアクティブになったROM12の領域のデータが、データ線に出力されCPU11に取り込まれる。
【0047】
〔テスト工程〕
ROM12には、図9(b)に示した非変更部の命令と追加分の命令が記憶される。開発者は、変更部の命令が記憶された0xFF00〜0xFF02にCPU11がアクセスするテストパターンを作成してテストを行うか、又は、例えばSMVコードでCPU11が0xFF00〜0xFF02にアクセスするモデルを作成しモデル検査を行うなどの、検査工程を行う。したがって、本実施例では、プログラム210の全体をテストする場合と比べ、検査工程を大幅に削減できる。
【0048】
〔マイコンの動作手順〕
図12は、マイコン200がアドレスを変換してプログラム210を読み出す手順を示すフローチャート図の一例である。図12のフローチャート図は、マイコン200の起動中、繰り返し実行される。
【0049】
アドレス変換部202は、プログラムカウンタ201から読み出し先の命令のアドレスを取得する(S110)。
【0050】
アドレス変換部202は、アドレス変換テーブルを参照し、プログラムカウンタ201から取得したアドレスに対応づけられた物理アドレスを読み出す(S120)。
【0051】
アドレス変換部202は、プログラムカウンタ201から取得したアドレスと、アドレス変換テーブルから読み出した物理アドレスを比較する(S130)。
【0052】
両者が一致しない場合(S130No)、アドレス変換部202はアドレス変換テーブルから読み出した物理アドレスをアドレスコントローラに出力する(S170)。
【0053】
両者が一致する場合(S130Yes)、アドレス変換部202はプログラムカウンタ201から取得したアドレスをアドレスコントローラに出力する(S140)。
【0054】
アドレスコントローラ203は指定されたアドレスの命令をCPU11に供給する(S150)。
【0055】
CPU11が命令を実行すると、プログラムカウンタ201はアドレスを1つインクリメントする(S160)。このような処理を繰り返すことで、変更部を含め変更後のプログラム210が実行される。
【0056】
本実施例の開発用情報処理装置100又は車載されるマイコン200によれば、プログラムが変更されても変更前と同じアドレスに記憶することで、プログラム変更時の再検査の工程を大幅に削減でき、ソフトウェアの開発コストを大幅に低減できる。
【実施例2】
【0057】
実施例1では、変更により命令が追加された場合について説明したが、変更により一部の命令が消去される場合もあり得る。本実施例では変更により命令が消去された場合の開発用情報処理装置100について説明する。
【0058】
図13は、リンカ140がアドレス変換テーブルを生成する手順を示すフローチャート図の一例である。図13では、実施例1と比較してS20が不要になる。
【0059】
<S10 変更部を抽出>
図14は、変更前プログラムと変更後プログラムの比較を説明する図の一例である。図14では、変更前プログラムから「xor esp eax」が削除されている。
a1.まず、変更部特定部141はROM12における先頭アドレスに変更後プログラムの先頭を配置した場合の仮想配置アドレスを求める。変更前プログラムについても同様である。
a2.次に、変更部特定部141は、変更前プログラムの命令をアドレス順に読み出し、変更後プログラムに同じ命令が登録されているか否かを判定する。すなわち、変更部特定部141は、変更前プログラムの1つの命令について、変更後プログラムの全ての命令をアドレス順に比較する。
a3.実施例1では、変更前プログラムになく変更後プログラムにある命令を抽出したが、本実施例では変更前プログラムにあり変更後プログラムにない命令を抽出する。変更部特定部141は、変更された(削除された)命令の仮想配置アドレス、及び、命令がないという情報「命令なし」を1組として、変更された全ての命令を取り出す。
【0060】
本実施例では、追加されたことによる命令の変更部はない。よって、変更部アドレス決定部142は物理アドレスを決定する必要はない。
【0061】
<S30 アドレス変換テーブルの作成>
次に、アドレス変換テーブル作成部143がアドレス変換テーブルを生成する。
図15は、アドレス変換テーブルの作成を説明する図の一例である。
【0062】
追加された命令がない場合、ROM12に記憶されるプログラム210は変更の前と後で全く変わらない。しかし、ソースコードの変更を反映するため、CPU11が変更により削除された命令を実行することを回避する必要がある。
c1.アドレス変換テーブル作成部143は、仮想メモリ配置のアドレスの命令と変更前プログラムの物理アドレスの命令とを順番に比較し、同じアドレスに異なる命令がある場合に、アドレスを変更する。図では、仮想配置アドレスの0xF0A2〜0xF0BE(関数Aの最後)まで、同じアドレスに異なる命令がある。
c2.アドレス変換テーブル作成部143は、仮想配置アドレスと同じ物理アドレスに同じ命令がある場合、変更前プログラムのアドレスと変更後プログラムのアドレスを対応づけて、アドレス変換テーブルを作成する。
c3.仮想配置アドレスと同じ物理アドレスの異なる命令のうち、「命令なし」の命令は、仮想配置アドレスに対応づける必要がない。しかし、仮想配置アドレスに、ROM12の別のアドレスを対応づける必要がある。このため、アドレス変換テーブル作成部143は、「命令なし」の命令と同じ命令を変更前プログラムから検索し、「命令なし」の命令の仮想配置アドレスに変更前プログラムの命令の対応づける。
c4.仮想配置アドレスと同じ物理アドレスの異なる命令のうち、残りの命令は、関数A〜Cの領域内に同じ命令が存在するはずなので、仮想配置アドレスの1命令ずつ、変更前プログラムの命令を検索し、変更前プログラムの命令のアドレスを仮想配置アドレスに対応づける。以上のようにして、アドレス変換テーブルが作成される。
【0063】
変更により一部の命令が消去された場合、消去後の命令のアドレスは1つずつ詰まっているので、命令とアドレスの関係がずれてしまう。このため、本来であれば、プログラム210の大部分で検査工程をやり直す必要が生じる。これに対し本実施例では、ROM12に記憶される実行ファイルに全く変更がないので、検査工程を大幅に削減できる。
【実施例3】
【0064】
本実施例では、実施例1と実施例2を組み合わせた開発用情報処理装置100について説明する。実施例1と2の2つの態様で変更部を抽出し、アドレス変換テーブルを生成すればよい。
本実施例の手順は実施例1と同様なのでフローチャート図は省略する。
【0065】
<S10 変更部の抽出>
図16は、変更前プログラムと変更後プログラムの比較を説明する図の一例である。図16では、「POP edi」「POP esi」「POP ebx」の3つの命令が追加され、かつ、変更前プログラムから「xor esp eax」が削除されている。
a1.まず、変更部特定部141はROM12における先頭アドレスに変更後プログラムの先頭を配置した場合の仮想配置アドレスを求める。変更前プログラムについても同様である。
a2.次に、変更部特定部141は、変更前プログラムの命令をアドレス順に読み出し、変更後プログラムに同じ命令が登録されているか否かを判定する。すなわち、変更部特定部141は、変更前プログラムの1つの命令について、変更後プログラムの全ての命令をアドレス順に比較する。
【0066】
a3‐1.図16(a)に示すように、変更部特定部141は、変更前プログラムになく変更後プログラムにある命令を抽出する。変更部特定部141は、変更部の命令の仮想配置アドレス、及び、変更後プログラムの命令を1組として、変更された全ての命令を取り出す。
【0067】
a3‐2.図16(a)に示すように、変更部特定部141は、変更前プログラムにあり変更後プログラムにない命令を抽出する。変更部特定部141は、変更部の命令の仮想配置アドレス、及び、命令がないという情報「命令なし」を1組として、変更された全ての命令を取り出す。
【0068】
<S20 物理アドレスの決定>
変更部アドレス決定部142は、図16(b)に示すように、S3‐1の処理により得られた変更部についてのみ、物理アドレスを決定する。処理手順は実施例1と同様である。
b1.変更部アドレス決定部142は、非変更部の最終アドレスの次のアドレス、又は、最終アドレスから若干離れたアドレスを先頭に、変更部を配置した時の物理アドレスを決定する。図16では、0xFF00から変更部の命令が配置されることになる。
b2.変更部アドレス決定部142は、変更部の命令の仮想配置アドレスと、物理アドレスを対応づけて記憶する。
【0069】
<S30 アドレス変換テーブルの作成>
図17はアドレス変換テーブルの作成を説明する図の一例である。
アドレス変換テーブル作成部143は、変更部特定部141が特定した変更部、仮想配置アドレス、及び、物理アドレスを用いて、アドレス変換テーブル生成する。
c1.アドレス変換テーブル作成部143は、仮想メモリ配置のアドレスの命令と変更前プログラムの物理アドレスの命令とを順番に比較し、同じアドレスに異なる命令がある場合に、アドレスを変更する。図では、仮想配置アドレスの0xF0A2〜0xF0BF(関数Aの最後)まで、同じアドレスに異なる命令がある。また、変更後プログラムに追加された命令のため仮想配置アドレスの0xF0BF〜0xF0Cの命令も対象となる。
c2.アドレス変換テーブル作成部143は、仮想配置アドレスと同じ物理アドレスに同じ命令がある場合、変更前プログラムのアドレスと変更後プログラムのアドレスを対応づけて、アドレス変換テーブルを作成する。
c3.仮想配置アドレスと同じ物理アドレスの異なる命令のうち、領域外に配置される命令は、領域外の物理アドレスを対応づける。このため、アドレス変換テーブル作成部143は、上記b.2で抽出された仮想配置アドレスと物理アドレスを取り出してアドレス変換テーブルに書き出す。
【0070】
「命令なし」の命令については、実施例2と同様に仮想配置アドレスの命令と同じ命令を検索すればよい。しかし、図示する例では、追加された命令が、「命令なし」の命令のアドレスに記述されるので、追加された命令の仮想配置アドレスと物理アドレスの対応付けを優先する。
c4.仮想配置アドレスと同じ物理アドレスとで異なる命令のうち、残りの命令は、領域内に同じ命令が存在するはずなので、仮想配置アドレスの1命令ずつ、変更前の命令を検索し、変更前の命令を仮想配置アドレスに対応づける。
【0071】
以上説明したように、本実施例の開発用情報処理装置100は、命令が追加されても、削除されても、アドレス変換テーブルを作成することで、ROM12に記憶される変更前後のプログラム210のアドレスを変える必要がない。このため検査工程を大幅に削減できる。
【符号の説明】
【0072】
11 CPU
12 ROM
100 開発用情報処理装置
130 開発用プログラム
140 リンカ
141 変更部特定部
142 変更部アドレス決定部
143 アドレス変換テーブル作成部
200 マイコン
201 プログラムカウンタ
202 アドレス変換部
203 アドレスコントローラ
210 プログラム
300 車両
400 サーバ

【特許請求の範囲】
【請求項1】
変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段と、
変更前のプログラムと変更後のプログラムの変更部を抽出する変更部抽出手段と、
前記変更部を含め変更後のプログラムの各命令を外部の記憶手段に配置した際の仮想アドレスを決定すると共に、
変更前のプログラムの物理アドレスを固定したまま、変更前のプログラム及び前記変更部を前記外部の記憶手段に配置した際の該変更部の物理アドレスを決定し、前記変更部の前記仮想アドレスと前記物理アドレスとを対応づけた中間テーブルを作成するアドレス決定手段と、
変更後のプログラムの各命令と、変更前のプログラムの各命令を先頭からアドレス毎に比較し、同じ命令が記述されている場合は、それらのアドレスを対応付けて登録し、異なる命令が記述されている場合は、前記中間テーブルの前記仮想アドレスと前記物理アドレスとを対応づけて登録したアドレス変換テーブル、を作成するアドレス変換テーブル作成手段と、
を有する情報処理装置。
【請求項2】
前記変更部抽出手段が、変更前のプログラムにあり変更後のプログラムにない命令を前記変更部として抽出した場合、
前記アドレス変換テーブル作成手段は、変更後のプログラムにない命令の前記仮想アドレスの命令を、変更前のプログラムから検索し、該仮想アドレスと検索した命令の物理アドレスを対応づけてアドレス変換テーブルに登録する、
ことを特徴とする請求項1記載の情報処理装置。
【請求項3】
前記アドレス変換テーブル作成手段は、前記仮想アドレスと物理アドレスの同じアドレスに異なる命令が記述されているが、前記中間テーブルに登録されていない前記仮想アドレスについて、該仮想アドレスの命令を変更前のプログラムから検索し、該仮想アドレスと検索した命令の物理アドレスを対応づけてアドレス変換テーブルに登録する、
ことを特徴とする請求項1又は2記載の情報処理装置。
【請求項4】
請求項1又は2に記載された情報処理装置により生成されたアドレス変換テーブルと、
変更前のプログラム及び前記変更部が記憶された前記外部の記憶手段と、
命令実行手段が読み出す命令のアドレスを生成するアドレス生成手段と、
前記アドレス生成手段が生成したアドレスと、該アドレスと同じ前記アドレス変換テーブルの前記仮想アドレスに対応づけられた前記物理アドレスとが異なる場合、該アドレスを前記物理アドレスに変換するアドレス変換手段と、
前記アドレス変換手段が変換した前記物理アドレスの命令を前記記憶手段から読み出し、前記命令実行手段に供給する命令読み出し手段と、
を有する情報処理装置。
【請求項5】
情報処理装置が作成するプログラムのアドレスを管理するアドレス管理方法であって、
変更前のプログラムと変更後のプログラムを記憶するプログラム記憶手段から、変更部抽出手段が、変更前のプログラムと変更後のプログラムを読み出し、両者の変更部を抽出するステップと、
アドレス決定手段が、前記変更部を含め変更後のプログラムの各命令を外部の記憶手段に配置した際の仮想アドレスを決定するステップと、
変更前のプログラムの物理アドレスを固定したまま、変更前のプログラム及び前記変更部を外部の記憶手段に配置した際の該変更部の物理アドレスを決定するステップと、
前記変更部の前記仮想アドレスと前記物理アドレスとを対応づけた中間テーブルを作成するステップと、
アドレス変換テーブル作成手段が、変更後のプログラムの各命令と、変更前のプログラムの各命令を先頭からアドレス毎に比較するステップと、
同じ命令が記述されている場合は、それらのアドレスを対応付けて登録し、異なる命令が記述されている場合は、前記中間テーブルの前記仮想アドレスと前記物理アドレスとを対応づけて登録したアドレス変換テーブルを作成するステップと、
を有するアドレス管理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate