(57)【要約】【課題】フラッシュメモリ内のプログラムをブロック単位で効率よく更新する方法を提供する。【解決手段】プログラム書換データ生成装置は、変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合し、ソースプログラム１１の変更によりオブジェクトコードのコード数が増加した場合に、フラッシュメモリ１５の未使用領域に、変更後のオブジェクトコードにおいて追加された部分をサブルーチン化し配置するための第１の転送データ（ブロックｍ＋１）と、前記変更後のオブジェクトコードにおいて追加された部分の直前に、前記サブルーチンへの分岐又は呼び出し命令を配置するための第２の転送データ（ブロックＸ）と、をそれぞれ生成する手段を備える。上記第１、第２の転送データによりブロックＸ、ｍ＋１を書き換えることにより、ソースプログラムの修正が反映される。【選択図】図３
2007164242.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリのブロックサイズに基づきブロック単位で、前記フラッシュメモリに書き込まれたオブジェクトコードの書換用データを生成するプログラム書換データ生成装置であって、
変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合する手段と、
前記ソースプログラムの変更によりオブジェクトコードのコード数が増加した場合に、前記フラッシュメモリの未使用領域に、前記変更後のオブジェクトコードにおいて追加された部分をサブルーチン化し配置するための第１の転送データと、前記変更後のオブジェクトコードにおいて追加された部分の直前に、前記サブルーチンへの分岐又は呼び出し命令を配置するための第２の転送データと、をそれぞれ生成する手段と、を備えたこと、
を特徴とするプログラム書換データ生成装置。
【請求項２】
更に、前記第２の転送データが前記メモリの複数のブロックにまたがってしまうか否かを検査する手段と、
前記第２の転送データが前記メモリの複数のブロックにまたがってしまう場合には、前記第２の転送データが配置される先頭側のブロックの内容をサブルーチン化し前記第１の転送データに繰り込む手段と、
前記第１の転送データへの繰り込み量に応じて、前記第２の転送データの分岐又は呼び出し命令の位置を繰り上げて、前記第２の転送データを１ブロックに収納する手段と、を備えたこと、
を特徴とする請求項１に記載のプログラム書換データ生成装置。
【請求項３】
更に、前記変更後のオブジェクトコードの他の部分に、前記第２の転送データによって置き換えられる部分を分岐先とする分岐命令が有るか否かを検査する手段と、
前記変更後のオブジェクトコードの他の部分に、前記第２の転送データによって置き換えられる部分を分岐先とする分岐命令が存在する場合、前記第２の転送データの前記分岐先箇所に、前記第１の転送データの対応箇所への分岐又は呼び出し命令を配置する手段と、を備えたこと、
を特徴とする請求項１又は２に記載のプログラム書換データ生成装置。
【請求項４】
前記ソースプログラムの変更によりオブジェクトコードのコード数が減少した場合に、前記変更前のオブジェクトコードの被変更箇所を同数のダミーコードに置き換えた転送データを生成する手段を備えたこと、
を特徴とする請求項１ないし３いずれか一に記載のプログラム書換データ生成装置。
【請求項５】
更に、変更前のソースプログラムと変更後のソースプログラムを識別可能に、所定の記法で記述されたソースプログラムから、それぞれ変更前と変更後のオブジェクトコードを生成する手段を備えたこと、
を特徴とする請求項１ないし４いずれか一に記載のプログラム書換データ生成装置。
【請求項６】
フラッシュメモリのブロックサイズに基づきブロック単位で、前記フラッシュメモリに書き込まれたオブジェクトコードの書換用データを生成するプログラム書換データ生成装置を構成するコンピュータに実行させるプログラムであって、
変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合する処理と、
前記照合の結果、ソースプログラムの変更によりオブジェクトコードのコード数が増加した場合に、前記フラッシュメモリの未使用領域に、前記変更後のオブジェクトコードにおいて追加された部分をサブルーチン化し配置するための第１の転送データと、前記変更後のオブジェクトコードにおいて追加された部分の直前に、前記サブルーチンへの分岐又は呼び出し命令を配置するための第２の転送データと、をそれぞれ生成する処理とを、前記コンピュータに実行させるプログラム。
【請求項７】
前記第２の転送データが前記メモリの複数のブロックにまたがってしまうか否かを検査する処理と、
前記第２の転送データが前記メモリの複数のブロックにまたがってしまう場合には、前記第２の転送データが配置される先頭側のブロックの内容をサブルーチン化し前記第１の転送データに繰り込むとともに、前記第１の転送データへの繰り込み量に応じて、前記第２の転送データの分岐又は呼び出し命令の位置を繰り上げて、前記第２の転送データを１ブロックに収納する処理とを、
前記コンピュータに実行させる請求項６に記載のプログラム。
【請求項８】
更に、前記変更後のオブジェクトコードの他の部分に、前記第２の転送データによって置き換えられる部分を分岐先とする分岐命令が有るか否かを検査する処理と、
前記検査の結果、前記変更後のオブジェクトコードの他の部分に、前記第２の転送データによって置き換えられる部分を分岐先とする分岐命令が存在する場合、前記第２の転送データの前記分岐先箇所に、前記第１の転送データの対応箇所への分岐又は呼び出し命令を配置する処理とを、
前記コンピュータに実行させる請求項６又は７に記載のプログラム。
【請求項９】
前記ソースプログラムの変更によりオブジェクトコードのコード数が減少した場合に、前記変更前のオブジェクトコードの被変更箇所を同数のダミーコードに置き換えた転送データを生成する処理を、
前記コンピュータに実行させる請求項６ないし８いずれか一に記載のプログラム。
【請求項１０】
更に、変更前のソースプログラムと変更後のソースプログラムを識別可能に、所定の記法で記述されたソースプログラムから、それぞれ変更前と変更後のオブジェクトコードを生成する処理を、
前記コンピュータに実行させる請求項６ないし９いずれか一に記載のプログラム。
【請求項１１】
フラッシュメモリのブロックサイズに基づきブロック単位で、前記フラッシュメモリに書き込まれたオブジェクトコードの書換用データを生成するプログラム書換データ生成装置を構成するコンピュータを用いて実行するオブジェクトコード書換用データの生成方法であって、
前記コンピュータが、変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合するステップと、
前記ソースプログラムの変更によりオブジェクトコードのコード数が増加した場合に、前記コンピュータが、前記フラッシュメモリの未使用領域に、前記変更後のオブジェクトコードにおいて追加された部分をサブルーチン化し配置するための第１の転送データと、前記変更後のオブジェクトコードにおいて追加された部分の直前に、前記サブルーチンへの分岐又は呼び出し命令を配置するための第２の転送データと、をそれぞれ生成するステップと、を含むこと、
を特徴とする第１、第２の転送データからなるオブジェクトコード書換用データの生成方法。
【請求項１２】
フラッシュメモリのブロックサイズに基づきブロック単位で、前記フラッシュメモリに書き込まれたオブジェクトコードの書換用データを生成するプログラム書換データ生成装置を構成するコンピュータを用いて実行するオブジェクトコード書換用データの生成方法であって、
前記コンピュータが、変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合するステップと、
前記ソースプログラムの変更によりオブジェクトコードのコード数が減少した場合に、前記コンピュータが、前記変更前のオブジェクトコードの被変更箇所を同数のダミーコードに置き換えた転送データを生成するステップと、を含むこと、
を特徴とするオブジェクトコード書換用データの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム書換データ生成装置、プログラム及びプログラム書換データ生成方法に関し、特に、ターゲット機器のフラッシュメモリに格納されたプログラムの書き換えに適したプログラム書換データ生成装置、プログラム及びプログラム書換データ生成方法に関する。
【背景技術】
【０００２】
近年、いわゆる情報家電やオーディオ機器等の製品において、外部機器との通信機能を備えたものが普及しつつあり、その通信機能を用いて組込みマイコン内部のプログラムを書き換えることにより、出荷後の機能向上や不具合対策等を行うことが可能となっている。
【０００３】
図８は、ソースプログラムをコンパイルし、組込みマイコン内のフラッシュメモリに書き込むまでの従来の装置構成を表した図である。ソースプログラム２１は、例えばＣ言語等の高級言語で記述されている。コンピュータ２０上で動作するコンパイラ２２は、ソースプログラム２１を解析してオブジェクトコード２３を生成する。オブジェクトコード２３は、機械語及び機械語を書き込む組込みマイコン２４内のフラッシュメモリ２５のアドレスで構成される。変更したソースプログラム２１から、コンパイラ２２によりオブジェクトコード２３を生成し、フラッシュメモリ２５の内容を書換えることにより組込みマイコン２４内のプログラムを変更することが可能となる。
【０００４】
特開２００３−５８３８０号公報に、プログラマブルコントローラ用に作成したソースプログラムをコンパイルし、プログラマブルコントローラ側に転送するプログラマブルコントローラの支援装置、コンパイル方法及びコンパイラが開示されている。同公報では、前回のコンパイル時の変数名とアドレスとの対応関係を保存しておき、コンパイル時にこの対応関係に従ってアドレス割り当てを行う方法が提案されている。
【０００５】
【特許文献１】特開２００３−５８３８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
図９は、フラッシュメモリに格納したプログラムを変更する際の問題点を説明するための図である。例えば、元のソースプログラム２１の「ｄａｔａ１＝１；ｄａｔａ３＝３;」との記述を、「ｄａｔａ１＝１；ｄａｔａ２＝２；ｄａｔａ３＝３;」と変更しコンパイルした場合（図９の２１ａ）、コード数が増加しアドレスにずれが生じるため、当該変更はオブジェクトコード２３の対応箇所のみならず、これに後続する部分にも及んでしまう。また、「ｄａｔａ１＝１；ｄａｔａ３＝３;」との記述を削除した場合（図９の２１ｂ）、コード数の減少となるがアドレスにずれが生じるため、この場合も当該変更はオブジェクトコード２３の対応箇所のみならず、これに後続する部分にも及んでしまう。
【０００７】
従って、従来の方式では、ソースプログラムの変更の程度と、書き換え対象データのサイズが比例せず、ソースプログラムの変更が僅かなものであってもオブジェクトコードを大きく入れ替えねばならないケースが多々生じてしまうという問題点がある。また、当然に、書き換え対象データのサイズが大きくなれば、書き換え（通信）に要する時間も比例して大きくなってしまう。
【０００８】
例えば、ブロックサイズが２Ｋバイトであるフラッシュメモリの１６ブロックの書換えが必要となった場合を考えると、３２Ｋバイトの通信が必要となる。対象機器、例えば、上述した情報家電やオーディオ機器に備えられた通信速度が低速である場合、例えば９６００ｂｐｓであるとすると（エコーネット（ＥＣＨＯＮＥＴ）の低速電灯線通信相当）、通信時間は２７．３秒以上となる。その間、プログラム書換え中のため、組込みマイコンが制御している機器は製品としての通常動作を行うことができず、またオブジェクトコードの送受信のため通信ラインも占有されることになる。
【０００９】
また、特許文献１の技術は、変数の割付アドレスを不変とするものである故に、一度割り付けられたアドレスに引き摺られてオブジェクトコードのサイズが大きくなり、またメモリへの割付を行うためコンパイル時間も増加してしまうという問題点がある。
【課題を解決するための手段】
【００１０】
本発明の第１の視点によれば、フラッシュメモリのブロックサイズに基づきブロック単位で、前記フラッシュメモリに書き込まれたオブジェクトコードの書換用データを生成するプログラム書換データ生成装置であって、変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合する手段と、前記ソースプログラムの変更によりオブジェクトコードのコード数が増加した場合に、前記フラッシュメモリの未使用領域に、前記変更後のオブジェクトコードにおいて追加された部分をサブルーチン化し配置するための第１の転送データと、前記変更後のオブジェクトコードにおいて追加された部分の直前に、前記サブルーチンへの分岐又は呼び出し命令を配置するための第２の転送データと、をそれぞれ生成する手段と、を備えたこと、を特徴とするプログラム書換データ生成装置が提供される。
【００１１】
また、本発明の第２の視点によれば、上記同様、変更前のソースプログラムと変更後のソースプログラムをそれぞれコンパイルした変更前後のオブジェクトコードを照合し、前記ソースプログラムの変更によりオブジェクトコードのコード数が減少した場合に、前記変更前のオブジェクトコードの被変更箇所を同数のダミーコードに置き換えた転送データを生成する手段を備えたこと、を特徴とするプログラム書換データ生成装置が提供される。
【発明の効果】
【００１２】
本発明によれば、ソースプログラムを変更した場合において、その変更の程度に見合った書換用データを生成することが可能となり、フラッシュメモリ内のプログラムをブロック単位で効率よく更新することが可能となる。
【発明を実施するための最良の形態】
【００１３】
続いて、本発明を実施するための最良の形態について図面を参照して詳細に説明する。図１は、本発明の第１の実施形態に係るプログラム書換データ生成装置（プログラム書換データ生成手段）を含むコンピュータシステムの構成を表したブロック図である。
【００１４】
図１を参照すると、コンピュータ１０は、コンピュータプログラムで構成されたコンパイラ１２を備えて構成されている。コンパイラ１２は、ソースプログラム１１からオブジェクトコードを生成する機能を備えるとともに、ソースプログラム１１中に記述された更新前のソースプログラムと、ブロック情報１６を利用し、後に詳述する方法により、フラッシュメモリ書換用のオブジェクトコード１３を生成するプログラム書換データ生成手段を構成している。
【００１５】
図１に図示されたように、ソースプログラム１１には、「＃ＯＬＤ」で括られた変更前ソースプログラムと「＃ＮＥＷ」で括られた変更後ソースプログラムを記述可能となっている。
【００１６】
ブロック情報１６には、組込みマイコン１４内のフラッシュメモリ１５の各ブロックのサイズが記述される。
【００１７】
コンパイラ１２は、変更前のソースプログラムと、変更後のソースプログラムを解析し、ブロック情報１６の各ブロックのサイズを考慮して、フラッシュメモリ１５への転送データが少なくて済むフラッシュメモリ書換用のオブジェクトコード１３を生成する。フラッシュメモリ書換用のオブジェクトコード１３を用いて、組込みマイコン１４のフラッシュメモリ１５への書換えが行われる。以下、コンパイラ１２がフラッシュメモリ書換用のオブジェクトコード１３を生成する際の詳細動作について説明する。
【００１８】
図２は、コンパイラによるフラッシュメモリ書換用のオブジェクトコードの生成フローを表したフローチャートである。図２を参照すると、まず、コンパイラ１２は、変更前ソースプログラムと、変更後ソースプログラムの記述をそれぞれ解析して２つのオブジェクトコードを仮生成する（ステップＳ００１）。
【００１９】
続いて、コンパイラ１２は、変更前ソースプログラムから生成したオブジェクトコード（以下、「変更前オブジェクトコード」という）と変更後ソースプログラムから生成したオブジェクトコード（以下、「変更後オブジェクトコード」という）のコード数を比較する（ステップＳ００２）。以下、ステップＳ００２において、「コード数増減なし」、「コード数増」、「コード数減」と判定された場合について、図２と、本発明の理解に必要なオブジェクトコードについてアセンブラで表記した図３〜図７の補助図面を参照して説明する。
【００２０】
［コード数増減なし］
変更前後のオブジェクトコードのコード数が同じである場合、後記するコード数が増加又は減少した場合のようなオブジェクトコードの最適化処理は行われない。組込みマイコン１４のフラッシュメモリ１５への転送データを最小化する観点からすれば、例えば、変更後オブジェクトコードから、置換すべき（変更のあった）ブロックのデータのみを抽出することにより、最小時間で書換を行うことが可能となる。
【００２１】
［コード数増］
変更後オブジェクトコードのコード数が増加している場合、コンパイラ１２は、変更が生じた先頭箇所を特定し、変更後オブジェクトコードのソースプログラム変更前にはオブジェクトコードが配置されていなかったブロックに対応する箇所（未使用領域）に、上記変更（追加）があった部分（命令、データ）を移動する（ステップＳ００３）。
【００２２】
また、コンパイラ１２は、変更後オブジェクトコードの上記移動した部分に後続する変更のない部分の配置アドレスを変更前オブジェクトコードと一致するようにシフトさせるとともに、変更があった箇所に上記ステップＳ００３で移動した先への分岐命令を配置する（ステップＳ００４）。
【００２３】
以上により、コード数増の原因となった部分は、サブルーチン化されて未使用領域に先送りされ、ステップＳ００３にて追加した部分（第１の転送データ）と、ステップＳ００４にて分岐命令を配置した部分（第２の転送データ）を更新するだけで、ソースプログラムの修正内容を正確に反映することが可能となる。
【００２４】
例えば、図３のように、ソースプログラム１１において、「ｄａｔａ２＝２；」を追加修正した場合、変更後オブジェクトコードのコード数は増加する。この場合、コンパイラ１２は、変更後オブジェクトコードにおいて変更（追加）があった部分「ＭＯＶ  ｄａｔａ１，１  ＭＯＶ  ｄａｔａ２，２  ＭＯＶ  ｄａｔａ３，３」を未使用領域に移動するとともに、変更前オブジェクトコードの「ＭＯＶ  ｄａｔａ１，１  ＭＯＶ  ｄａｔａ３，３」があった箇所に、「ＢＲ  Ｒｅｐｌａｃｅ  Ｒｅｐｌａｃｅ＿Ｃｏｎｔｉｎｕｅ」を配置する（変更箇所２（１３ｂ）；「ＢＲ」は強制分岐命令を示す。）とともに、変更箇所１（１３ａ）の末尾を「ＢＲ  Ｒｅｐｌａｃｅ＿Ｃｏｎｔｉｎｕｅ」としてサブルーチン化する。
【００２５】
従って、図３の例では、オブジェクトコードの差異のある箇所に対応するブロックＸ（第２の転送データ）とブロックｍ＋１（第１の転送データ）の２ブロックを書換えるだけで、ソースプログラムの修正を正しく反映することが可能となる。
【００２６】
なお、図３では、強制分岐命令「ＢＲ」を用いているが、例えば図４のように、変更箇所１（１３ｃ）と、変更箇所２（１３ｄ）にそれぞれ、関数呼出命令「ＣＡＬＬ」とリターン命令「ＲＥＴ」を配置するものとしてもよい。
【００２７】
また、コード数が増加した場合、上記変更箇所２が複数ブロックに及んでしまう場合も考えられる。本実施の形態では、コンパイラ１２は、以下の処理を行うこととしている。
【００２８】
上記変更箇所２の修正に続いて、コンパイラ１２は、ブロック情報１６と、変更後オブジェクトコードを参照して、変更箇所２の分岐命令が複数のブロックに及んでいるか否かを判定する（ステップＳ００５）。
【００２９】
ここで、変更箇所２の分岐命令がブロックをまたがって配置されていた場合は、コンパイラ１２は、その先頭側のブロックの分岐命令の配置アドレスより前（若いアドレス）に配置されている内容（命令、データ）を、上記変更箇所１の前に繰り込み、変更箇所２の分岐命令をその空いた箇所に移動する（ステップＳ００６）。
【００３０】
例えば、図５のように、変更箇所２（１３ｂ）が、フラッシュメモリ１５のブロックＸとブロックＸ＋１のブロックをまたがって配置されている場合、コンパイラ１２は、変更箇所２（１３ｂ）の直前の命令Ａを変更箇所１（１３ａ）の前に繰り込み、空き領域を作るとともに、変更箇所２（１３ｂ）の分岐命令をその空いた箇所に移動する。
【００３１】
これにより、変更箇所１のボリュームが増大することとなるが、変更箇所１に対応するブロックに空きがありブロック数が変更しないようであれば、変更箇所２の変更により更新が必要となるブロック数を削減することが可能となる。例えば、図５の例では、当初ブロックＸ、ブロックＸ＋１、ブロックｍ＋１の３ブロックの書換が必要となるところ、ステップＳ００５、Ｓ００６を経ることにより、ブロックＸ、ブロックｍ＋１の２ブロックの書換で済むこととなる。
【００３２】
また、上述のような配置替えを行った結果、当該配置替え前のコードを分岐先とするオブジェクトコードの他の分岐命令に影響が及んでしまう場合も考えられる。本実施の形態では、コンパイラ１２は、以下の処理を行うこととしている。
【００３３】
上記変更箇所２のブロック収納処理に続いて、コンパイラ１２は、変更後オブジェクトコードを参照して、変更箇所２を分岐先とする分岐命令の有無を判定する（ステップＳ００７）。
【００３４】
ここで、変更箇所２を分岐先とする分岐命令が存在した場合は、コンパイラ１２は、当該分岐命令の分岐先アドレスに、変更箇所１の対応アドレスへの分岐命令を配置する（ステップＳ００８）。
【００３５】
例えば、図６のように、変更後オブジェクトコードの任意の位置に変更箇所２を分岐先とする分岐命令１３ｅが存在する場合、分岐命令１３ｅの分岐先を修正することによっても対応可能であるが、書き換え対象ブロックが増加してしまう。そこで、本実施形態に係るコンパイラ１２は、分岐命令１３ｅの分岐先は修正せず、変更箇所２の分岐先アドレスに変更箇所１への分岐命令を配置する。
【００３６】
これにより、書き換え対象ブロックの増大を抑止することが可能となる。例えば、図６の例では、当初ブロックＸ、ブロックＹ、ブロックｍ＋１の３ブロックの書換が必要となるところ、ステップＳ００７、Ｓ００８を経ることにより、ブロックＸ、ブロックｍ＋１の２ブロックの書換で済むこととなる。
【００３７】
［コード数減］
変更後オブジェクトコードのコード数が減少している場合、コンパイラ１２は、変更が生じた先頭箇所を特定し、当該箇所の前に削除されたオブジェクトコードのコード数分のダミー命令を追加し、変更後オブジェクトコードのコード数を変更前オブジェクトコードと一致させる（ステップＳ００９）。従って、変更箇所２に対応するブロックＸのみを置き換える転送データにより、ソースコードの変更を正確に反映することが可能となる。
【００３８】
例えば、図７のように、ソースプログラム１１において、「ＭＯＶ  ｄａｔａ１，１  ＭＯＶ  ｄａｔａ２，２  ＭＯＶ  ｄａｔａ３，３」が削除された場合、変更後オブジェクトコードのコード数は減少する。この場合、変更前オブジェクトコードの被変更箇所の先頭部分を直近の非変更箇所に強制分岐させる命令「ＢＲ  Ｒｅｐｌａｃｅ＿Ｃｏｎｔｉｎｕｅ」と書き換える（その他は変更前オブジェクトコードと同一でよい。）変更箇所２（１３ｆ）とすることにより、当該ブロック以外については、変更前オブジェクトコードの内容をそのまま用いることが可能となる。
【００３９】
以上のとおり、変更前後のコード数の増減に応じたオブジェクトコードの最適化（再配置）を行うことにより、組込みマイコン１４に内蔵されるフラッシュメモリ１５の書換対象ブロック数を最小限に抑えることが可能となり、そのための通信時間の短縮も可能となる。
【００４０】
例えば、フラッシュメモリ１５のブロックのサイズを２Ｋバイト、ｎブロックあるものと仮定すると、従来方式では２Ｋ×（（ｎ−Ｘ）＋１）バイトの書き換えボリュームとなるが、本発明によれば、書換対象ブロック数を２ブロック、４Ｋバイトの書き換えボリュームとすることが可能となり、９６００ｂｐｓにて通信時間は、３２７６８／９６００≒３．４秒と短縮される。
【００４１】
以上、本発明の好適な実施形態を説明したが、本発明の技術的範囲は、上述した実施形態に限定されるものではなく、変更前後のプログラムを解析し、増えた部分はサブルーチンとして外に出し、減った部分はダミー化することにより、オブジェクトコードの書き換えが必要なブロックのみを置き換えるという本発明の要旨を逸脱しない範囲で、各種の変形・置換をなしうることが可能であることはいうまでもない。
【００４２】
例えば、上記した実施形態では、コンパイラ１２が新旧両方の内容が記述されたソースプログラムから新旧２つのオブジェクトコードを生成させ、その後オブジェクトコードの最適化（再配置）を行うものとして説明したが、一般のコンパイラ１２にそれぞれ新旧のソースプログラムを個別にコンパイルをさせた後に、プログラム書換データ生成手段を構成するプログラムやプログラム書換データ生成装置に上記ステップＳ００２〜Ｓ００９の処理を行わせるものとしてもよい。
【００４３】
また本発明は、その原理からも明らかなとおり、各種の高級言語にてソースプログラムの修正を行い、各種機器のフラッシュメモリに格納されたオブジェクトコードを更新する際に利用することが可能であり、この点においても、上述した実施形態により拘束されるものではない。
【図面の簡単な説明】
【００４４】
【図１】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）を含むコンピュータシステムの構成を表したブロック図である。
【図２】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）の動作を表したフローチャートである。
【図３】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）の詳細動作を説明するための図である。
【図４】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）の詳細動作を説明するための図である。
【図５】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）の詳細動作を説明するための図である。
【図６】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）の詳細動作を説明するための図である。
【図７】本発明の第１の実施形態に係るコンパイラ（プログラム書換データ生成手段）の詳細動作を説明するための図である。
【図８】従来技術（コンパイル処理）を説明するための図である。
【図９】組込みマイコンのフラッシュメモリに格納したプログラムを変更する際の問題点を説明するための図である。
【符号の説明】
【００４５】
１０、２０  コンピュータ
１１、２１  ソースプログラム
１２  コンパイラ（プログラム書換データ生成手段）
１３  （フラッシュメモリ書換用）オブジェクトコード
１３ａ、１３ｃ  変更箇所１
１３ｂ、１３ｄ、１３ｆ  変更箇所２
１３ｅ  分岐命令
１４、２４  組込みマイコン
１５、２５  フラッシュメモリ
１６  ブロック情報
２１ａ、２１ｂ  ソースコード変更箇所
２２  コンパイラ
２３  オブジェクトコード
【図１】
2007164242.tif 000003
【図２】
2007164242.tif 000004
【図３】
2007164242.tif 000005
【図４】
2007164242.tif 000006
【図５】
2007164242.tif 000007
【図６】
2007164242.tif 000008
【図７】
2007164242.tif 000009
【図８】
2007164242.tif 000010
【図９】
2007164242.tif 000011