(57)【要約】【課題】プログラムの実行中にエラーが発生しても、全体の動作を継続することのできるプログラム実行装置を得る。【解決手段】エラー検出対応コール命令・リターン命令実行機能部５は、エラー発生による関数コール無効化機能に対応したＥＣＡＬＬ命令を実行する。エラー検出命令実行機能部６は、エラー検出命令により、ＥＣＡＬＬ命令によるプログラム実行中のエラーを検出する。エラー検出命令実行機能部６でエラーが検出された場合、エラー検出対応コール命令・リターン命令実行機能部５は、ＥＣＡＬＬ命令を無効化する。【選択図】図１
2010198183.tif 000002
【特許請求の範囲】
【請求項１】
分岐命令によるプログラム実行中のエラーを検出するエラー検出部と、
前記エラー検出部でエラーを検出した場合に、以後の命令実行で当該分岐命令を無効とする命令実行部とを備えたプログラム実行装置。
【請求項２】
エラー検出部は、分岐命令によるプログラム実行で得た値が、指定した値以上もしくは値以下か否か、または値の符号が正か負か、または値の絶対値が指定した範囲内であるか否かに基づいてエラーを検出することを特徴とする請求項１記載のプログラム実行装置。
【請求項３】
エラー検出部でエラーが検出された場合、当該エラー発生を示すエラー発生フラグがオン状態となるエラー発生状態保持部と、
前記エラーが発生した分岐命令が置かれているプログラムメモリ上のアドレスを保持するアドレス保持部とを備え、
前記エラー発生状態保持部でエラー発生フラグがオンであり、かつ、前記アドレス保持部で保持されているアドレスの分岐命令を実行する場合は、当該分岐命令を無効命令に置き換えることを特徴とする請求項１または請求項２記載のプログラム実行装置。
【請求項４】
エラー検出部は、通常の分岐命令とは異なるエラー発生無効化分岐命令が与えられた場合に、当該エラー発生無効化分岐命令により実行されるプログラムのエラーを検出することを特徴とする請求項１から請求項３のうちのいずれか１項記載のプログラム実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分岐命令によるプログラムの実行中にエラーを検出した場合に、プログラム動作全体を停止することなく、エラーを検出した分岐命令部分のプログラム実行を停止することにより、プログラム動作自体は継続する機能を有するプログラム実行装置に関する。
【背景技術】
【０００２】
従来、プログラムを実行するシステムにおいて、システムの動作中に異常が発生した場合に、システムを停止するモードと、異常が発生した装置をシステムから切り離して動作を継続するモードのいずれを選択すべきかを決定する装置があった。
例えば、特許文献１に記載された装置では、エラー検出機構により、システム動作中に装置の異常を検出した場合、誤動作を防止するためにシステムを緊急停止するシステムダウンモードと、異常が発生した装置（部品）をシステムから切り離して動作を継続する動的縮退モードのいずれを選択すべきかを決定するよう構成されていた。
ここでいう動的縮退モードでは、切り離される装置を制御するドライバ等の装置制御部が、装置を切り離された場合の動作をサポートしており、かつ、その装置を切り離してもシステムの運用を継続できるようになっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−１７５４８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
例えば、モータ制御を行うような処理をプロセッサもしくはコントローラ上にソフトウェアで実装する場合、基本的な制御処理となる演算処理内容は、ＰＩＤ（比例・積分・微分）制御方法といった定型的な処理であり、その定型処理が生成もしくは使用する制御量もしくは目的値に対し、補正量を加算もしくは減算する形で実現することが多い。
そのようなコントローラ製品におけるソフトウェア処理内容の更新を行う場合、基本的な制御処理内容の正当性はその時点で既に製品として使用されているソフトウェアで既に検証されている事が多く、また、製品におけるソフトウェアで実現している機能の不具合も、基本的な制御処理内容に対し、ソフトウェアとして追加した差分機能の部分で発生することが多い。
【０００５】
追加実装した差分機能は製品出荷前に検証作業は実施しているが、製品の実使用環境下で発生する想定外の状況により、処理の実行が継続困難な致命的なエラーを発生させることがある。例えば、処理の継続実行が困難な致命的なエラーとしては、
・差分機能により計算された補正量は正の値となるはずなのに負の値となっている
・差分機能により計算された補正量が、ある値の範囲内に入っているはずなのに範囲をオーバーする
等が存在する。
【０００６】
そのようなエラーが発生した場合、適切な制御量が計算出来ないため、コントローラの継続実行が困難となり、コントローラの動作そのものを停止しなければならず、当該コントローラ製品を使用しているユーザの作業を止めてしまうという問題点があった。
また、そのような不具合が発生しないようコントローラ開発時、十分に検証を行おうとしても、検証すべき状態の組合せが多いため、出荷前に全ての不具合を検出および対応することが作業工数として困難であるという問題点があった。
【０００７】
この発明は上記のような課題を解決するためになされたもので、プログラムの実行中にエラーが発生しても、全体の動作を継続することのできるプログラム実行装置を得ることを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係るプログラム実行装置は、分岐命令によるプログラム実行中のエラーを検出するエラー検出部と、エラー検出部でエラーを検出した場合に、分岐命令を無効とする命令実行部とを備えたものである。
なお、ここで、“分岐命令によるプログラム実行中”とは、分岐命令を発行後、分岐先の命令をフェッチ・実行している状態を示している。
【発明の効果】
【０００９】
この発明のプログラム実行装置は、分岐命令によるプログラム実行中にエラーを検出した場合は、その分岐命令を無効としたので、プログラム全体の動作を停止させることなく、プログラム実行を継続することができる。
【図面の簡単な説明】
【００１０】
【図１】この発明の実施の形態１によるプログラム実行装置を示す構成図である。
【図２】この発明の実施の形態１によるプログラム実行装置におけるプログラム実行動作を示す説明図である。
【図３】この発明の実施の形態１によるプログラム実行装置における処理パターンを示す説明図である。
【発明を実施するための形態】
【００１１】
実施の形態１．
図１は、この発明の実施の形態１によるプログラム実行装置を示す構成図である。
図１に示すプログラム実行装置１は、命令実行機能部２、命令フェッチ機能部３、ＮＯＰ命令切替機能部４を備えている。命令実行機能部２は、エラー検出対応コール命令・リターン命令実行機能部（命令実行部）５とエラー検出命令実行機能部（エラー検出部）６を有している。エラー検出対応コール命令・リターン命令実行機能部５は、予め定められたエラー発生無効化分岐命令を実行中、エラー検出命令実行機能部６において分岐命令実行中にエラーを検出すると、実行中の分岐命令を無効化する機能を有するものである。また、エラー検出命令実行機能部６は、エラー発生無効化分岐命令によるプログラム実行中にエラーが発生したか否かを検出する機能部である。
【００１２】
エラー検出対応コール命令・リターン命令実行機能部５は、エラー検出対応リターン処理実行機能部７、エラーフラグ設定機能部８、戻りアドレス設定機能部９、エラー検出対応コール命令無効化機能部１０を備えている。また、エラーフラグ設定機能部８は、ＥＲＲＳＴレジスタ（エラー発生状態保持部）８１とＥＣＡＬＬＦＬＧレジスタ８２を有している。更に、戻りアドレス設定機能部９はＥＲＥＴＡＤＲレジスタ９１を、エラー検出対応コール命令無効化機能部１０はＥＡＤＲレジスタ（アドレス保持部）１０１を有している。
【００１３】
エラー検出命令実行機能部６は、エラー状態識別機能部１１とエラー発生コール命令アドレス識別機能部１２を有し、エラー状態識別機能部１１はＥＲＲＳＩＧレジスタ１１１を有している。また、命令フェッチ機能部３は、プログラムカウンタ３１を有している。
【００１４】
エラー検出対応リターン処理実行機能部７は、通常のリターン処理を行うと共に、エラーが検出された場合（エラーフラグ設定機能部８のＥＣＡＬＬＦＬＧレジスタ８２が１で、かつ、ＥＲＲＳＴレジスタ８１が１であった場合）は戻りアドレス設定機能部９のＥＲＥＴＡＤＲレジスタ９１のアドレスに基づいてリターン処理を行う機能部である。エラーフラグ設定機能部８は、エラー発生無効化分岐命令を実行する場合にＥＣＡＬＬＦＬＧレジスタ８２のフラグを１にセットし、また、エラー検出命令実行機能部６のエラー状態識別機能部１１からエラー検出が通知された場合はＥＲＲＳＴレジスタ８１のフラグを１にセットするよう構成されている。戻りアドレス設定機能部９は、ＥＲＥＴＡＤＲレジスタ９１にリターンアドレス（関数コールから戻る際の復帰先プログラムアドレス）を設定する機能部である。エラー検出対応コール命令無効化機能部１０は、エラー発生コール命令アドレス識別機能部１２から、エラー発生コール命令アドレスが通知された場合は、このアドレスをＥＡＤＲレジスタ１０１に設定すると共に、エラー発生無効化分岐命令実行時に、ＥＲＲＳＴレジスタ８１の値が１であれば、ＥＡＤＲレジスタ１０１上の値と現在のプログラムアドレスを比較し、もし同じであればエラー発生無効化分岐命令を無効とし、分岐処理は行わない旨の通知を行うよう構成されている。
【００１５】
エラー検出命令実行機能部６におけるエラー状態識別機能部１１は、エラー検出命令実行時にエラーを検出する機能を有するもので、エラーを検出した場合は、ＥＲＲＳＩＧレジスタ１１１に１をセットするよう構成されている。尚、エラー検出命令については後述する。エラー発生コール命令アドレス識別機能部１２は、エラー状態識別機能部１１がエラーを検出した場合は戻りアドレス設定機能部９のＥＲＥＴＡＤＲレジスタ９１の値に基づいて、エラー発生時における関数コールを発行したプログラムアドレスを演算し、このアドレスをエラー検出対応コール命令無効化機能部１０に通知するよう構成されている。
【００１６】
また、命令フェッチ機能部３は、プログラムカウンタ３１の値に基づき、命令メモリ１３から命令をフェッチする機能部である。ＮＯＰ命令切替機能部４は、エラー検出対応コール命令無効化機能部１０から、エラー発生無効化分岐命令を無効とする通知があった場合は、その分岐命令を無効化し、ＮＯＰ命令（Ｎｏ  Ｏｐｅｒａｔｉｏｎ命令）とする機能部である。また、命令メモリ１３は、プログラム実行装置１が実行するプログラムを格納するメモリである。
【００１７】
プログラム実行装置１は、通常の、例えば一般的にプロセッサやコントローラと称されるプログラム実行装置における、命令フェッチ機能、命令デコード機能、命令実行機能は備わっているとする。尚、図１において、命令デコード機能部は記載していないが、命令デコード結果により、命令実行機能部２で命令実行がなされているとする。命令フェッチ機能部３は、プログラムカウンタ３１に基づき、命令メモリ１３から命令をフェッチしているとする。
【００１８】
通常の、例えば一般的にプロセッサやコントローラと称されるプログラム実行装置における構成に対し、本実施の形態におけるプログラム実行装置１に、どのような機能が備わっているかを説明するために、本発明におけるプログラム実行装置１が保有する命令および、その動作について以下説明する。
本実施の形態におけるプログラム実行装置１は、通常のプログラム実行装置が保有する算術演算命令、論理演算命令、データのロードストア命令、および分岐命令は保有している。通常の分岐命令としては、関数コールを実現するためのＣＡＬＬ命令（コール命令）や、関数コール後、関数コール元に復帰するためのＲＥＴ命令（リターン命令）が存在している。
このような通常の分岐命令に対し、本発明の特徴となるエラー発生による関数コール無効化機能に対応したＣＡＬＬ命令（エラー発生無効化分岐命令：以下、説明のため本命令をＥＣＡＬＬ命令と呼称する）およびこの特殊なＣＡＬＬ命令に対応したＲＥＴ命令（以下、説明のため本命令をＥＲＥＴ命令と呼称する）が定義され、プログラム実行装置１上で、エラー検出対応コール命令・リターン命令実行機能部５に、その実行機能が備わっているとする。
【００１９】
ＥＣＡＬＬ命令は、関数コール先アドレス（関数コールにより変更されるプログラム実行アドレス）を引数（オペランド）として取り、エラー検出対応コール命令・リターン命令実行機能部５により実行される。即ち、戻りアドレス設定機能部９により、ＥＣＡＬＬ命令実行時、リターンアドレス（関数コールから戻る際の復帰先プログラムアドレス）を、本プログラム実行装置１が保有する専用レジスタ（ＥＲＥＴＡＤＲレジスタ９１）に保持すると共に、エラーフラグ設定機能部８により、ＥＣＡＬＬ命令による関数コールが実行中であることを示すフラグレジスタであるＥＣＡＬＬＦＬＧレジスタ８２を値１にセットする。
【００２０】
ＥＲＥＴ命令は、エラー検出対応コール命令・リターン命令実行機能部５により実行される。即ち、その命令実行時、エラーフラグ設定機能部８がＥＣＡＬＬＦＬＧレジスタ８２の値をチェックし、値が１であれば値０に設定すると共に、エラー検出対応リターン処理実行機能部７により、先述のＥＲＥＴＡＤＲレジスタ９１に保持されたプログラムアドレスに復帰し、継続実行する。
【００２１】
尚、ＥＣＡＬＬ命令は、実行される毎に、どのプログラムアドレスで実行されたかの情報をプロセッサ内部に保持している。ＥＲＥＴＡＤＲレジスタ９１に保持された復帰先プログラムアドレスからの単純な減算によりＥＣＡＬＬ命令の発行アドレスは通常識別可能であるため、その呼び出し元となるプログラムアドレスはＥＲＥＴＡＤＲレジスタ９１から導出可能であり、本実施の形態では、エラー発生コール命令アドレス識別機能部１２が導出する。
具体的には、コール命令発行後の遅延スロットが０ならばＥＲＥＴＡＤＲレジスタ９１に保持されたアドレスの１つ前、遅延スロットが１ならばＥＲＥＴＡＤＲレジスタ９１に保持されたアドレスの２つ前のアドレスが、関数コールを発行したプログラムアドレスである。尚、ここで遅延スロットとは一般的な用語であり、直前の命令が効力を発揮する前に実行される命令の位置を指すものである。
【００２２】
また、プロセッサ内部のＥＣＡＬＬ命令発行機能（エラー検出対応コール命令・リターン命令実行機能部５）に関連する専用レジスタが二つ存在する。一つはエラーフラグ設定機能部８に存在するＥＲＲＳＴレジスタ８１であり、もう一つは、エラー検出対応コール命令無効化機能部１０に存在するＥＡＤＲレジスタ１０１である。
ＥＲＲＳＴレジスタ８１は、後述するエラー検出命令の実行によりエラーが検出された時、その情報を保持しているレジスタであり、エラーフラグ設定機能部８により、エラー発生時およびそれ以降は値１を、エラーが発生していない時には値０を保持する。
また、ＥＡＤＲレジスタ１０１はエラー発生時における関数コールを発行したプログラムアドレスを保持しているレジスタであり、エラー発生コール命令アドレス識別機能部１２によって通知されたアドレスが保持される。
【００２３】
ＥＣＡＬＬ命令発行機能は、命令発行時にＥＲＲＳＴレジスタ８１をチェックし、もし値が０であればＥＣＡＬＬ命令をそのまま発行し、もし値が１であれば、エラー検出対応コール命令無効化機能部１０により、ＥＡＤＲレジスタ１０１上の値と現在のプログラムアドレスを比較し、もし同じであればＥＣＡＬＬ命令を無効とし、分岐処理は行わない。この場合は、ＮＯＰ命令切替機能部４により、ＥＣＡＬＬ命令を、いわゆるＮＯＰ命令として扱う。
【００２４】
また、先述の通り、本プログラム実行装置１では、演算結果のエラーチェックを行うためのエラー検出命令を装備する。エラー検出命令とは、演算結果が保持されている汎用レジスタ上の値に対して範囲チェックを行う命令であり、例えば、レジスタ上の値が、指定した値以上もしくは値以下か否か、または値の符号が正か負か、または値の絶対値が指定した範囲内であるか否かといった範囲チェックの命令である。具体的には、
「その値の絶対値がある正値よりも小さいかをテストする命令（以下、ＥＲＡＮＧＥ命令と呼称する）」
「正値であるかをテストする命令（以下、ＥＰＯＳ命令と呼称する）」
「負値であるかをテストする命令（以下、ＥＮＥＧ命令と呼称する）」
等である。また、これら命令はエラー検出命令実行機能部６により実行される。
【００２５】
ＥＲＡＮＧＥ命令では、演算結果が保持されている図示しない汎用レジスタを指し示す番号と、その汎用レジスタ上の演算結果と比較する値が保持されている汎用レジスタ番号もしくはデータメモリ上のアドレスをオペランドとして指定する。ＥＰＯＳ命令、ＥＮＥＧ命令は、演算結果が保持されている汎用レジスタ番号をオペランドとして指定する。
【００２６】
これらのエラー検出命令の発行機能（エラー検出命令実行機能部６）は、エラー状態識別機能部１１により、命令毎に規定した値のチェックを行い、エラーと判断された場合には、プロセッサ内部のエラー発生信号を示すＥＲＲＳＩＧレジスタ１１１の値を１とする。エラーと判断されない場合には本レジスタは値０のままである。
ＥＲＲＳＩＧレジスタ１１１の値が１となった場合に、エラーフラグ設定機能部８は、ＥＣＡＬＬＦＬＧレジスタ８２の値が１であれば、ＥＲＲＳＴレジスタ８１を値１にセットする。また、エラー発生コール命令アドレス識別機能部１２は、関数コールを発行したプログラムアドレスを、ＥＲＥＴＡＤＲレジスタ９１にセットされた値から求めてエラー検出対応コール命令無効化機能部１０に通知する。エラー検出対応コール命令無効化機能部１０は、エラー発生コール命令アドレス識別機能部１２から通知されたアドレスをＥＡＤＲレジスタ１０１に保持すると共に、ＥＣＡＬＬ命令が無効であることを示す情報を命令フェッチ機能部３と戻りアドレス設定機能部９に通知する。これにより、エラー検出対応リターン処理実行機能部７は、ＥＲＥＴＡＤＲレジスタ９１にセットされたリターンアドレスに即座に復帰する。
【００２７】
以下、プログラムコードを元に、どのような動作となるかを説明する。具体例として、基盤として考えるプログラムコードをＢＡＳＥとする（図２参照）。
そのプログラムＢＡＳＥが導出する指令値に対し、追加プログラムにより差分量を計算し、それを加算する事により、新たな指令値が導出されるという処理を考える。具体的には、指令値が汎用レジスタＲ１に保持されており、補正量が汎用レジスタＲ２に保持されるとし、常に指令値Ｒ１に対する補正量Ｒ２の加算：
Ｒ１＋Ｒ２→Ｒ１
により指令値Ｒ１が更新されるとする。
【００２８】
プログラム処理記述上の差分コードとして補正処理プログラムＡを追加機能として関数で実装するとし、そのプログラムアドレスを判りやすさのため同じくＡとする。
ＥＣＡＬＬ命令は遅延スロットを一般的なＲＩＳＣプロセッサと同様に一つ持つとする。この場合のプログラム記述は図２のようになる。
ＥＣＡＬＬ命令は発行時に、プロセッサ内部のＥＲＥＴＡＤＲレジスタ９１に戻りアドレスを保持しているとする（図２中のＡＤＤ  Ｒ１，Ｒ２→Ｒ１を指すアドレス）。また、戻りアドレスからＥＣＡＬＬ命令を発行した命令アドレスも識別可能であるとする（遅延スロットが１で、ＡＤＤ  Ｒ１，Ｒ２→Ｒ１を指すアドレスから２を引いたものがＥＣＡＬＬ命令を発行したアドレス）。このアドレス識別はエラー発生コール命令アドレス識別機能部１２によって行われる。
【００２９】
補正処理Ａでは、処理全体が終わる時点までに汎用レジスタＲ３に補正量を計算しておく。また、補正量が満足すべき値の範囲を、図には記載していないデータメモリ上のアドレスａｄｄｒで指定されるデータメモリ上に保持しておくとする。
エラー状態識別機能部１１におけるＥＲＡＮＧＥ命令は、アドレスａｄｄｒからその値をロードし、汎用レジスタＲ３の値を比較し、もし、Ｒ３の絶対値がアドレスａｄｄｒからロードした値よりも小さい場合には、エラー無しと判断し、エラー検出対応リターン処理実行機能部７は、通常のＥＲＥＴ命令による復帰を行う。
これにより、補正量Ｒ２の値の遷移は、
ＭＯＶ  ０→Ｒ２
ＭＯＶ  Ｒ３→Ｒ２            （Ｒ３：補正量）
ＡＤＤ  Ｒ１，Ｒ２→Ｒ１      （Ｒ１：制御量）
となり制御量Ｒ１に補正量Ｒ３が加算される。
【００３０】
一方、ＥＲＡＮＧＥ命令でエラーだと判断した場合（値が範囲外である事を示す）、エラー検出対応リターン処理実行機能部７によって即座に戻りアドレスに復帰すると共に、ＥＣＡＬＬ  Ａ命令を発行したアドレスは無効だという事をプロセッサ内部のＥＲＲＳＴレジスタ８１とＥＡＤＲレジスタ１０１に保持する。
これにより、本処理以降、エラー検出対応コール命令無効化機能部１０は、該当するＥＣＡＬＬ  Ａ命令を発行する命令は、無効なＥＣＡＬＬ命令だと識別し、ＥＣＡＬＬ命令を無視する（ＮＯＰ命令切替機能部４がＮＯＰ命令とする）。
これにより、補正量のレジスタ遷移は
ＭＯＶ  ０→Ｒ２
ＡＤＤ  Ｒ１，Ｒ２→Ｒ１      （Ｒ１：制御量）
となり、制御量Ｒ１は追加機能による補正量が加算されない状態の結果として導出される。
【００３１】
上記で説明した処理の動きをまとめると図３のようになる。通常は「処理パターン（１）」でプログラム実行が行われる。エラー検出対応コール命令・リターン命令実行機能部５によるＥＣＡＬＬ  Ａ命令の実行により処理Ａに分岐し、処理本体を実行した後、エラー検出命令によりエラー検出命令実行機能部６にてエラー検出が行われる。エラーが検出されなければ、エラー検出対応コール命令・リターン命令実行機能部５は、そのままＥＲＥＴ命令を実行し、元の処理部にリターンし、処理を継続する。
【００３２】
同様に処理を繰り返している際、「処理パターン（２）」のように、処理Ａの処理本体を実行後、エラー検出命令によりエラー検出を行った際、エラーが検出された場合、エラー検出対応コール命令・リターン命令実行機能部５は、その後の命令実行をやめ（ＥＲＥＴ命令は実行しない）、即時に元の処理部にリターンし、命令実行を継続するが、エラーが発生したという情報を保持しているため、次回の処理からは「処理パターン（３）」で実行されることとなる。
「処理パターン（３）」では、ＥＣＡＬＬ命令はＮＯＰ命令扱いとなるため、処理Ａへのコール処理は行われず、常にＥＣＡＬＬ命令を無視した形での処理の実行が行われる。
【００３３】
このようにプログラム実行装置１は実現されているため、差分として作成し、関数コールとして実行されるプログラムコード部位に処理の継続が困難なエラーが発生した場合に、そのコード部位を次回以降実行せずに処理本体の実行を継続することができ、プログラムの実行を停止せずにプログラム処理の継続が可能となる。
また、本機能はプログラム実行装置１上が保有する機能として実現しているため、その上で動作させるプログラムコードにおいては、わずかな命令の追加のみで機能実現が可能である。
更に、本実施の形態で記載したエラー検出による関数コール無効化機能は、プログラムコードで実現した機能ではなく、プログラム実行装置１上に実現した機能であるため、エラーが発生した場合にも、プログラムコードの実行時間を大きく延ばす事なく処理の実行が可能であり、ソフトウェア処理のリアルタイム性を確保する事が可能である。また、不具合検出用プログラムコードを検出する数だけ設定する必要もなく、従って、このプログラムを格納しておくメモリの使用量も少なくて済み、製品コストを抑えることができる。
【００３４】
尚、上記実施の形態では、通常の分岐命令以外にＥＣＡＬＬ命令が与えられた場合に、エラー検出命令実行機能部６がエラー検出命令によってエラー検出を行うようにしたが、通常の分岐命令が与えられた場合でも、この分岐命令に対してエラー検出を行うようにしてもよい。
【００３５】
また、プログラムコードの実行時間はある程度必要となるが、プログラム実行装置１におけるエラー検出対応コール命令・リターン命令実行機能部５やエラー検出命令実行機能部６の機能をソフトウェアで構成してもよい。
【００３６】
以上のように、実施の形態１のプログラム実行装置によれば、分岐命令によるプログラム実行中のエラーを検出するエラー検出部と、エラー検出部でエラーを検出した場合に、以後の命令実行で分岐命令を無効とする命令実行部とを備えたので、プログラム全体の動作を停止させることなく、プログラム実行を継続することができる。
【００３７】
また、実施の形態１のプログラム実行装置によれば、エラー検出部は、分岐命令によるプログラム実行で得た値が、指定した値以上もしくは値以下か否か、または値の符号が正か負か、または値の絶対値が指定した範囲内であるか否かに基づいてエラーを検出するようにしたので、どのような状況ならばエラーとするかをプログラム作成者が任意に設定可能となり、きめ細かな判定処理を行うことができる。
【００３８】
また、実施の形態１のプログラム実行装置によれば、エラー検出部でエラーが検出された場合、エラー発生を示すエラー発生フラグがオン状態となるエラー発生状態保持部と、エラーが発生した分岐命令が置かれているプログラムメモリ上のアドレスを保持するアドレス保持部とを備え、エラー発生状態保持部でエラー発生フラグがオンであり、かつ、アドレス保持部で保持されているアドレスの分岐命令を実行する場合は、その分岐命令を無効命令に置き換えるようにしたので、プログラム実行装置上で実行するプログラムコードに対する修正を行わずに、関数コールされる処理の切り離しが可能となり、プログラムの保守性を高めることができる。
【００３９】
また、実施の形態１のプログラム実行装置によれば、エラー検出部は、通常の分岐命令とは異なるエラー発生無効化分岐命令が与えられた場合に、エラー発生無効化分岐命令により実行されるプログラムのエラーを検出するようにしたので、エラー検出対象とする関数と、エラー検出の対象としない通常関数とを、プログラム実装は同じのまま切り替える事が容易にでき、プログラムの保守性を高めることができる。
【符号の説明】
【００４０】
１  プログラム実行装置、２  命令実行機能部、３  命令フェッチ機能部、４  ＮＯＰ命令切替機能部、５  エラー検出対応コール命令・リターン命令実行機能部、６  エラー検出命令実行機能部、７  エラー検出対応リターン処理実行機能部、８  エラーフラグ設定機能部、９  戻りアドレス設定機能部、１０  エラー検出対応コール命令無効化機能部、１１  エラー状態識別機能部、１２  エラー発生コール命令アドレス識別機能部、１３  命令メモリ、３１  プログラムカウンタ、８１  ＥＲＲＳＴレジスタ、８２  ＥＣＡＬＬＦＬＧレジスタ、９１  ＥＲＥＴＡＤＲレジスタ、１０１  ＥＡＤＲレジスタ、１１１  ＥＲＲＳＩＧレジスタ。
【図１】
2010198183.tif 000003
【図２】
2010198183.tif 000004
【図３】
2010198183.tif 000005