(57)【要約】      （修正有）【課題】イベントの発生を引き起こす処理を行うルーチンが、そのイベントを発生させる処理を行わない場合でも、適切に動作するステートマシンを提供する。【解決手段】現在のステートと発生するイベントとに対応して実行される処理ルーチンの情報を保持するマトリクステーブルに基づいて処理手順を決定する。イベントに応答してマトリックステーブルを参照し、今回実行する処理ルーチンを実行ルーチンとして抽出する処理ルーチン抽出手段と、処理ルーチン抽出手段が抽出した実行ルーチンを実行する処理ルーチン実行手段と、実行ルーチンに基づいて次のステートを決定する次ステート決定手段と、新たなイベントを待機するイベント待機動作を停止させるイベント待機停止手段と、新たなイベント待機動作が停止しているときに、次のステートに対応して新たな処理ルーチンの抽出を処理ルーチン抽出手段に要求するスキップ状況判断手段を具備する。【選択図】        図１１
2006338391.tif 000002
【特許請求の範囲】
【請求項１】
現在のステートと発生するイベントとに対応して実行される処理ルーチンに関する情報を保持するマトリクステーブルと、
前記イベントに応答して前記マトリックステーブルを参照し、前記現在のステートと前記イベントとに基づいて、今回実行する処理ルーチンを実行ルーチンとして抽出する処理ルーチン抽出手段と、
前記処理ルーチン抽出手段が抽出した前記実行ルーチンを実行する処理ルーチン実行手段と、
前記実行ルーチンに基づいて次のステートを決定する次ステート決定手段と、
新たなイベントを待機するイベント待機動作を停止させるイベント待機停止手段と、前記イベント待機停止手段は、前記実行ルーチンの抽出完了に応答して、イベント待機停止状態を示すイベント待機情報を生成し、
前記新たなイベント待機動作が停止しているときに、前記次のステートに対応して新たな処理ルーチンの抽出を前記処理ルーチン抽出手段に要求するスキップ状況判断手段と
を具備し、
前記スキップ状況判断手段は、前記イベント待機情報に基づいて、前記次のステートに対応するイベント待機動作をスキップし、前記新たな処理ルーチンの抽出を前記処理ルーチン抽出手段に要求する
ステートマシン。
【請求項２】
請求項１に記載のステートマシンにおいて、
さらに、イベント待機開始手段を具備し、
前記イベント待機開始手段は、
前記処理ルーチン実行手段が、前記実行ルーチンを実行しているときに、前記実行ルーチンがイベント発生用のトリガを生成するかどうかを監視し、前記トリガが生成されていないときに前記イベント待機情報を、イベント待機開始を示す情報に更新する
ステートマシン。
【請求項３】
請求項２に記載のステートマシンにおいて、
さらに、スキップ時実行ルーチン判断手段を具備し、
前記マトリクステーブルは、複数のイベントを一時期に受けたときに、その処理ルーチンを実行するかをしめすスキップ時実行ルーチン特定フラグを含み、前記スキップ時実行ルーチン特定フラグは前記処理ルーチンに対応して前記マトリクステーブルに保持され、
前記スキップ時実行ルーチン判断手段は、
前記マトリクステーブルを参照し、現在のステートで受け付けられる前記イベントに対応して、スキップ時実行ルーチン特定フラグがＯＮに設定されている処理ルーチンを検索し、その検索結果としての処理ルーチンの情報を実行ルーチンとして、前記処理ルーチン抽出手段に受け渡す
ステートマシン。
【請求項４】
請求項３に記載のステートマシンにおいて、
さらに、イベント解析手段を具備し、
前記イベント解析手段は、
前記イベント解析手段に供給されるイベントを解析し、その解析結果を前記処理ルーチン抽出手段の出力し、
前記処理ルーチン抽出手段は、前記前記イベント解析手段から供給される解析結果と、現在のステートに対応して、前記実行ルーチンを抽出する
ステートマシン。
【請求項５】
現在のステートと発生するイベントとに対応して実行される処理ルーチンの情報を保持するマトリクステーブルに基づいて動作するステートマシンの動作方法であって、
（ａ）前記イベントに応答して前記マトリックステーブルを参照し、前記現在のステートと前記イベントとに基づいて、今回実行する処理ルーチンを実行ルーチンとして抽出するステップと、
（ｂ）前記実行ルーチンを実行するステップと、
（ｃ）前記実行ルーチンに基づいて次のステートを決定するステップと、
（ｄ）新たなイベントの待機動作であるイベント待機を停止するステップと、
（ｅ）前記新たなイベントの待機動作が停止しているときに、前記次のステートに対応するイベント待機動作をスキップして前記新たな処理ルーチンの抽出を要求するステップ
を具備するステートマシンの動作方法。
【請求項６】
請求項５に記載のステートマシンの動作方法において、
前記（ｄ）ステップは、
前記実行ルーチンの抽出完了に応答して、イベント待機停止状態を示すイベント待機情報を生成するステップを含み、
前記（ｅ）ステップは、
前記イベント待機情報に基づいて
前記新たな処理ルーチンの抽出を要求するステップ
を具備するステートマシンの動作方法。
【請求項７】
請求項６に記載のステートマシンの動作方法において、
さらに、
（ｆ）前記実行ルーチンを実行しているときに、前記実行ルーチンがイベント発生用のトリガを生成するかどうかを監視し、前記トリガが生成されていないときに前記イベント待機情報を、イベント待機開始を示す情報に更新するステップ
を具備するステートマシンの動作方法。
【請求項８】
請求項７に記載のステートマシンの動作方法において、
前記マトリクステーブルは、複数のイベントを一時期に受けたときに、その処理ルーチンを実行するかをしめすスキップ時実行ルーチン特定フラグを含み、前記スキップ時実行ルーチン特定フラグは前記処理ルーチンに対応して前記マトリクステーブルに保持され、
前記ステートマシンの動作方法は、さらに、
（ｇ）マトリクステーブルを参照し、現在のステートで受け付けられる前記イベントに対応して、スキップ時実行ルーチン特定フラグがＯＮに設定されている処理ルーチンを検索し、その検索結果としての処理ルーチンの情報を実行ルーチンとして、前記処理ルーチン抽出手段に受け渡すステップ
を具備するステートマシンの動作方法。
【請求項９】
請求項８に記載のステートマシンの動作方法において、
さらに、
（ｈ）供給されるイベントを解析し、その解析結果を出力し、前記解析結果と、現在のステートに対応して、前記実行ルーチンを抽出するステップ
を具備するステートマシンの動作方法。
【請求項１０】
現在のステートと発生するイベントとに対応して実行される処理ルーチンの情報を保持するマトリクステーブルに基づいて動作するステートマシンを動作させるプログラムであって、
（ａ）前記イベントに応答して前記マトリックステーブルを参照し、前記現在のステートと前記イベントとに基づいて、今回実行する処理ルーチンを実行ルーチンとして抽出するステップと、
（ｂ）前記実行ルーチンを実行するステップと、
（ｃ）前記実行ルーチンに基づいて次のステートを決定するステップと、
（ｄ）新たなイベントの待機動作であるイベント待機を停止するステップと、
（ｅ）前記新たなイベントの待機動作が停止しているときに、前記次のステートに対応するイベント待機動作をスキップして前記新たな処理ルーチンの抽出を要求するステップ
を具備する方法をコンピュータにより実行可能なプログラム。
【請求項１１】
請求項１０に記載のプログラムにおいて、
前記（ｄ）ステップは、
前記実行ルーチンの抽出完了に応答して、イベント待機停止状態を示すイベント待機情報を生成するステップを含み、
前記（ｅ）ステップは、
前記イベント待機情報に基づいて
前記新たな処理ルーチンの抽出を要求するステップ
を具備する方法をコンピュータにより実行可能なプログラム。
【請求項１２】
請求項１１に記載のプログラムにおいて、
さらに、
（ｆ）前記実行ルーチンを実行しているときに、前記実行ルーチンがイベント発生用のトリガを生成するかどうかを監視し、前記トリガが生成されていないときに前記イベント待機情報を、イベント待機開始を示す情報に更新するステップ
を具備する方法をコンピュータにより実行可能なプログラム。
【請求項１３】
請求項１２に記載のプログラムにおいて、
前記マトリクステーブルは、複数のイベントを一時期に受けたときに、その処理ルーチンを実行するかをしめすスキップ時実行ルーチン特定フラグを含み、前記スキップ時実行ルーチン特定フラグは前記処理ルーチンに対応して前記マトリクステーブルに保持され、
前記ステートマシンの動作方法は、さらに、
（ｇ）マトリクステーブルを参照し、現在のステートで受け付けられる前記イベントに対応して、スキップ時実行ルーチン特定フラグがＯＮに設定されている処理ルーチンを検索し、その検索結果としての処理ルーチンの情報を実行ルーチンとして、前記処理ルーチン抽出手段に受け渡すステップ
を具備する方法をコンピュータにより実行可能なプログラム。
【請求項１４】
請求項１３に記載のプログラムにおいて、
さらに、
（ｈ）供給されるイベントを解析し、その解析結果を出力し、前記解析結果と、現在のステートに対応して、前記実行ルーチンを抽出するステップ
を具備する方法をコンピュータにより実行可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ステートマシンおよびステートマシンの動作方法に関する。
【背景技術】
【０００２】
技術の進歩に伴って、複数の機能を有する所謂多機能機器が市場に流通してきている。多機能機器には、その複数の機能を制御するための制御用ソフトウェアが搭載されている。多機能機器に使用される制御用ソフトウェアを開発する場合には、そのデバッグ作業が必要である。しかしながら、その制御用ソフトウェア全体を一度にデバッグすることは、非常に困難である。
【０００３】
そこで、制御用ソフトウェアのデバッグを適切に実行するために、制御用ソフトウェアを複数のモジュールで構成し、モジュールごとにデバッグを行うことで、制御用ソフトウェア全体の品質を向上させる方法が用いられている。
【０００４】
このように、複数のモジュールで構成される制御用ソフトウェアを適切に動作させるためには、各モジュールのつながりをきちんと制御しなければならない。各モジュールのつながりを適切に制御する技術としては、ステートマシンを用いた技術が知られている（例えば、特許文献１、２参照。）。
【０００５】
図１は、特許文献１に記載のステートマシンの構成を例示するブロック図である。図１を参照すると、特許文献１に記載のステートマシンは、イベント解析手段１０１と、ルーチン解析手段１０２と、ルーチン処理手段１０３と、ステータス決定手段１０４と、マトリクステーブル１０５とを含んで構成されている。イベント解析手段１０１は、外部からの起動要求（以下イベントという）を待ち、イベントが発生したら解析を行っている。したがって、特許文献１に開示されている技術において、イベント解析手段１０１が解析を行なうためには、イベントの発生が必須である。これは、イベント解析手段１０１が、イベントを待つか、あるいはイベント解析手段１０１の前段にイベントを待つ手段があることを示している。以下、イベント解析手段１０１が、イベントを待つものとして説明する。
【０００６】
ルーチン解析手段１０２は、解析されたイベントの内容とその時のステート（図１ではステータスと表記）をもとに、マトリクステーブル１０５より実行ル−チンを抽出する。ルーチン処理手段１０３は、マトリクステーブル１０５より抽出されたル−チンでの処理を実行する。ステータス決定手段１０４は、ルーチン解析手段１０２と同様に、イベントと現在のステートによりマトリクステーブル１０５より次のステートを抽出し、ステートの遷移を行なう。ステートが遷移した後は、再びイベント解析手段１０１が呼び出され、次のイベントの発生を待ち、イベントが発生したら一連の処理を行う。特許文献１に記載のステートマシンは、移行ステータスの決定をルーチンでは行なわず、マトリクステーブルにより移行ステータスを決定している。
【０００７】
図２は、特許文献１に記載のマトリクステーブルの構成を示すテーブルである。図２を参照すると、第１行１２１はルーチン名を要素としている。第２行１２２は、ルーチンに対応して実行後のステータスを要素としている。図２を参照すると、要素１１１−１２１には第１ルーチンＲ１が設定され、要素１１１−１２２には、その処理が終わったときの移行先ステート（第２ステートＳ０２）が設定されている。また、要素１１２−１２１にも第１ルーチンＲ１が設定されている。図２に示されているように、要素１１２−１２２には移行先ステートとして第３ステートＳ０３が設定されている。さらに、要素１１３−１２１にも第１ルーチンＲ１が設定されている。図２に示されているように、このときの移行先ステートは第４ステートＳ０４である。
【０００８】
このように、特許文献１に記載の技術において、各ルーチンは処理の実行のみを行い、状態の遷移はマトリクステーブルにより決定されている。特許文献１に記載の技術は、イベントを待ちながら順次的に処理を進めていく順次処理を行う場合にも適用可能である。
【０００９】
図３は、順次処理を行う場合のマトリクステーブルの構成を示すテーブルである。図３に示されているマトリクステーブルにおいて、第１ステートＳ０１と第２ステートＳ０２はステートを示している。第１ルーチンＦ０１と第２ルーチンＦ０２はイベントに対する処理ルーチンを示している。第１イベントＥ０１はイベントを示し、と第２イベントＥｆ０１は、第１ルーチンＦ０１（または、第２ルーチンＦ０２）を実行したことによって発生するイベントをあらわしている。なお、以下の説明では、初期状態が第１ステートＳ０１である場合に対応しているものとする。
【００１０】
図３を参照すると、イベント解析手段１０１は、初期状態においてイベントの発生を待ち、イベントが発生したら解析する。このとき解析されたイベントは第１イベントＥ０１であるものとする。
【００１１】
イベント解析手段１０１は解析結果をルーチン解析手段１０２に通知する。ルーチン解析手段１０２は、その解析結果に応答してマトリクステーブルを参照する。ルーチン解析手段１０２は、現在のステートと解析されたイベント（Ｅ０１）から第１ルーチンＦ０１を実行する必要があると判断する。
【００１２】
ルーチン解析手段１０２は抽出したルーチンをルーチン処理手段１０３に通知し、ルーチン処理手段１０３は、ルーチン解析手段１０２が選んだ第１ルーチンＦ０１を実行する。
【００１３】
ルーチン処理手段１０３は、第１ルーチンＦ０１の実行に応答して、ステータス決定手段１０４に次にステートの決定を要求する。ステータス決定手段１０４は、その要求に応答してマトリクステーブルを参照する。ステータス決定手段１０４は、現在のステート（Ｓ０１）とイベント（Ｅ０１）からステートを第２ステートＳ０２に遷移させる。ステートの遷移が完了すると、処理はイベント待機状態に戻る。
【００１４】
イベント解析手段１０１は、イベントの発生を待ち、イベントが発生したら解析する。ここで、解析されたイベントが、第２イベントＥｆ０１であるとする。
【００１５】
ルーチン解析手段１０２は、マトリクステーブルを参照する。ルーチン解析手段１０２は、現在のステートとイベントから第２ルーチンＦ０２を実行する必要があると判断する。ルーチン処理手段１０３は、ルーチン解析手段１０２が選んだ第２ルーチンＦ０２を実行する。ステータス決定手段１０４は、マトリクステーブルを参照する。ステータス決定手段１０４は、現在のステートとイベントからステートを第１ステートＳ０１に遷移させる。特許文献１には、このような構成・動作によって、同じ処理を行うルーチンの数を低減させ、プログラムサイズを縮小するための技術が開示されている。
【００１６】
さらに、特許文献２（特開２００２−１１０７９６号公報）には、ステートマシンに遷移条件予備入力を設けることにより、状態の遷移に関する動作を変更する技術が記載されている。図４は、特許文献２に記載のステートマシンの構成を示すブロック図である。
【００１７】
図４を参照すると、特許文献２に記載のステートマシは、現在の状態が如何なる状態にあっても特定の状態へ選択的な活性レベル入力によりそれぞれ優先的に遷移させる遷移条件予備入力を備えることを特徴とし、次の状態を入力および保持し現在の状態を出力する状態レジスタと、現在の状態，遷移条件入力および遷移条件予備入力を基にして次の状態を生成する次状態生成組合せ回路とを備えている。
【００１８】
図４の遷移条件入力はイベントの入力である。また、図４の遷移条件予備入力は、ステートを優先的に変更するための、予備のイベントの入力である。特許文献２に記載の技術において、遷移条件予備入力にイベントを与えると、現在のステートに関係なく、遷移条件予備入力で指定されたステートに遷移する。したがって、図４で示されるように、遷移条件予備入力は遷移条件入力の拡張である。
【００１９】
図５は、特許文献２に記載の技術を用いた半導体集積回路におけるステートマシンの初期接続を示すブロック図である。図５に示されているように、その半導体集積回路では、各遷移条件予備入力Ｙ０〜Ｙ６は、ＬＳＩ開発初期の回路設計において、不活性レベルである接地に初期接続されている。
【００２０】
図６は、特許文献２におけるステートマシンの状態遷移を示す状態遷移図である。図６を参照すると、遷移条件予備入力にイベントが発生したときは、現在のステートにかかわらず、特定のステートに遷移することが示されている。特許文献２に記載の技術は、マトリックステーブルを使わないステートマシンを開示している。特許文献２に記載の技術を、におけるステートマシンの動作をマトリックステーブルで表すことができる。
【００２１】
図７は、特許文献２に記載の技術に対応するマトリクステーブル構成を示すテーブルである。特許文献２に記載の技術における半導体回路の構成では、各イベントを別の端子で受けるようになっている。そなため、同時に複数のイベントを受ける場合がある。その場合に、マトリックステーブルの上方で指定されたイベントを優先的に扱うものとする。図７を参照すると、遷移条件予備入力Ｙ０〜Ｙ６が上方にある、従って、遷移条件予備入力が優先的に処理される。
【００２２】
図８は、遷移条件予備入力がないときのマトリックステーブルである。図８を参照すると、特許文献２に記載の技術は、遷移条件予備入力からのイベントを、マトリックステーブルの優先される位置に追加したものであることが示されている。
【００２３】
【特許文献１】特開平４−２６７４３５号公報
【特許文献２】特開２００２−１１０７９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２４】
上述してきたように、ステートマシンはイベントが発生したときに、そのイベントと現在のステートを元に必要な処理ルーチンを実行するものである。従来のステートマシンは、イベントを待ちながら順次的に処理を進めていく順次処理を行う場合にも用いられている。
【００２５】
ここで、特許文献１に記載のステートマシンの動作おいて、第１ルーチンＦ０１が何らかの状況によってはイベントＥｆ０１の発生を引き起こす処理を行わない場合がある。しかし、その場合でも第２イベントＥｆ０１が発生する場合と同様に、第２ルーチンＦ０２を実行して、第１ステートＳ０１に遷移する必要がある場合がある。
【００２６】
特許文献１に記載の技術は、イベントが発生しない限り次のステートの処理は行わない。そのため、このような場合イベント解析手段１０１で処理が停止してしまい、所定の動作を実現できなくなることがある。また、特許文献２に記載の技術は、遷移条件予備入力からのイベントをマトリックステーブルに追加しただけのものであるので、特許文献１に記載の技術と同様に、イベントが発生しない限り次のステートの処理が行われない。
【００２７】
本発明が解決しようとする課題は、通常はイベントの発生を引き起こす処理を行うルーチンが、何らかの要因によって、そのイベントを発生させる処理を行わない場合でも、適切に動作するステートマシンを提供することにある。
【課題を解決するための手段】
【００２８】
以下に、［発明を実施するための最良の形態］で使用される番号を用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。ただし、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００２９】
現在のステート（Ｓ１、Ｓ２）と発生するイベント（Ｅ１、Ｅｆ１、Ｅ２）とに対応して実行される処理ルーチン（Ｆ１、Ｆ２）の情報を保持するマトリクステーブル（１２、１６）に基づいて処理手順を決定するステートマシン（１）を構成する。そのステートマシン（１）は、前記イベント（Ｅ１、Ｅｆ１、Ｅ２）に応答して前記マトリックステーブル（１２、１６）を参照し、前記現在のステート（Ｓ１、Ｓ２）と前記イベント（Ｅ１、Ｅｆ１、Ｅ２）とに基づいて、今回実行する処理ルーチンを実行ルーチンとして抽出する処理ルーチン抽出手段（５）と、前記処理ルーチン抽出手段（５）が抽出した前記実行ルーチンを実行する処理ルーチン実行手段（７）と、前記実行ルーチンに基づいて次のステート（Ｓ１、Ｓ２）を決定する次ステート決定手段（８）と、新たなイベント（Ｅ１、Ｅｆ１、Ｅ２）を待機するイベント待機動作を停止させるイベント待機停止手段（６）と、前記新たなイベント待機動作が停止しているときに、前記次のステート（Ｓ１、Ｓ２）に対応して新たな処理ルーチンの抽出を前記処理ルーチン抽出手段に要求するスキップ状況判断手段（９）を具備する構成であることが好ましい。
また前記イベント待機停止手段（６）は、前記実行ルーチンの抽出完了に応答して、イベント待機停止状態を示すイベント待機情報（１３）を生成し、前記スキップ状況判断手段（９）は、前記イベント待機情報（１３）に基づいて、前記次のステート（Ｓ１、Ｓ２）に対応するイベント待機動作をスキップし、前記新たな処理ルーチンの抽出を前記処理ルーチン抽出手段（５）に要求する。
イベントを発生させる元になる処理が行われなかったときは、イベント待機情報（イベントスキップ情報１３）のフラグをＯＮにして、イベントスキップを実行する。そして、イベント待機情報（イベントスキップ情報１３）のフラグがONの時は、遷移後のステートでイベントを待たずに処理ルーチンを実行し、さらに次のステートへ遷移する。
【発明の効果】
【００３０】
本発明によると、通常はイベントの発生を引き起こす処理を行うルーチンが、何らかの要因によって、そのイベントを発生させる処理を行わない場合でも、適切に動作するステートマシンを提供することが可能となる。
【発明を実施するための最良の形態】
【００３１】
［第１の実施の形態］
以下に、図面を参照して本発明のステートマシン１に関して説明を行なう。以下の説明において、ステートマシン１は、外部から供給される起動要求（以下、本実施の形態において、イベントと称す）に応答して、その時の処理の実行段階（以下、本実施の形態において、ステートと称す）に基づいて実行する処理ルーチンを決定する。
【００３２】
図９は、第１の実施形態における本発明のステートマシン１の構成を例示するブロック図である。図９を参照すると、第１の実施形態のステートマシン１は、処理部２と、記憶部３とを含んで構成されている。図９に示されているように、処理部２は、イベント解析部４と、処理ルーチン抽出部５と、イベント待ちスキップ停止部６と、処理ルーチン実行部７と、次ステート決定部８と、イベント待ちスキップ判断部９と、イベント待ちスキップ開始部１０と、イベント発生トリガ監視部とを含んで構成されている。また、図９に示されているように、記憶部３は、マトリクステーブル１２と、イベント待ちスキップ情報１３とを含んで構成されている。
【００３３】
マトリクステーブル１２は、ステートマシン１が実行する処理ルーチンの決定に使用されるテーブルである。ここで、マトリクステーブル１２の構成に関する詳細な説明は後述する。イベント待ちスキップ情報１３は、本実施の形態のステートマシン１の記憶部３に保持され、イベント待ちを行なうか停止するかの判断に使用される情報である。イベント待ちスキップ情報１３は、スキップ実行フラグを含んで構成され、そのフラグがＯＮのときは、ステートマシン１のイベント待ち動作がスキップされる。したがって、そのフラグがＯＦＦのときは、ステートマシン１はイベント待ち状態になる。
【００３４】
イベント解析部４は、イベントに応答して、そのイベントの解析を行なう情報処理機能ブロックである。イベント解析部４は、キー入力やデータの受信をイベントとし、そのイベントに応答してイベント解析を実行する。イベント解析部４は、そのイベント解析によって、イベントを予め決められたイベントコードに分類する。イベント解析部４は、イベントの解析完了に応答して、解析結果であるイベントコードを処理ルーチン抽出部５に通知する。
【００３５】
処理ルーチン抽出部５は、イベント解析部４から通知されるイベントコードと、その時のステートに基づいて、マトリクステーブル１２から処理ルーチンを抽出する情報処理機能ブロックである。
【００３６】
イベント待ちスキップ停止部６は、処理ルーチンの実行の前に、イベント待ちスキップを停止させる処理を実行する情報処理機能ブロックである。イベント待ちスキップ停止部６は、処理ルーチン抽出部５による処理ルーチンの抽出が完了したときに、イベント待ちスキップ情報１３を更新し、スキップ実行フラグをＯＦＦにする。
【００３７】
処理ルーチン実行部７は、処理ルーチン抽出部５が抽出した処理ルーチンを実行する情報処理機能ブロックである。次ステート決定部８は、マトリクステーブル１２に基づいて、次のステートを決定する情報処理機能ブロックである。イベント待ちスキップ判断部９は、イベント待ちスキップ情報１３のスキップ実行フラグの状態に基づいて、イベント待ちを実行するかどうかの判断をする情報処理機能ブロックである。イベント待ちスキップ開始部１０は、イベント待ちスキップを停止状態から実行状態にする（＝イベント待ちをスキップする）情報処理機能ブロックである。本実施の形態のイベント待ちスキップ開始部１０は、イベント待ちスキップ情報１３のスキップ実行フラグをＯＦＦからＯＮに変更することで、イベント待ちスキップを停止状態から実行状態にする。
【００３８】
イベント発生トリガ監視部は、現在実行中の処理ルーチンに対応して実行されるイベント発生用処理が行われたかどうかを監視する情報処理機能ブロックである。本実施の形態のステートマシン１は、処理ルーチンが実行されることにより、イベント発生用のトリガが生成されるかどうかの監視を行い、そのトリガが生成されていないけれども、ステートの遷移を行なわなければならない場合に、適切にステートの遷移を行なうことが可能である。
【００３９】
以下に、マトリクステーブル１２に関する詳細な説明を行なう。図１０は、マトリクステーブル１２の構成を例示するブロック図である。図１０を参照すると、マトリクステーブル１２は、現在のステートと待ちイベントとに対応して処理ルーチンを特定することが可能な構成になっている。第１の実施の形態のステートマシンは、第１ステートＳ１と第２ステートＳ２との二つの状態に対応している。したがって、図１０に示されているように、マトリクステーブル１２は、第１イベントＥ１または第３イベントＥ２に応答して、現在のステートにおける処理ルーチン（第１ルーチンＦ１または第２ルーチンＦ２）と次ステート（第１ステートＳ１または第２ステートＳ２）を関連付けて保持している。
【００４０】
さらに、図面を参照して、第１の実施の形態の動作に関して説明を行なう。なお第１ルーチンＦ１は、通常は第２イベントＥｆ１の発生を引き起こす処理を行うが、条件によっては第２イベントＥｆ１の発生を引き起こす処理を行わないものとする。
【００４１】
図１１は、第１の実施形態におけるステートマシンの動作を例示するフローチャートである。図１１に示されているように、本実施の形態のステートマシン１の動作は、通常、発生するイベントに応答して開始する。
【００４２】
ステップＳ１０１において、イベント解析部４は、外部で発生するイベントを解析し、そのイベントを識別するためのイベント識別子を処理ルーチン抽出部５に通知する。
【００４３】
ステップＳ１０２において、処理ルーチン抽出部５は、イベント解析部４から通知されるイベント識別子に応答して、記憶部３のマトリクステーブル１２を参照し、そのイベント識別子と現在のステートとから現在実行する処理ルーチンを抽出する。
【００４４】
ステップＳ１０３において、イベント待ちスキップ停止部６は、処理ルーチン抽出部５が処理ルーチンの抽出を完了したことに応答して、イベント待ちスキップ情報１３のスキップ実行フラグをＯＦＦにして、イベント待ちスキップを停止状態にする。
【００４５】
ステップＳ１０４において、処理ルーチン実行部７は、イベント待ちがスキップしていることに対応して、処理ルーチン抽出部５が抽出した処理ルーチンを実行する。
【００４６】
ステップＳ１０５において、次ステート決定部８は、現在実行されている処理ルーチンに関連付けられている次ステートをマトリクステーブル１２に基づいて決定する。
【００４７】
ステップＳ１０６において、イベント待ちスキップ判断部９は、次ステートが決定したときに、イベント待ちスキップ情報１３を読み込む。イベント待ちスキップ判断部９は、イベント待ちスキップ情報１３の読み込み完了に応答してステップＳ１０７の処理を実行する。
【００４８】
ステップＳ１０７において、イベント待ちスキップ判断部９は、イベント待ちスキップ情報１３のスキップ実行フラグに基づいて、イベント待ちをスキップするどうかの判断を行なう。その判断の結果、スキップを実行する場合、処理はステップＳ１０２に戻り、ステートマシン１は、ステップＳ１０５で次ステート決定部８が決定した次ステートに対応してイベントの発生を待たずに処理ルーチンの抽出を行う。その判断の結果、スキップを停止する場合は、処理はステップＳ１０１に戻り、ステートマシン１は、イベントの発生を待ってから、処理ルーチンの抽出を行なう。
【００４９】
これによって、通常はイベントの発生を引き起こす処理を行うルーチンが、何らかの要因によって、そのイベントを発生させるトリガを生成しない場合でも、本来の処理を停止させることなく動作するステートマシンを構成することができる。
【００５０】
本実施の形態の動作は、第１ルーチンＦ１が第２イベントＥｆ１の発生を引き起こす処理を行う場合と、第１ルーチンＦ１が第２イベントＥｆ１の発生を引き起こす処理を行わなかった場合とで異なる動作をすることになる。
【００５１】
以下に、第１ルーチンＦ１が第２イベントＥｆ１の発生を引き起こす処理を行う場合について説明を行なう。ここで、初期状態は第１ステートＳ１とする。初期状態において、イベント解析部４はイベントの発生を待ち、イベントが発生したら解析する。ここで、仮に解析されたイベントが第１イベントＥ１であったとする。
【００５２】
このとき、処理ルーチン抽出部５はマトリクステーブル１２を参照する。処理ルーチン抽出部５は、現在のステートとイベントから第１ルーチンＦ１を実行する必要があると判断する。イベント待ちスキップ停止部６は、実行予定の処理ルーチンの抽出完了に応答して、イベント待ちスキップ情報１３のスキップ実行フラグをＯＦＦにする。その後、処理ルーチン実行部７は、処理ルーチン抽出部５が選んだ第１ルーチンＦ１を実行する。
【００５３】
次ステート決定部８は、マトリクステーブル１２を参照して、現在のステートとイベントから次のステートを決定する。次ステート決定部８は決定した第２ステートＳ２になるように状態遷移を実行する。イベント待ちスキップ判断部９は、このときイベント待ちスキップ情報１３のスキップ実行フラグがＯＦＦのまま更新されていないので、イベント待ちをスキップしないことを選択する。
【００５４】
イベント解析部４は、新たなイベントの発生を待ち、新たなイベントが発生したら解析する。ここで、解析された新たなイベントが第２イベントＥｆ１であったとする。処理ルーチン抽出部５は、マトリクステーブル１２を参照する。処理ルーチン抽出部５は、現在のステートとイベントから第２ルーチンＦ２を実行する必要があると判断する。
【００５５】
イベント待ちスキップ停止部６は、イベント待ちスキップ情報のスキップ実行フラグがＯＮの場合はＯＦＦにする。また、イベント待ちスキップ停止部６は、イベント待ちスキップ情報のスキップ実行フラグがＯＦＦの場合は、その状態を維持する。処理ルーチン実行部７は、処理ルーチン抽出部５が選んだ第２ルーチンＦ２を実行する。
【００５６】
次ステート決定部８は、マトリクステーブル１２を参照する。次ステート決定部８は、現在のステートとイベントからステートを第１ステートＳ１に遷移させる。イベント待ちスキップ判断部９は、イベント待ちスキップ情報１３のスキップ実行フラグがＯＦＦのままなので、イベント待ちをスキップしないことを選択する。
【００５７】
ここで、第１ルーチンＦ１が第２イベントＥｆ１の発生を引き起こす処理を行わなかった場合に関する説明を行なう。ここで、初期状態は第１ステートＳ１であるものとする。
【００５８】
このときイベント解析部４は、イベントの発生を待ち、イベントが発生したら解析する。以下の説明では、このときに解析されたイベントが、第１イベントＥ１である場合を例に説明を行なう。
【００５９】
処理ルーチン抽出部５は、マトリクステーブル１２を参照する。処理ルーチン抽出部５は、現在のステートとイベントから第１ルーチンＦ１を実行する必要があると判断する。その後、イベント待ちスキップ停止部６は、イベント待ちスキップ情報１３のスキップ実行フラグをＯＦＦにする。スキップ実行フラグがＯＦＦになった後、処理ルーチン実行部７は、処理ルーチン抽出部５が選んだ第１ルーチンＦ１を実行する。ここで、第１ルーチンＦ１は第２イベントＥｆ１の発生を引き起こす処理を行わないとする。このとき、イベント待ちスキップ開始部１０は、イベント待ちスキップ情報１３のスキップ実行フラグをＯＮにするようにイベント待ちスキップ情報１３を更新する。なおイベント待ちスキップ情報１３の更新動作に関しては後述する。
【００６０】
次ステート決定部８は、処理ルーチンの実行に対応してマトリクステーブル１２を参照する。次ステート決定部８は、現在のステートとイベントから第２ステートＳ２に遷移させる。イベント待ちスキップ判断部９は、イベント待ちスキップ情報１３のスキップ実行フラグがＯＮになっているので、イベント待ちをスキップすることを選択する。これにより、イベント解析部４ではなく処理ルーチン抽出部５が呼び出される。
【００６１】
呼び出された処理ルーチン抽出部５は、マトリクステーブル１２を参照する。処理ルーチン抽出部５は、現在のステートから第２ルーチンＦ２を実行する必要があると判断する。その判断に応答して、イベント待ちスキップ停止部６は、イベント待ちスキップ情報１３のスキップ実行フラグをOFFにする。処理ルーチン実行部７は、処理ルーチン抽出部５が選んだ第２ルーチンＦ２を実行する。次ステート決定部８は、第２ルーチンＦ２の実行に対応してマトリクステーブル１２を参照する。次ステート決定部８は、現在のステートとイベントから第１ステートＳ１に遷移させる。イベント待ちスキップ判断部９は、イベント待ちスキップ情報１３のスキップ実行フラグがＯＦＦなので、イベント待ちをスキップしないことを選択する。
【００６２】
この流れにより、第１ルーチンＦ１が第２イベントＥｆ１を引き起こす処理を行わない場合でも、第２イベントＥｆ１待ちで停止することなく、ステートマシンは所定の動作を実行する。
【００６３】
図１２は、本実施の形態のステートマシンの動作における、イベント待ちスキップ情報１３のスキップ実行フラグの書き換え動作を例示するフローチャートである。以下の実施の形態において、図１２に示されている動作が、イベント発生トリガ監視部によって実行される場合を例示して説明を行なう。図１２を参照すると、イベント発生トリガ監視部は、現在実行中の処理ルーチンを監視することで、イベント待ちスキップ情報１３を更新するかどうかを決定している。ステップＳ２０１において、イベント発生トリガ監視部は現在の処理ルーチンを認識する。ステップＳ２０２において、イベント発生トリガ監視部は、現在の処理ルーチンが、イベント発生用の処理を行ったかどうかの判断を実行する。その判断の結果、イベント発生用の処理が行われている場合には、イベント発生トリガ監視部は、現在実行中の処理ルーチンの監視を継続する。その判断の結果、イベント発生用の処理が行われていない場合、処理はステップＳ２０３に進む。ステップＳ２０３において、イベント発生トリガ監視部は、イベント待ちスキップ情報１３のスキップ実行フラグをＯＮにする。上述の動作は、図１１のフローチャートで示される動作の、ステップＳ１０４とステップＳ１０５との間に実行されることが好ましい。
【００６４】
これによって、通常はイベントの発生を引き起こす処理を行うルーチンが、実際にイベントの発生を引き起こす処理を行っているかどうかを監視することが可能になる。ステートマシン１は、その何らかの要因によって、そのイベントを発生させるトリガを生成しない場合に対応する処理を行うことが可能になる。
【００６５】
［第２の実施の形態］
以下に、本発明の第２の実施の形態について説明を行なう。ステートマシン１は、ステートが特定しているときに複数のイベントを受け付ける場合がある。図１３は、複数のイベントを受け付けるステートマシン１に備えられるマトリクステーブル１５の構成を例示するテーブルである。図１３を参照すると、第２の実施形態のステートマシン１は、第２ステートＳ２の時に第２イベントＥｆ１もしくは第３イベントＥ２を受ける。ステートマシン１は、イベントが第２イベントＥｆ１の時は第２処理ルーチンＦ２を実行して第１ステートＳ１に遷移する。イベントが第３イベントＥ２の時は、ステートマシン１はｌ第３処理ルーチンＦ３を実行して、ステートＳ２に遷移する。
【００６６】
このような場合に、第１の実施形態と同様に第１処理ルーチンＦ１が、次のイベントを引き起こさない場合、第２ステートＳ２に遷移後、第２処理ルーチンＦ２を実行すればよいのか、あるいは第３処理ルーチンＦ３を実行すればよいのかが判断できないことがある。
【００６７】
図１４に示される状態遷移は、プログラムの実行時に決まるものではなく、プログラムの設計時に決まるものである。したがって、マトリックステーブル１５にあらたな情報を追加することで対応することが可能になる。以下に、複数のイベントを受け付ける場合のマトリクステーブルの構成について説明を行なう。図１４を参照すると、マトリクステーブル１６は、図１３に示されるマトリックステーブル１５にスキップ時実行ルーチン特定フラグ（１７〜１９）を備えて構成されている。図１４に示されているように、スキップ時実行ルーチン特定フラグは全てのステート、全てのイベントに対応して備えられている。また、マトリクステーブル１６に示されているように、このスキップ時実行ルーチン特定フラグは、一つのステートあたり一つのイベントについてＯＮとなり、他のイベントについてはＯＦＦになる。ステートマシン１は、イベント待ちをスキップするときはマトリックステーブルを参照し、スキップ時実行ルーチン特定フラグがＯＮに指定されている処理ルーチンを実行し、ステートを遷移させる。
【００６８】
図１５は、第２の実施の形態におけるステートマシン１の構成を例示するブロック図である。図１５を参照すると、第２の実施の形態のステートマシン１は、第１の実施の形態のステートマシン１にさらにスキップ時実行ルーチン判断部２１を備えて構成されている。スキップ時実行ルーチン判断部２１は上述のスキップ時実行ルーチン特定フラグに基づいて、実行する処理ルーチンを決定する情報処理機能ブロックである。
【００６９】
以下に、図面を参照して、第２の実施形態の動作について説明を行なう。図１６は第２の実施の形態の動作を例示するフローチャートである。図１６示されている各ステップにおいて、第１の実施の形態と同じ符号が付与されているステップに関しては、第１の実施の形態の動作と同様であるので、その詳細な説明は省略する。図１６に示されているように、図１６のステップＳ３０１において、スキップ時実行ルーチン判断部２１はマトリクステーブル１６を参照し、現在のステートで受け付けられるイベントのうち、スキップ時実行ルーチン特定フラグがＯＮのものを検索する。スキップ時実行ルーチン判断部２１は、例えば、図１４のマトリクステーブル１６を例に説明を行なうと、第２イベントＥｆ１に対応するスキップ時実行ルーチン特定フラグ１８がＯＮになっていることを検索した場合、第２ルーチンＦ２を処理ルーチンとして決定し、処理ルーチン抽出部５にその情報を受け渡す。以後の動作は第１の実施の形態の動作と同様である。
【００７０】
第１の実施形態の説明では、本発明の理解を容易にするために、ステートとイベントが一対一の簡単なマトリックステーブルを例示して説明をおこなった。実際のステートマシンでは、一つのステートで複数のイベントを受け付ける場合も多い。第２の実施形態にのべるステートマシンは、そのような場合であっても、適切に動作することが可能となる。
【００７１】
上述してきたように、従来のステートマシンはイベントの発生が必須であったため、イベントが発生しないという状況に対応することができなかった。本実施の形態のステートマシンはイベント待ちスキップ情報とそれをON、またはOFFする機構と、それを判断する機構を設けることにより、イベントが発生しない状況に対応できるものである。
【図面の簡単な説明】
【００７２】
【図１】図１は、従来のステートマシンの構成を示すブロック図である。
【図２】図２は、従来のマトリクステーブルの構成を示すテーブルである。
【図３】図３は、順次処理を行う場合の従来のマトリクステーブルの構成を示すテーブルである。
【図４】図４は、従来のステートマシンの構成を示すブロック図である。
【図５】図５は、特許文献２に記載の技術を用いた半導体集積回路におけるステートマシンの初期接続を示すブロック図である。
【図６】図６は、特許文献２におけるステートマシンの状態遷移を示す状態遷移図である。
【図７】図７は、特許文献２に記載の技術に対応するマトリクステーブル構成を示すテーブルである。
【図８】図８は、特許文献２に記載の技術における、遷移条件予備入力がないときのマトリックステーブルである。
【図９】図９は、本発明の第１の実施の形態におけるステートマシンの構成を例示するブロック図である。
【図１０】図１０は、第１の実施の形態におけるマトリクステーブルの構成を例示するテーブルである。
【図１１】図１１は、第１の実施の形態における動作を例示するフローチャートである。
【図１２】図１２は、第１の実施の形態における動作を例示するフローチャートである。
【図１３】図１３は、第２の実施の形態におけるマトリクステーブルの構成を例示するテーブルである。
【図１４】図１４は、第２の実施の形態におけるステートマシンの構成を例示するブロック図である。
【図１５】図１５は、第２の実施の形態におけるマトリクステーブルの構成を例示するテーブルである。
【図１６】図１６は、第２の実施の形態における動作を例示するフローチャートである。
【符号の説明】
【００７３】
１…ステートマシン
２…処理部
３…記憶部
４…イベント解析部
５…処理ルーチン抽出部
６…イベント待ちスキップ停止部
７…処理ルーチン実行部
８…次ステート決定部
９…イベント待ちスキップ判断部
１０…イベント待ちスキップ開始部
１１…イベント発生トリガ監視部
１２…マトリクステーブル
１３…イベント待ちスキップ情報
１５…マトリクステーブル
１６…マトリクステーブル
１７、１８、１９…スキップ時実行ルーチン特定フラグ
Ｓ１…第１ステート、Ｓ２…第２ステート
Ｅ１…第１イベント、Ｅｆ１…第２イベント
Ｅ２…第３イベント
Ｆ１…第１ルーチン、Ｆ２…第２ルーチン
Ｆ３…第３ルーチン
２１…スキップ時実行ルーチン判断部
１０１…イベント解析手段
１０２…ルーチン抽出手段
１０３…ルーチン処理手段
１０４…ステータス決定手段
１０５…マトリクステーブル
１２１…第１行
１２２…第２行
１１１−１２１…要素
１１１−１２２…要素
１１２−１２１…要素
１１２−１２２…要素
１１３−１２１…要素
１１３−１２２…要素
１０６…ステートマシン
１０７…マトリクステーブル
Ｓ０１…第１ステート、Ｓ０２…第２ステート
Ｅ０１…第１イベント、Ｅｆ０１…第２イベント
Ｆ０１…第１ルーチン、Ｆ０２…第２ルーチン
１０８…ステートマシン
Ｓ００…基準ステート、Ｓ０３…第３ステート
Ｓ０４…第４ステート、Ｓ０５…第５ステート
Ｓ０６…第６ステート
【図１】
2006338391.tif 000003
【図２】
2006338391.tif 000004
【図３】
2006338391.tif 000005
【図４】
2006338391.tif 000006
【図５】
2006338391.tif 000007
【図６】
2006338391.tif 000008
【図７】
2006338391.tif 000009
【図８】
2006338391.tif 000010
【図９】
2006338391.tif 000011
【図１０】
2006338391.tif 000012
【図１１】
2006338391.tif 000013
【図１２】
2006338391.tif 000014
【図１３】
2006338391.tif 000015
【図１４】
2006338391.tif 000016
【図１５】
2006338391.tif 000017
【図１６】
2006338391.tif 000018