(57)【要約】【課題】  ソフトウェア割り込みベクタが不足した場合に、プログラムを複雑化すると、割り込みハンドラの処理時間が増加して組み込みシステムの性能低下を招くことがあった。【解決手段】  ソフトウェア割り込み制御システムは、割り込みベクタテーブルの未使用領域を、ソフトウェア割り込みのメモリ領域として利用する手段を備えた。ＯＳ割り込み処理部２０は、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかを判別するソフトウェア割り込み判別処理部２３と、通常ソフトウェア割り込みを処理する割り込みハンドラ割り込みコール処理部２４と、追加ソフトウェア割り込みを処理する割り込みハンドラ関数コール処理部２５とを含む。【選択図】  図１
2007048030.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア割り込みを制御するソフトウェア割り込み制御システムにおいて、
割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルを備え、
前記割り込みベクタテーブルの未使用領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータが格納される
ことを特徴とするソフトウェア割り込み制御システム。
【請求項２】
ソフトウェア割り込みを制御するソフトウェア割り込み制御システムにおいて、
割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルを備え、
前記割り込みベクタテーブルに新たに追加する領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータが格納される
ことを特徴とするソフトウェア割り込み制御システム。
【請求項３】
割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得する割り込みベクタ番号取得処理部と、
前記割り込みベクタ番号に対応する割り込みハンドラのアドレスを取得する割り込みハンドラアドレス取得処理部と、
前記割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかを判別するソフトウェア割り込み判別処理部と、
前記通常ソフトウェア割り込みに応じて、割り込みハンドラを起動するハンドラ割り込みコール処理部と、
前記追加ソフトウェア割り込みに応じて、割り込み処理終了時のリターンアドレスをスタックに格納する処理を実行した後に割り込みハンドラを起動する割り込みハンドラ関数コール処理部とを含むＯＳ割り込み制御手段を備えた
請求項１又は請求項２記載のソフトウェア割り込み制御システム。
【請求項４】
割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得する割り込みベクタ番号取得処理部と、
前記割り込みベクタ番号に対応する割り込みハンドラのアドレスを取得する割り込みハンドラアドレス取得処理部と、
前記割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかを判別するソフトウェア割り込み判別処理部と、
前記通常ソフトウェア割り込みに応じて、割り込みハンドラを起動する割り込みハンドラ割り込みコール処理部と、
前記追加ソフトウェア割り込みに応じて、レジスタ値と割り込み処理終了時のリターンアドレスとをスタックに格納する処理を実行した後に割り込みハンドラに移行する割り込みハンドラジャンプ処理部とを含むＯＳ割り込み制御手段を備えた
請求項１又は請求項２記載のソフトウェア割り込み制御システム。
【請求項５】
ソフトウェア割り込みを制御するソフトウェア割り込み制御方法において、
割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルの未使用領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータを格納する
ことを特徴とするソフトウェア割り込み制御方法。
【請求項６】
ソフトウェア割り込みを制御するソフトウェア割り込み制御方法において、
割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルに新たに追加する領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータを格納する
ことを特徴とするソフトウェア割り込み制御方法。
【請求項７】
上位アプリケーションからソフトウェア割り込みの要求が発生すると、割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得し、
前記割り込みベクタ番号に対応する割り込みハンドラアドレスを取得し、
前記割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかであるかの割り込み種類を判別し、
前記割り込み種類の判別結果が通常ソフトウェア割り込みの場合に、割り込みハンドラを起動する割り込みハンドラ割り込みコール処理を実行し、
前記割り込み種類の判別結果が追加ソフトウェア割り込みの場合に、割り込み処理終了時のリターンアドレスをスタックに格納する処理を実行した後に割り込みハンドラを起動する割り込みハンドラ関数コール処理を実行する
請求項５又は請求項６記載のソフトウェア割り込み制御方法。
【請求項８】
上位アプリケーションからソフトウェア割り込みの要求が発生すると、前記割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得し、
前記割り込みベクタ番号に対応する割り込みハンドラアドレスを取得し、
前記割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかであるかの割り込み種類を判別し、
前記割り込み種類の判別結果が通常ソフトウェア割り込みの場合に、割り込みハンドラを起動する割り込みハンドラ割り込みコール処理を実行し、
前記割り込み種類の判別結果が追加ソフトウェア割り込みの場合に、レジスタ値と割り込み処理終了時のリターンアドレスとをスタックに格納する処理を実行した後に割り込みハンドラに移行する割り込みハンドラジャンプ処理を実行する
請求項５又は請求項６記載のソフトウェア割り込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア割り込み制御システムとその制御方法、特に割り込みベクタテーブルをソフトウェア割り込みのために有効に利用するためのソフトウェア割り込み制御システムとその制御方法に関する。
【背景技術】
【０００２】
デジタルカメラ、携帯電話機等の装置には、何らかの組み込みシステムが搭載されている。これら装置には、パーソナルコンピュータ等の汎用のコンピュータとは異なり、安価なＣＰＵと少ない容量のメモリとが備えられていることが多い。このため、組み込みシステム向けのＣＰＵでは、ソフトウェア割り込みで使用可能な割り込みベクタ数が十分でない場合がある。
【０００３】
また、ＣＰＵを含むマイクロコンピュータ等の組み込みシステムには、一般に、ソフトウェア割り込みで使用可能な割り込みベクタとは別に、ハードウェア割り込み等で使用される割り込みベクタテーブルが用意されている。ソフトウェア割り込みで用いるベクタ数や、割り込みベクタテーブル全体のサイズは、使用するＣＰＵの仕様で決まる。一方で、割り込みベクタテーブル中に、未使用領域が含まれる場合もある。図７は、従来の割り込みベクタテーブルのベクタ領域の例を示す説明図である。図７に示す例では、割り込みベクタテーブル中には、「未使用」の部分がある。
【０００４】
割り込みベクタテーブルの未使用領域が無駄な空間となっていることの対策として、割り込みベクタ領域開放回路を備えて、無駄空間を無くした効率よい割り込みベクタテーブルを作成し使用するマイクロコンピュータがある（例えば、特許文献１参照。）。割り込みベクタテーブル領域開放回路は、可変の割り込みベクタテーブルの先頭アドレスを設定するレジスタ、アドレスオフセット値格納レジスタ、個々のアドレスオフセット値格納レジスタにより構成される。
【０００５】
【特許文献１】特開２０００−２６７８６４号公報（段落００１２−００１５、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ソフトウェア割り込みで使用可能な割り込みベクタ数が少ない場合に、規模が大きい組み込みシステムを設計しようとすると、ソフトウェア割り込みの割り込みベクタ数の不足が隘路となり組み込みシステムの設計が難しい。例えば、一つの割り込みベクタを多数の割り込み処理で共用せざるを得ない。その場合、割り込みハンドラの構造が複雑化してしまうことになる。これに伴い、割り込みハンドラの処理時間が増加して組み込みシステムの性能低下を招く。さらに、特許文献１に記載された構成では、割り込みベクタテーブルを再作成するための特別の各種レジスタを準備しなければならず、ＣＰＵの構成が複雑化してしまう。
【０００７】
本発明は、上記の問題を解決するための発明であって、ソフトウェア割り込みの割り込みベクタ数の不足を解消するためのソフトウェア割り込み制御システムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明によるソフトウェア割り込み制御システムは、ソフトウェア割り込みを制御するソフトウェア割り込み制御システムにおいて、割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブル（例えば、割り込みベクタテーブル１０で実現される）を備え、割り込みベクタテーブルの未使用領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータが格納されることを特徴とする。
【０００９】
本発明によるソフトウェア割り込み制御システムは、ソフトウェア割り込みを制御するソフトウェア割り込み制御システムにおいて、割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルを備え、割り込みベクタテーブルに新たに追加する領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータが格納されることを特徴とする。
【００１０】
割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得する割り込みベクタ番号取得処理部と、割り込みベクタ番号に対応する割り込みハンドラのアドレスを取得する割り込みハンドラアドレス取得処理部と、割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込み（例えば、擬似ソフトウェア割り込み１または擬似ソフトウェア割り込み２で実現される）かを判別するソフトウェア割り込み判別処理部と、通常ソフトウェア割り込みに応じて、割り込みハンドラを起動するハンドラ割り込みコール処理部と、追加ソフトウェア割り込みに応じて、割り込み処理終了時のリターンアドレスをスタックに格納する処理を実行した後に割り込みハンドラを起動する割り込みハンドラ関数コール処理部とを含むＯＳ割り込み制御手段（例えば、ＯＳ割り込み処理部２０によって実現される）を備えることが好ましい。
【００１１】
割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得する割り込みベクタ番号取得処理部と、割り込みベクタ番号に対応する割り込みハンドラのアドレスを取得する割り込みハンドラアドレス取得処理部と、割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかを判別するソフトウェア割り込み判別処理部と、通常ソフトウェア割り込みに応じて、割り込みハンドラを起動する割り込みハンドラ割り込みコール処理部と、追加ソフトウェア割り込みに応じて、レジスタ値と割り込み処理終了時のリターンアドレスとをスタックに格納する処理を実行した後に割り込みハンドラに移行する割り込みハンドラジャンプ処理部とを含むＯＳ割り込み制御手段を備えることが好ましい。
【００１２】
本発明のソフトウェア割り込み制御方法は、ソフトウェア割り込みを制御するソフトウェア割り込み制御方法において、割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルの未使用領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータを格納することを特徴とする。
【００１３】
本発明のソフトウェア割り込み制御方法は、ソフトウェア割り込みを制御するソフトウェア割り込み制御方法において、割り込みハンドラ実行開始アドレスを格納する割り込みベクタテーブルに新たに追加する領域に、ソフトウェア割り込み実行開始アドレスを特定可能なデータを格納することを特徴とする。
【００１４】
上位アプリケーションからソフトウェア割り込みの要求が発生すると、割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得し、割り込みベクタ番号に対応する割り込みハンドラアドレスを取得し、割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかであるかの割り込み種類を判別し、割り込み種類の判別結果が通常ソフトウェア割り込みの場合に、割り込みハンドラを起動する割り込みハンドラ割り込みコール処理を実行し、割り込み種類の判別結果が追加ソフトウェア割り込みの場合に、割り込み処理終了時のリターンアドレスをスタックに格納する処理を実行した後に割り込みハンドラを起動する割り込みハンドラ関数コール処理を実行することが好ましい。
【００１５】
上位アプリケーションからソフトウェア割り込みの要求が発生すると、割り込みベクタテーブルにおける領域を示す割り込みベクタ番号を取得し、割り込みベクタ番号に対応する割り込みハンドラアドレスを取得し、割り込みベクタ番号から、通常ソフトウェア割り込みか、追加ソフトウェア割り込みかであるかの割り込み種類を判別し、割り込み種類の判別結果が通常ソフトウェア割り込みの場合に、割り込みハンドラを起動する割り込みハンドラ割り込みコール処理を実行し、割り込み種類の判別結果が追加ソフトウェア割り込みの場合に、レジスタ値と割り込み処理終了時のリターンアドレスとをスタックに格納する処理を実行した後に割り込みハンドラに移行する割り込みハンドラジャンプ処理を実行することが好ましい。
【発明の効果】
【００１６】
本発明によれば、割り込みベクタテーブルの未使用領域または新たに追加した領域を、ソフトウェア割り込みに関する割り込みハンドラのアドレス領域として利用できるため、割り込みベクタテーブルを有効活用することができる。
【００１７】
従来はひとつの割り込みハンドラを、多数の割り込みで共用し、その割り込みハンドラ内で処理を分岐させたり、割り込みハンドラのインタフェースを修正しなければならず、割り込みハンドラが複雑かつ膨大になっていた。しかしながら、本発明によれば、従来ひとつの割り込みハンドラで処理していた割り込み処理を、別々に、割り込みベクタテーブルに設定できる。
【００１８】
本発明のソフトウェア割り込み制御システムにより、ソフトウェアおよびシステムの運用性と保守とを向上させることができ、割り込みハンドラの処理時間増大を防止することができる。
【発明を実施するための最良の形態】
【００１９】
実施の形態１．
以下、本発明の実施の形態を、図面を参照して説明する。
図１は第１の実施形態によるソフトウェア割り込み制御システムの構成を示すブロック図である。ソフトウェア割り込み制御システムは、割り込みハンドラのアドレスを格納するための割り込みベクタテーブル１０と、割り込み処理プログラムである割り込みハンドラ３０と、割り込みベクタテーブル１０を参照して割り込みハンドラを呼び出すＯＳ割り込み処理部２０と、割り込み発生時のＣＰＵ状態を保持するためのＣＰＵスタック４０とを有している。割り込みベクタテーブルは、本来はハードウェア割り込み等で使用されるテーブルである。なお、この実施の形態では、ソフトウェア割り込みで使用可能な複数の割り込みベクタも割り込みベクタテーブルに存在する。また、この実施の形態では、全ての割り込みベクタが使用済みであってさらにソフトウェア割り込みに係る割り込みベクタが必要になった場合には、割り込みベクタテーブルにおける未使用領域を、擬似的に、新たな割り込みベクタとして活用する。
【００２０】
ソフトウェア割り込みで使用可能な割り込みベクタおよび割り込みベクタテーブル１０は、例えば、組み込みシステムのメモリに記憶される。割り込みハンドラ３０は、メモリに記憶されているプログラムである。ＯＳ割り込み処理部２０は、メモリに格納されているプログラムである。ＣＰＵスタック４０は、一時的にデータが格納されるメモリ領域である。
【００２１】
割り込みベクタテーブル１０には、割り込みハンドラのアドレスが格納されている。従来、未使用のベクタ領域は使用されていなかったが、この実施の形態では、全ての割り込みベクタが使用済みであってさらにソフトウェア割り込みに係る割り込みベクタが必要になった場合には、そのベクタ領域に擬似ソフトウェア割り込み１に対応する割り込みハンドラのアドレス、擬似ソフトウェア割り込み２に対応する割り込みハンドラのアドレス等を格納する。「擬似ソフトウェア割り込み」とは、何らかの処理を行なわせる「擬似ソフトウェア」の割り込みではなく、従来の「ソフトウェア割り込み」を拡張したようにみせるための仕組みをいう。
【００２２】
割り込みハンドラ３０は、割り込みハンドラ実行開始アドレス３０１と割り込みハンドラ実行部３０２とを含む。割り込みハンドラ実行部３０２は、ＣＰＵステータスレジスタ値退避処理部３０３と、割り込み処理部３０４と、割り込みリターン部３０５とを備えている。
【００２３】
図１に示す例では、割り込みベクタテーブル１０における任意の未使用領域または新規追加領域には、擬似ソフトウェア割り込み１および擬似ソフトウェア割り込み２が設定されている。例えば、擬似ソフトウェア割り込み１の領域には、割り込みハンドラ３０における割り込みハンドラ実行開始アドレス３０１が格納される。割り込みベクタテーブル１０に新たに追加した領域を使用することは、割り込みベクタテーブルの領域拡張をすることになるが、ＣＰＵによっては、割り込みベクタテーブルの領域拡張を許さない場合がある。本実施形態では、ＯＳのサービスコールを介することで、ＣＰＵからは拡張を意識せずに、任意のメモリ領域をベクタテーブルとして追加することができる。
【００２４】
ＯＳ割り込み処理部２０は、ソフトウェア割り込みを管理するプログラムであり、上位アプリケーションプログラム等が割り込みを使用するときに必ず呼び出す関数である。すなわち、上位アプリケーションプログラム等は、直接割り込み発生命令を実行しない。ＯＳ割り込み処理部２０は、割り込みベクタ番号取得処理部２１と、割り込みハンドラアドレス取得処理部（ベクタハンドラアドレス取得処理部）２２と、擬似ソフトウェア割り込み判定処理部２３と、割り込みハンドラ割り込みコール処理部（ベクタハンドラ割り込みコール処理部）２４と、割り込みハンドラ関数コール処理部（ベクタハンドラ関数コール処理部）２５とを有している。
【００２５】
割り込みベクタ番号取得処理部２１は、割り込みベクタテーブル１０における何番目の割り込みハンドラのアドレスをコールするかを示す情報を取得する機能を有する。割り込みベクタ番号は、通常ＯＳ割り込み処理部２０をコールする際に引数として与えられる。割り込みハンドラアドレス処理部２２は、指定された割り込みベクタ番号に対応する割り込みハンドラのアドレスを、割り込みベクタテーブル１０から取得する。擬似ソフトウェア割り込み判別処理部２３は、指定された割り込みベクタ番号から、擬似ソフトウェア割り込み（追加ソフトウェア割り込み、ソフトウェア割り込みベクタではなく割り込みハンドラ関数コールを用いる割り込み）か、通常ソフトウェア割り込み（ソフトウェア割り込みベクタを用いる割り込み）かを判別する。擬似ソフトウェア割り込みの場合、割り込みハンドラ関数コール処理部２５を呼び出す。通常ソフトウェアの割り込みの場合、割り込みハンドラ割り込みコール処理部２４を呼び出す。割り込みハンドラ割り込みコール処理部２４は、従来の割り込みコール処理で、ソフトウェア割り込み発生命令を使用して、該当する割り込みハンドラ実行部（図示していない）を呼び出す。割り込みハンドラ関数コール処理部２５は、ソフトウェア割り込み発生命令を用いずに、関数コール命令で割り込みハンドラ実行部３０２を呼び出す。
【００２６】
割り込みハンドラ実行部３０２は、ＣＰＵステータスレジスタ値退避処理部３０３と、割り込み処理部３０４と、割り込みリターン部３０５とを有している。関数コール命令で呼び出される割り込みハンドラ実行部３０２が処理を実行する場合、ＣＰＵスタック４０に退避される内容が、ソフトウェア割り込み発生命令実行時とは異なる。そこで、割り込みハンドラ実行部３０２におけるＣＰＵステータスレジスタ値退避処理部３０３は、ＣＰＵスタック４０の内容の調整を行なう。すなわち、この実施形態の場合、割り込みハンドラ実行部３０２がコールされた時点で、ＣＰＵスタック４０には、リターンアドレス値しか退避されていない。よって、ＣＰＵステータスレジスタ値退避処理部３０３は、ＣＰＵステータレジスタ値をＣＰＵスタック４０に退避する。割り込み処理部３０４は、ソフトウェア割り込みの処理を実行する。割り込みリターン部３０５は、割り込み発生前の状態に復帰する処理を実行する。すなわち、ＣＰＵスタック４０に退避されているＣＰＵステータスレジスタ値とリターンアドレス値を、ＣＰＵのステータスレジスタおよびプログラムカウンタレジスタに復帰させる。
【００２７】
図２は、第１の実施形態のソフトウェア割り込みの発生に基づいて処理を実行する割り込みハンドラ割り込みコール処理部２４の機能を示すブロック図である。図２において、図１と同一機能を有する構成品には、同一の番号が付与されている。
【００２８】
割り込みハンドラ３１は、メモリに記憶されているプログラムであり、割り込みハンドラ実行開始アドレス３１１と割り込みハンドラ実行部３１２を含む。割り込みハンドラ実行部３１２は、割り込み処理部３１４と、割り込みリターン部３１５を備えている。
【００２９】
割り込みベクタテーブル１０は、ソフトウェア割り込み１を備え、割り込みハンドラ３１の割り込みハンドラ実行開始アドレス３１１が格納される。
【００３０】
割り込みハンドラ割り込みコール処理部２４は、従来の割り込みコール処理で、ソフトウェア割り込み発生命令を使用して、割り込みハンドラ実行部３１２を呼び出す。また、割り込みハンドラ割り込みコール処理部２４は、ＣＰＵスタック４０に、リターンアドレス値とＣＰＵステータレジスタ値を退避する。
【００３１】
割り込みハンドラ実行部３１２は、割り込み処理部３１４と、割り込みリターン部３１５とを有している。割り込みハンドラ実行部３１２がコールされた時点で、既に、ＣＰＵスタック４０にリターンアドレス値とＣＰＵステータスレジスタ値とが退避されている。割り込み処理部３１４は、ソフトウェア割り込みの処理を実行する。割り込みリターン部３１５は、割り込み発生前の状態に復帰する処理をする。
【００３２】
図３は、第１の実施形態の上位アプリケーションプログラムとソフトウェア割り込み制御システムにおける他の構成要素との関係を示す説明図である。デジタルカメラ、携帯電話機等の装置の組み込みシステムは、上位アプリケーションプログラム１０６と、ＯＳ１０５と、ＣＰＵ１０４と、メモリ１０１と、メモリ１０２と、メモリ１０３とを有している。メモリ１０１には、割り込みベクタテーブル１０が記憶されている。メモリ１０２には、割り込みハンドラ３０および３１が記憶されている。メモリ１０３には、ＯＳ割り込み処理部１０３が記憶されている。なお、図３に示す例では、複数のメモリが存在するが、ひとつのメモリを使用しても良い。
【００３３】
メモリ１０１に割り当てられている割り込みベクタテーブル１０には、例えばＯＳ１０５によって、あらかじめ、割り込みハンドラ実行開始アドレスが登録される。上位アプリケーションプログラム１０６は、ソフトウェア割り込みを実行させたい場合に、メモリ１０１中のＯＳ割り込み処理部２０を呼び出す。ＯＳ割り込み処理部２０は、メモリ１０１中の割り込みベクタテーブル１０を参照する。割り込みハンドラ３０または割り込みハンドラ３１を実行する前に、ＣＰＵ１０４内のＣＰＵスタック４０にリターンアドレス値とＣＰＵステータスレジスタ値等を退避し、メモリ１０２中の割り込みハンドラ３０または割り込みハンドラ３１を実行する。
【００３４】
図４は、ソフトウェア割り込み呼び出し関数に基づく処理の流れの一例を示す流れ図である。ソフトウェア割り込み呼び出し関数は、上位アプリケーションプログラム（具体的には、上位アプリケーションプログラムに従って処理を実行するＣＰＵ１０４）が、ソフトウェア割り込みを実行させたい場合に呼び出す関数である。上位アプリケーションプログラムにより、ソフトウェア割り込み呼び出し関数が呼び出されると、すなわち、ＯＳのサービスコールであるＯＳ割り込み処理部２０が呼び出されると（ステップＳ１）、ＣＰＵ１０４は、ＯＳ割り込み処理部２０における擬似ソフトウェア割り込み判別処理部２３のプログラムに従って、擬似ソフトウェアの割り込みであるか判定する（ステップＳ２）。判定結果が擬似ソフトウェア割り込みでなければ、ＣＰＵ１０４は、割り込みハンドラ割り込みコール処理部２４のプログラムに従って、ソフトウェア割り込み発生命令を実施する（ステップＳ７）。割り込みハンドラＡ（割り込みハンドラ実行部３１２における割り込み処理部３１４に相当）の実行終了後、割り込みリターン命令を実行する（ステップＳ８）。その結果、割り込み発生前の状態に復帰する処理が実行される（ステップＳ６）。ステップＳ７、ステップＳ８およびステップＳ６は、従来の操作手順を示している。ステップＳ２で、擬似ソフトウェア割り込みであると判定されると、ＣＰＵ１０４は、割り込みハンドラアドレス取得処理部２２のプログラムに従って、割り込みベクタテーブル１０から、ソフトウェア割り込み呼び出し関数で指定された割り込みハンドラアドレスを取得する（ステップＳ３）。ＣＰＵ１０４は、割り込みハンドラ関数コール処理部２５のプログラムに従って、割り込みハンドラの関数コール命令で割り込みハンドラＰＡ（割り込みハンドラ実行部３０２におけるＣＰＵステータスレジスタ値退避処理部３０３および割り込み処理部３０４に相当）を実行する（ステップＳ４）。割り込みハンドラの実行終了後、割り込みリターン命令を実行する（ステップＳ５）。その結果、割り込み発生前の状態に復帰する処理が実行される（ステップＳ６）。
【００３５】
次に、図５を参照してソフトウェア割り込み制御システムの動作をより詳細に説明する。図５は上位アプリケーション等の処理の一例を示す流れ図である。あらかじめ、ＯＳ１０５等を介して、割り込みハンドラを割り込みベクタテーブル１０に登録する。また、ＯＳ１０５等を介して、割り込みハンドラ実行開始アドレス３０１を、割り込みベクタテーブル１０の擬似ソフトウェア割り込みのベクタに登録する（ステップＳ１１）。なお、割り込みハンドラ実行開始アドレス３１１は、割り込みベクタテーブル１０のソフトウェア割り込みのベクタに、既に登録されているとする。
【００３６】
上位アプリケーションプログラムは、ソフトウェア割り込みを実行させたいときに、ＯＳ割り込み処理部２０を呼び出す（ステップＳ１２）。すなわち、割り込みベクタ番号を引数としてＯＳ割り込み処理部２０を呼び出す。ＣＰＵ１０４は、ＯＳ割り込み処理部２０における割り込みベクタ番号取得処理部２１のプログラムに従って、ＯＳの割り込み処理２０の呼び出しで指定された割り込みベクタ番号を取得する。
【００３７】
次いで、ＣＰＵ１０４は、割り込みハンドラアドレス処理部２２のプログラムに従って、割り込みベクタテーブル１０を検索して割り込みベクタ番号に対応する割り込みハンドラ実行開始アドレスを取得する。
【００３８】
次に、ＣＰＵ１０４は、擬似ソフトウェア割り込み判別処理部２３のプログラムに従って、割り込みベクタ番号から、擬似ソフトウェア割り込みか通常のソフトウェア割り込みかを判別する（ステップＳ１３）。なお、ここでは、擬似ソフトウェア割り込みに対応する割り込みベクタ番号と、通常のソフトウェア割り込みに対応する割り込みベクタ番号とは、あらかじめ決められているとする。ＣＰＵ１０４は、擬似ソフトウェア割り込みの場合、割り込みハンドラ関数コール処理部２５を、通常のソフトウェア割り込みの場合、割り込みハンドラ割り込みコール処理部２４を呼び出す（ステップＳ１４）。
【００３９】
割り込みハンドラ割り込みコール処理部２４が呼び出された場合には、ＣＰＵ１０４は、割り込みハンドラ割り込みコール処理部２４のプログラムに従って、割り込みハンドラ実行開始アドレスが指す割り込みハンドラ実行部３１２を呼び出す（ステップＳ１９）。割り込みハンドラ実行部３１２を呼び出すために使用する命令は、ソフトウェア割り込み命令である。ソフトウェア割り込み命令が実行されると、ＣＰＵスタック４０に退避すべき値が自動的に退避される。割り込みハンドラ実行部３１２が呼び出されると、割り込み処理部３１４による割り込み処理が行なわれ（ステップＳ２０）、割り込み処理後、割り込みリターン部３１５による割り込みリターン処理が行なわれる（ステップＳ２１）。
【００４０】
割り込みハンドラ関数コール処理部２５が呼び出された場合には、ＣＰＵ１０４は、割り込みハンドラ関数コール処理部２５のプログラムに従って、割り込みハンドラ実行開始アドレスが指す割り込みハンドラ実行部３０２を呼び出す（ステップＳ１５）。割り込みハンドラ実行部３０２を呼び出すときには関数コール命令が実行されるので、ＣＰＵスタック４０に退避される値は、ソフトウェア割り込み命令が実行される場合とは異なる。図２に示す例では、リターンアドレス値しか退避されない。それに対して、割り込みハンドラ割り込みコール処理部２４が呼び出される場合には、リターンアドレス値とＣＰＵステータスレジスタ値が退避される。よって、割り込みハンドラ実行部３０２には、ＣＰＵステータスレジスタ値退避処理部３０３が含まれる。ＣＰＵ１０４は、割り込みハンドラ実行部３０２のプログラムを実行する際に、まず、ＣＰＵスタック４０の整合をとるために、ＣＰＵステータスレジスタ値退避処理部３０３のプログラムに従って、ＣＰＵステータスレジスタ値の退避処理を実行する（ステップＳ１６）。その後、割り込み処理部３０４のプログラムに従って割り込み処理（ステップＳ１７）を実行し、割り込み処理後、割り込みリターン部３０５のプログラムに従って割り込みリターン処理を実行する（ステップＳ１８）。
【００４１】
以上に説明したように、この実施の形態によれば、割り込みベクタテーブルの未使用領域または新たに追加した領域を、割り込みハンドラのアドレス領域として利用できるため、割り込みベクタテーブルを有効活用することができる。ＯＳ割り込み処理部および割り込みハンドラの実行部の制御方法により、通常のソフトウェア割り込みか、擬似ソフトウェア割り込み（ベクタ領域に追加されたソフトウェア割り込み）かを判別し制御することができる。
【００４２】
実施の形態２．
第１の実施形態では、割り込みハンドラ関数コール処理部２５より、ＣＰＵスタック４０にリターンアドレス値を退避させ、ＣＰＵステータスレジスタ値退避処理部３０２により、ＣＰＵステータスレジスタ値を退避させている。しかし、ＣＰＵによっては、割り込み発生時にＣＰＵスタック４０に退避させる値が、リターンアドレス値とＣＰＵステータスレジスタ値だけではない場合がある。この場合には、割り込みハンドル関数コール処理部２５または、割り込みハンドラ実行部３０２の開始時に、ＣＰＵスタック４０の整合がとれるようにＣＰＵに応じた処理をするのが好ましい。
【００４３】
図６は第２の実施形態によるソフトウェア割り込み制御システムの構成を示すブロック図である。第２の実施形態のソフトウェア割り込み制御システムにおける制御方法は、関数コール命令を用いずに、プログラムによりリターンアドレスをＣＰＵスタックに退避させてからジャンプ命令で割り込みハンドラを実行に移す制御方法である。ジャンプ命令を用いる場合、割り込み命令や関数コール命令を用いる場合とは異なり、ＣＰＵスタック４０にリターンアドレス値が格納されない。そこで、この実施の形態では、プログラムにより、意図的にＣＰＵスタック４０にリターンアドレスを退避させる。
【００４４】
この実施の形態では、ＯＳ割り込み処理部２０は、割り込みベクタ番号取得処理部２１と、割り込みハンドラアドレス取得処理部２２と、擬似ソフトウェア割り込み判定処理部２３と、割り込みハンドラ割り込みコール処理部２４と、割り込みハンドラジャンプ処理部（ベクタハンドラジャンプ処理部）２６を有している。
【００４５】
ＣＰＵ１０４は、擬似ソフトウェア割り込み判別処理部２３のプログラムに従って、指定された割り込みベクタ番号から、擬似ソフトウェア割り込みか、通常のソフトウェア割り込みかを判別する。ＣＰＵ１０４は、擬似ソフトウェア割り込みの場合、割り込みハンドラジャンプ処理部２６を、通常ソフトウェアの割り込みの場合、割り込みハンドラ割り込みコール処理部２４を呼び出す。
【００４６】
割り込みハンドラジャンプ処理部２６は、ＣＰＵスタック４０にリターンアドレス値とＣＰＵステータスレジスタ値を格納してから、割り込みハンドラアドレス取得処理部２２から渡された割り込みハンドラ実行開始アドレスにジャンプするプログラムである。
【００４７】
割り込みハンドラ３２は、割り込みハンドラ実行開始アドレス３２１と割り込みハンドラ実行部３２２とを含み、割り込みハンドラ実行部３２２は、割り込み処理部３２４と割り込みリターン部３２５とを有する。割り込みハンドラの実行前にＣＰＵスタック４０の整合がとれているため、割り込みハンドラ実行部３２２において、ＣＰＵスタックとの調整を行なう必要がない。すなわち、図２に示した割り込みハンドラ割り込みコール処理２４を用いた場合と比較すると、割り込みハンドラ実行部３１２の構造と割り込みハンドラ実行部３２２の構造とは同じである。
【００４８】
第２の実施形態では、割り込みハンドラ３２を作成する際に、擬似ソフトウェア割り込みを意識することがなく、プログラムを作成することができる。このことは、プログラム作成の効率化に寄与する。
【産業上の利用可能性】
【００４９】
本発明によれば、ソフトウェア割り込み制御システムおよびその制御方法において、ソフトウェア割り込み命令で使用可能な割り込みベクタ数が少ない場合においても、割り込みベクタテーブルの領域を有効に利用して擬似的に割り込みベクタ数を増やすことができる。また、本発明は、組み込み向けシステム、マイクロコンピュータ又はパーソナルコンピュータに適用可能である。
【図面の簡単な説明】
【００５０】
【図１】第１の実施形態によるソフトウェア割り込み制御システムの構成を示すブロック図である。
【図２】第１の実施形態の割り込みハンドラ割り込みコール処理部の機能を示すブロック図である。
【図３】第１の実施形態の上位アプリケーションプログラムとソフトウェア割り込み制御システムにおける他の構成要素との関係を示す説明図である。
【図４】ソフトウェア割り込み呼び出し関数に基づく処理の流れの一例を示す流れ図である。
【図５】上位アプリケーションからの処理の一例を示す流れ図である。
【図６】第２の実施形態によるソフトウェア割り込み制御システムの構成を示すブロック図である。
【図７】従来の割り込みベクタテーブルのベクタ領域の例を示す説明図である。
【符号の説明】
【００５１】
１０    割り込みベクタテーブル
２０    ＯＳ割り込み処理部
２１    割り込みベクタ番号取得処理部
２２    割り込みハンドラアドレス取得処理部
２３    擬似ソフトウェア割り込み判別処理部
２４    割り込みハンドラ割り込みコール処理部
２５    割り込みハンドラ関数コール処理部
２６    割り込みハンドラジャンプ処理部
３０，３１，３２    割り込みハンドラ
３０１，３１１，３２１    割り込みハンドラ実行開始アドレス
３０２，３１２，３２２    割り込みハンドラ実行部
３０３    ＣＰＵステータスレジスタ値退避処理部
３０４，３１４，３２４    割り込み処理部
３０５，３１５，３２５    割り込みリターン部
４０    ＣＰＵスタック
【図１】
2007048030.tif 000003
【図２】
2007048030.tif 000004
【図３】
2007048030.tif 000005
【図４】
2007048030.tif 000006
【図５】
2007048030.tif 000007
【図６】
2007048030.tif 000008
【図７】
2007048030.tif 000009