(57)【特許請求の範囲】
【請求項１】
リンク未解決な関数呼び出しを書換可能部分のロードモジュールに存在する関数への分岐命令とみなすこと、
分岐先を後記分岐テーブルに修正すること、
前記関数呼出しのリンク解決が終了した後に、前記修正による分岐先の関数呼出しの情報の一覧を自動生成し、書換不可能部分のロードモジュール内に保管すること、
前記情報に基づいて分岐テーブルを書換可能部分のロードモジュールに自動生成すること
とからなるフラッシュ内蔵マイコンのプログラムリンク方法。
【請求項２】
請求項１において、
前記一覧は、前記書換不可能部分のロードモジュールの生成時のアプリケーションプログラムリンク時に、分岐先修正ルーチンにより生成される
フラッシュ内蔵マイコンのプログラムリンク方法。
【請求項３】
請求項１において、更に、
書換不可能部分のアプリケーションプログラムのリンク時に未定義関数の呼出しがある場合に、分岐先修正ルーチンにより、前記分岐テーブルを呼び出すこと
からなるフラッシュ内蔵マイコンのプログラムリンク方法。
【請求項４】
請求項３において、更に、
書換可能部分のアプリケーションプログラムのリンク時に前記一覧を参照すること
からなるフラッシュ内蔵マイコンのプログラムリンク方法。
【請求項５】
請求項４において、
前記自動生成は、分岐テーブル生成ルーチンにより実行される
フラッシュ内蔵マイコンのプログラムリンク方法。
【請求項６】
請求項１において、更に、
書換不可能部分のアプリケーションプログラムのリンク時の前記情報を前記一覧に保管すること、
書換可能部分のアプリケーションプログラムを更新した場合、前記一覧を参照して再び前記分岐テーブルを生成することにより、書換可能部分の前記アプリケーションプログラムをリンクして書換可能部分のロードモジュールを生成すること
とからなるフラッシュ内蔵マイコンのプログラムリンク方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュ内蔵マイコンのプログラムリンク方法に関し、特に、書換可能部分のアプリケーションプログラムの更新があった場合にもその動作を自動的に継続することができるロードモジュールを生成することができるフラッシュ内蔵マイコンのプログラムリンク方法に関する。
【０００２】
【従来の技術】
フラッシュＥＥＰＲＯＭ内蔵の出現によりアプリケーションプログラムのセルフ書き換えを行なうことが多くなってきている。セルフ書き換えを行なうことにより、アプリケーションプログラムの機能や情報の追加・更新、障害の対処を容易に行なうことができる反面、アプリケーションプログラム開発時には、セルフ書き換えを行なった後でもアプリケーションプログラムが正常に動作するような手段を用意してそれを管理しなければならない。
【０００３】
従来の技術では、関数呼び出しの分岐先をあるアドレスに固定し、そのアドレスに分岐命令を配置し、二段分岐を行なうようなソースファイルを用意してロードモジュールを生成するリンク方法が用いられていた。フラッシュＥＥＰＲＯＭによるアプリケーションプログラムのセルフ書き換えを用いたこのようなシステムでは、アプリケーションプログラムの規模が大きくなるとともに、正常に動作させる手段を用意してそれを管理することに手間がかかっていた。このように手間がかかる理由は、アプリケーションプログラムのソースファイルを変更し、目的の関数を直接呼び出さずに中継点を経由するように、関数呼び出し毎に修正を行なわなければならないためである。
【０００４】
フラッシュ内蔵マイコンのアプリケーションプログラムの動作時にセルフ書き換えを行なった後にも、手間がかからずに正常に動作することが望まれる。
【０００５】
【発明が解決しようとする課題】
本発明の課題は、アプリケーションプログラムの動作時にセルフ書き換えを行なった後にも、手間がかからずに正常に動作するフラッシュ内蔵マイコンのプログラムリンク方法を提供することにある。
【０００６】
【課題を解決するための手段】
その課題を解決するための手段が、下記のように表現される。その表現中に現れる技術的事項には、括弧（）つきで、番号、記号等が添記されている。その番号、記号等は、本発明の実施の複数・形態又は複数の実施例のうちの少なくとも１つの実施の形態又は複数の実施例を構成する技術的事項、特に、その実施の形態又は実施例に対応する図面に表現されている技術的事項に付せられている参照番号、参照記号等に一致している。このような参照番号、参照記号は、請求項記載の技術的事項と実施の形態又は実施例の技術的事項との対応・橋渡しを明確にしている。このような対応・橋渡しは、請求項記載の技術的事項が実施の形態又は実施例の技術的事項に限定されて解釈されることを意味しない。
【０００７】
本発明によるフラッシュ内蔵マイコンのプログラムリンク方法は、リンク未解決な関数呼び出しを書換可能部分（１）のロードモジュール（５）に存在する関数への分岐命令とみなすこと、分岐先を下記分岐テーブルに修正すること、関数呼出しのリンク解決が終了した後に、修正による分岐先の関数呼出しの情報の一覧（１１）を自動生成し、書換不可能部分（２）のロードモジュール（６）内に保管すること、その情報に基づいて分岐テーブル（９）を書換可能部分（１）のロードモジュール（５）に自動生成することとからなる。アプリケーションプログラムは、その動作時にセルフ書き換えを行なった後にも手間を要しないで正常に動作する。
【０００８】
書換不可能部分（２）のアプリケーションプログラムのリンク時に未定義関数の呼出しがある場合に、一覧（１１）は、書換不可能部分（２）の側のロードモジュール（６）の生成時のアプリケーションプログラムリンク時に分岐先修正ルーチン（８）により生成される。書換可能部分（１）のアプリケーションプログラムのリンク時に一覧（１１）がある場合に、分岐テーブル（９）は、書換可能部分（１）の側のロードモジュール（５）の生成時のアプリケーションプログラムのリンク時に、分岐テーブル生成ルーチン（７）により生成される。
【０００９】
本発明によるフラッシュ内蔵マイコンのプログラムリンク方法は、更に、書換不可能部分（２）のアプリケーションプログラムの中の情報を一覧（１１）に保管すること、書換可能部分（１）のアプリケーションプログラムを更新した場合、一覧（１１）を参照して再び分岐テーブル（９）を生成することにより、書換可能部分（１）のアプリケーションプログラムをリンクして書換可能部分（１）の側のロードモジュール（５）を生成することとからなり、アプリケーションプログラムの更新があった場合にも、自動的に動作を継続することができるロードモジュールを生成することができる。
【００１０】
アプリケーションプログラム動作時にセルフ書き換えを行なうことにより、フラッシュに配置されたプログラムコードサイズが変化し、関数アドレス１が変動して、書き換えができない部分からの関数呼び出しがある場合にプログラムコードは不正になるが、図１に示されるように、フラッシュに二段分岐用のテーブル（９）を固定アドレスに用意し、中継して分岐することにより、関数アドレスの変動に対応することができるようになる。
【００１１】
【発明の実施の形態】
本発明によるフラッシュ内蔵マイコンのプログラムリンク方法の実施の形態は、アプリケーションプログラムが、書き換えが可能である書換可能部分と、書き換えが不可能である書換不可能部分に分けられて設けられている。フラッシュ内蔵マイコン上で動作するアプリケーションプログラムは、図２に示されるように、書換可能部分１と、書換不可能部分２とに分けられている。書換可能部分１と書換不可能部分２は、第１リンカ３と第２リンカ４により、それぞれに書換可能部分側ロードモジュール５と書換不可能部分側ロードモジュール６を生成する。第１リンカ３と第２リンカ４は、同一のコマンドでもかまわない。その場合には、オプションを指定させる等の動作を切り換える仕組みを用意する。
【００１２】
第１リンカ３には、これに属して分岐テーブル生成ルーチン７が設けられている。第２リンカ４には、これに属して分岐先修正ルーチン８が設けられている。書換可能部分ロードモジュール５には、分岐テーブル９が設けられる。書換不可能部分ロードモジュール６には、一覧１１が設けられる。
【００１３】
一覧１１は、未定義関数呼び出し情報を保持している。一覧１１は、書換不可能部分側ロードモジュール６の生成工程のアプリケーションプログラムリンク時に、分岐先修正ルーチン８により生成される。先に書換不可能部分２のリンク時に未定義関数の呼び出しがある場合に、第２リンカ４に属する分岐先修正ルーチン８で、固定アドレスに配置される分岐テーブル９を呼び出すようにする。書換不可能部分側ロードモジュール６内に埋め込まれている未定義関数呼び出しの一覧１１が、書換可能部分１のリンク時に参照され、分岐テーブル生成ルーチン７により分岐命令を羅列した分岐テーブル９が内部で自動生成される。分岐テーブル９は、書換可能部分側ロードモジュール５の中に埋め込まれる。
【００１４】
書換不可能部分２のリンク時に参照した情報を一覧１１に保管しておくことにより、書換可能部分１であるアプリケーションプログラムを更新した場合に、一覧１１を参照して再び分岐テーブル９を生成し、書換可能部分１をリンクして書換可能部分側ロードモジュール５を生成する。このようにして、フラッシュ内蔵マイコンにおいて、アプリケーションプログラム動作時にセルフ書き換えを行なった後でも、正常に動作する仕組みをプログラムリンク時に自動的に解決することが可能である。
【００１５】
分岐テーブル９は、二段分岐用の分岐命令を保持し、書換可能部分ロードモジュールの生成工程のアプリケーションプログラムリンク時に、分岐テーブル生成ルーチン７により生成される。
【００１６】
図３は、既述の実施の形態のうち分岐修正ルーチン８の動作を示している。分岐先修正ルーチン８は、リンク未解決な関数呼び出しが存在する場合（ステップＳ１）、その関数呼び出しを書換可能部分側ロードモジュール５に存在する関数への分岐命令とみなして（ステップＳ１）、分岐先を中継点である分岐テーブル９に修正する。図６に分岐テーブル９の内部構造が示されるように、分岐先のアドレスは、分岐テーブルの先頭アドレス＋通し番号＊テーブルの１要素の大きさから算出される。全ての関数呼出しのリンク解決終了後に、図５に示される形式により、修正した分岐先の情報の一覧１１を書換不可能部分側ロードモジュール６に埋め込む（ステップＳ３）。
【００１７】
図４は、既述の実施の形態のうち、分岐テーブル生成ルーチン７の動作を示している。分岐テーブル生成ルーチン７は、分岐先を修正された関数呼び出しの情報の一覧１１を読みこむ（ステップＳ４）。この情報を元に、通し番号順に分岐命令を羅列した分岐テーブル９を書換可能部分ロードモジュール５の内部に自動生成する。その際、各分岐命令に対して、リンク解決に必要な情報も生成する（ステップＳ５）。その後、リンク解決を行ない（ステップＳ６）、未定義関数呼び出しが存在するかどうかの判定を行なう（ステップＳ７）。未定義関数呼び出しが存在する場合には、エラー処理を行なう（ステップＳ８）。なお、分岐テーブル９の中に未定義関数呼び出しが存在する場合、リンカは、どちらのロードモジュール内にあるべき関数であるかの判断を行なうことができない。リンク解決が正常に終了した場合、アプリケーションプログラム動作時にセルフ書き換えを行なった後でも正常に動作するロードモジュールの生成が完了する。
【００１８】
図６に示される分岐テーブルによる二段分岐は、図７に示される関数アドレステーブルを用いたレジスタ間接分岐に代替され得る。書換不可能部分ロードモジュールの生成工程では、第２リンカ４の分岐先修正ルーチンのステップ９（図３参照）で、固定アドレスに配置される関数アドレステーブルのＮ番目に格納されるアドレスを参照して、分岐を行なうようにリンク解決をする。
【００１９】
次に、書換可能部分ロードモジュールの生成工程では、第１リンカ３の分岐テーブル生成ルーチン７が、情報の一覧１１に従って、通し番号順に関数アドレスを羅列した関数アドレステーブル（図７）を第１リンカ３の内部で自動生成する。この際、各関数アドレスに対して、リンク解決に必要な情報も生成するようにする。このような変更を行うことにより、関数アドレステーブルを用いたレジスタ間接分岐を用いた代替実行が可能である。なお、どちらのテーブルを用いるかは、生成するアプリケーションプログラムを動作させるアーキテクチャの特性を考慮して判断する。
【００２０】
【発明の効果】
本発明によるフラッシュ内蔵マイコンのプログラムリンク方法は、書換可能部分の固定アドレスに分岐命令を配置する分岐テーブルを持ち、そこを介する二段階分岐により正しく動作するアプリケーションプログラムがリンカにより自動生成され、アプリケーションプログラム開発時のユーザは、意識することなく、セルフ書き換え機能を用いることができる。
【図面の簡単な説明】
【図１】図１は、本発明によるフラッシュ内蔵マイコンのプログラムリンク方法の概念ブロック図である。
【図２】図２は、本発明によるフラッシュ内蔵マイコンのプログラムリンク方法の実施の形態を示す回路ブロック図である。
【図３】図３は、本発明によるフラッシュ内蔵マイコンのプログラムリンク方法の実施の形態のうち分岐修正ルーチンの動作を示すフローチャートである。
【図４】図４は、本発明によるフラッシュ内蔵マイコンのプログラムリンク方法の実施の形態のうち分岐テーブル生成ルーチンの動作を示すフローチャートである。
【図５】図５は、関数呼出しの情報の一覧である。
【図６】図６は、分岐テーブルである。
【図７】図７は、関数のアドレスを示すテーブルである。
【符号の説明】
１…書換可能部分（のアプリケーションプログラム）
２…書換不可能部分（のアプリケーションプログラム）
５…書換可能部分側ロードモジュール
６…書換不可能部分側ロードモジュール
７…分岐テーブル生成ルーチン
８…分岐先修正ルーチン
９…分岐テーブル
１１…一覧
【図１】
0003542529.tif 000002
【図２】
0003542529.tif 000003
【図３】
0003542529.tif 000004
【図４】
0003542529.tif 000005
【図５】
0003542529.tif 000006
【図６】
0003542529.tif 000007
【図７】
0003542529.tif 000008