(57)【特許請求の範囲】
【請求項１】
プロセッサに対し入出力信号をリアルタイム処理させるマルチタスクソフトウェアの概略動作をコンピュータでシミュレーションする方法において、複数のタスクのそれぞれに対応したモデルタスクは、信号の入出力以外の処理が、該処理の見積時間τだけ経過すればリターンするスペンドタイム関数の呼び出しで表され、該見積時間τは該スペンドタイム関数の引数であり、
該コンピュータが、全てのモデルタスクで使用されるスペンドタイム関数の引き数τの最小値を１サイクルとし、現時刻ｔが１サイクル経過する毎に、
（ａ）該複数のモデルタスクのいずれを実行するかを所定アルゴリズムで決定し、
（ｂ）実行対象と決定したモデルタスクｉのみについて、実行中のスペンドタイム関数の見積時間τiを１サイクルだけデクリメントし、
（ｃ）現時刻で各モデルタスクが実行中であるか否かの状態を該コンピュータの記憶装置に格納する、
ことを特徴とする概略マルチタスクソフトウェアシミュレーション方法。
【請求項２】
上記複数のモデルタスクの少なくとも１つは、互いに引数値のみ異なる２つのスペンドタイム関数呼び出しの一方を入力信号値に基づき選択する処理を含むことを特徴とする請求項１記載の概略マルチタスクソフトウェアシミュレーション方法。
【請求項３】
上記複数のモデルタスクの少なくとも１つは、該スペンドタイム関数を呼び出す処理と、該スペンドタイム関数の呼び出しの前又は後で制御データ信号を模擬的に出力する処理とを含むことを特徴とする請求項１記載の概略マルチタスクソフトウェアシミュレーション方法。
【請求項４】
上記ステップ（ａ）では、上記ステップ（ｃ）で格納された各モデルタスクの状態を参照して上記決定をすることを特徴とする請求項１記載の概略マルチタスクソフトウェアシミュレーション方法。
【請求項５】
上記ステップ（ａ）の所定アルゴリズムは、上記複数のモデルタスクのうち生存しているものを順番に実行するものであることを特徴とする請求項１記載の概略マルチタスクソフトウェアシミュレーション方法。
【請求項６】
上記複数のモデルタスクはそれぞれその属性として優先度を有し、
上記ステップ（ａ）の所定アルゴリズムは、実行可能なモデルタスク候補の中から最も優先度の高いモデルタスク候補を選択し、該選択されたモデルタスク候補が１つの場合にはこれを実行対象のモデルタスクと決定し、該選択されたモデルタスク候補が複数の場合にはこれらの記憶装置内配列順に従って実行対象のモデルタスクを決定するものであることを特徴とする請求項１記載の概略マルチタスクソフトウェアシミュレーション方法。
【請求項７】
上記複数のモデルタスクの少なくとも１つは上記プロセッサに対する割込と対応づけられ、
上記ステップ（ａ）の所定アルゴリズムでは、該割込が生じた場合、該対応づけられたモデルタスクを実行対象と決定するものであることを特徴とする請求項１記載の概略マルチタスクソフトウェアシミュレーション方法。
【請求項８】
第１プロセッサに対し入出力信号をリアルタイム処理させるマルチタスクソフトウェアの概略動作をシミュレーションする概略マルチタスクソフトウェアシミュレーション装置において、
第２プロセッサと、
該第２プロセッサに結合された記憶装置と、
を有し、該記憶装置には、複数のタスクのそれぞれに対応したモデルタスクと、これらモデルタスクの実行を該プロセッサに対し制御させるプログラムとが格納され、各モデルタスクは、信号の入出力以外の処理が、該処理の見積時間τだけ経過すればリターンするスペンドタイム関数の呼び出しで表され、該見積時間τは該スペンドタイム関数の引数であり、
該プログラムは該第２プロセッサに対し、全てのモデルタスクで使用されるスペンドタイム関数の引き数τの最小値を１サイクルとさせ、現時刻ｔが１サイクル経過する毎に、
（ａ）該複数のモデルタスクのいずれを実行するかを所定アルゴリズムで決定させ、
（ｂ）実行対象と決定したモデルタスクｉにおいて、実行中のスペンドタイム関数の見積時間τiを１サイクルだけデクリメントさせ、
（ｃ）現時刻ｔで各モデルタスクが実行中であるか否かの状態を該記憶装置に格納させる、
ことを特徴とする概略マルチタスクソフトウェアシミュレーション装置。
【請求項９】
第１プロセッサに対し入出力信号をリアルタイム処理させるマルチタスクソフトウェアの概略動作をシミュレーションする概略マルチタスクソフトウェアシミュレーションプログラムにおいて、
第２プロセッサに対し、全てのモデルタスクで使用されるスペンドタイム関数の引き数τの最小値を１サイクルとさせ、現時刻ｔが１サイクル経過する毎に、
（ａ）複数のタスクのそれぞれに対応したモデルタスクのいずれを実行するかを所定アルゴリズムで決定させ、ここに各モデルタスクは、信号の入出力以外の処理が、該処理の見積時間τだけ経過すればリターンするスペンドタイム関数の呼び出しで表され、該見積時間τは該スペンドタイム関数の引数であり、
（ｂ）実行対象と決定したモデルタスクｉにおいて、実行中のスペンドタイム関数の見積時間τiを１サイクルだけデクリメントさせ、
（ｃ）現時刻ｔで各モデルタスクが実行中であるか否かの状態を該記憶装置に格納させる、
ことを特徴とする概略マルチタスクソフトウェアシミュレーションプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、入出力信号をリアルタイム処理するマルチタスクソフトウェアの詳細設計前に、該マルチタスクソフトウェアの入出力信号のタイミングの概略をシミュレーションする概略マルチタスクソフトウェアのシミュレーションを行う方法、装置及びプログラムに関する。
【０００２】
【従来の技術】
例えば、プロセッサで車のエンジン制御を行うシステムでは、多数の入力データに基づいてリアルタイムでマルチタスク処理を行う必要がある。このシステムの開発において、処理遅延によりリアルタイム制御ができない場合、より高性能のプロセッサを用いることによりこの問題を解決できる場合がある。しかし、ハードウェアがコスト高になると共に、ＯＳが複雑になってソフトウェアもコスト高になる。このため、ソフトウェアとハードウェアの両面からできるだけ低コストになるよう該問題を解決する必要がある。
【０００３】
従来では、ソフトウェアを開発し、これを既存の又は新たに開発したプロセッサにロードし、プロセッサと外部周辺装置との間の様々な入出力条件の下で実行させることにより、所望のリアルタイム制御を行うことが可能であるかどうかという、ソフトウェアとハードウェアの総合的なタイミング検証を行っていた。
【０００４】
【発明が解決しようとする課題】
しかし、検証の結果、問題が確認された場合、ソフトウェア（及びハードウェア）の設計をやり直す必要が生じ、部分的にタイミングをずらすと他の部分でタイミングがずれたりする。このため、設計と実試験の繰り返しが行われて開発期間が長くなる原因となっていた。
【０００５】
本発明の目的は、このような問題点に鑑み、ソフトウェア（及びハードウェア）を詳細設計する前にこれを概略設計しそのシミュレーションを行うことにより、詳細設計条件をより限定して、設計と実試験の繰り返しを避け開発期間を短縮することが可能な概略マルチタスクソフトウェアのシミュレーションを行う方法、装置及びプログラムを提供することにある。
【０００６】
本発明の一態様では、プロセッサに対し入出力信号をリアルタイム処理させるマルチタスクソフトウェアの概略動作をコンピュータでシミュレーションする方法において、複数のタスクのそれぞれに対応したモデルタスクは、信号の入出力以外の処理が、該処理の見積時間τだけ経過すればリターンするスペンドタイム関数の呼び出しで表され、該見積時間τは該スペンドタイム関数の引数であり、該コンピュータが、全てのモデルタスクで使用されるスペンドタイム関数の引き数τの最小値を１サイクルとし、現時刻ｔが１サイクル経過する毎に、
（ａ）該複数のモデルタスクのいずれを実行するかを所定アルゴリズムで決定し、
（ｂ）実行対象と決定したモデルタスクｉのみについて、実行中のスペンドタイム関数の見積時間τiを１サイクルだけデクリメントし、
（ｃ）現時刻ｔで各モデルタスクが実行中であるか否かの状態を該コンピュータの記憶装置に格納する。
【０００７】
この構成によれば、ソフトウェア（及びハードウェア）の詳細設計前に、リアルタイム制御を正常に行うための各タスクに要求される処理時間や処理のタイミングを知ることができるので、これに基づきハードウェア（及びソフトウェア）を詳細設計することにより、従来のような設計と実試験の繰り返しによる開発期間の長期化を避けることができる。
【０００８】
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
【０００９】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
【００１０】
［第１実施形態］
図１は、本発明の第１実施形態の概略マルチタスクソフトウェアシミュレーション方法を示す。
【００１１】
この概略マルチタスクソフトウェアシミュレーション方法は、ソフトウェア（及びハードウェア）の詳細設計前にプロセッサが所望のリアルタイム処理を行うことが可能であるかどうかを概略的に確認するとともに、問題が生ずる場合にはこれを解決するための詳細設計条件を知ることにより詳細設計と実テストの繰り返しを回避するためのものである。
【００１２】
概略マルチタスクソフトウェアシミュレーション方法は、コンピュータ１０に入力装置１１及び表示装置１２が接続された一般的なコンピュータシステムである。図１ではコンピュータ１０のソフトウェア構成を機能ブロックで示している。コンピュータ１０の記憶部には、モデル２０が格納されている。モデル２０は概略的なものであり、リアルタイム制御用プロセッサ及びこのプロセッサを動作させるソフトウェアの詳細設計前に作成される。
【００１３】
モデル２０は、コンピュータ２１と、周辺装置２２と、これらの間に接続されるレジスタＲＥＧ１〜ＲＥＧｍとを備えている。コンピュータ２１は、プロセッサと、メモリと、入出力インタフェースと、これらを相互接続するバスとを含む構成のモデルであり、１チップ又は複数のチップで構成されるが、その具体的な構成は考慮されない。周辺装置２２は、例えば家電製品のモデルであり、周辺装置２２又はその周囲の状態を示す信号ＳＧ１〜ＳＧｎをコンピュータ２１に供給する。コンピュータ２１は、これらの信号に基づき、制御データを生成してレジスタＲＥＧ１〜ＲＥＧｍに格納する。周辺装置２２は、レジスタＲＥＧ１〜ＲＥＧｍの内容に基づきリアルタイム制御される。
【００１４】
モデル２０は、入力装置１１からの開始指令に基づいて動作を開始する。動作トレース部３０は、モデル２０の内部状態を検出しトレースするプログラムであり、その結果が表示装置１２に供給されて表示される。
【００１５】
コンピュータ２１のアプリケーションプログラムの概略は、リアルタイム制御を行うモデルタスクtask1〜taskNで表される。以下、簡単化のために、モデルタスクを単にタスクと称す。タスク実行制御部２３は、プログラムであり、記憶部に格納されたＮ個のtask１〜taskNの内容に基づいて各タスクに対応したスレッド（実際の処理の流れ）を生成させ、タスクを実行又は停止（スリープ）させる。この際、状態記憶部２４内に各スレッドの状態（タスクの実行又は停止の状態）が格納される。
【００１６】
図１において、スレッドＳＬ１〜ＳＬ４は例えばそれぞれtask1〜task4に対応している。図１は、時刻ｔ０で主スレッドＳＬ１が生成され、時刻ｔ１でtask1により副スレッドＳＬ２が生成され、時刻ｔ２でtask2により副スレッドＳＬ３及びＳＬ４が生成され、時刻ｔ３及びｔ４でそれぞれtask4及びtask3の処理が終了し、時刻ｔ５でtask1及びtask2の処理が終了していることを示している。
【００１７】
各タスクにおける入出力以外の処理は、処理時間τだけを考慮する。τは相対的な時間であり、その単位をｕで表す。例えばtask1〜task3は、図２に示すように表される。すなわち、task1は関数f11とf12のシーケンスで表され、task2は関数f21とf22とf23のシーケンスで表され、task3は関数f31とf32のシーケンス又は関数f31とf33のシーケンスで表される。関数f32とf33の選択は、関数f31の処理において入力信号ＳＧ１の値に基づき行われる。
【００１８】
task1〜taskNは例えばＳｙｓｔｅｍＣ（商標、http://www.systemc.org）言語で記述されている。上記task1及びtask3は例えば次のように記述される。
0004132802.tif 000002
0004132802.tif 000003
上記タスクは簡単化のため出力処理がない場合を示しているが、各spend_time(τ)の前又は後に出力処理を含んでもよい。
【００１９】
図３は、タスクＴｉ中の関数spend_time(τ)に対する、図１のタスク実行制御部２３の処理を示す。但し、ステップＳ３及びＳ４は、全スレッドに共通の処理である。以下、括弧内は図中のステップ識別符号を示す。
【００２０】
（Ｓ１）spend_time(τ)の引き数τの時間単位ｕをサイクルタイムｃに変換する。１サイクルタイムは、全てのタスクで使用されるspend_time(τ)の引き数τの最小値であり、例えば図２の場合、５ｕ＝１ｃと決定され、この場合、τ／５がτに代入される。１サイクルタイムは通常、数μ〜数ｍ秒である。
【００２１】
（Ｓ２）τ＝０であれば処理を終了し、そうでなければステップＳ３へ進む。
【００２２】
（Ｓ３）全スレッドの同期を取るために、すなわち全スレッドの時間軸上の現時刻を一致させるために、現サイクルまで経過していないスレッドがあれば、その経過を待つ。
【００２３】
（Ｓ４）次サイクルで実行すべきタスクＴＸを、後述のように決定する。
【００２４】
（Ｓ５）spend_time(τ)を呼び出したタスクＴｉが次サイクル実行タスクＴＸと一致すればステップＳ６へ進み、そうでなければステップＳ３へ戻る。
【００２５】
（Ｓ６）τの値を１だけデクリメントし、ステップＳ２へ戻る。
【００２６】
図４は、図３中のステップＳ４の詳細を、ラウンドロビン方式を採用した場合について示すフローチャートであり、この方法では、タスクをサイクリックに切り換えて実行するように次サイクル実行タスクを決定する。
【００２７】
（Ｓ１０）状態記憶部２４において、次サイクルで実行可能なタスク候補が存在すればステップＳ１１へ進み、そうでなければ、すなわちスレッド上の全タスクがスリープ状態（停止状態）であればステップＳ１４へ進む。
【００２８】
（Ｓ１１）図５に示すようなタスクリスト中の先頭タスク名ＴＮを取り出す。タスクリストは状態記憶部２４内の現サイクルの状態に対応しているので、新たに作成する必要はない。タスクリスト中のタスク名は、現サイクルにおいて存在するスレッドに対応している。
【００２９】
（Ｓ１２）取り出したタスク名ＴＮを、実質的にタスクリストの最後へ移動させる。「実質的に」とは、実際に移動していなくても論理的に移動したとみなせる場合を含む意味である。例えば、各スレッドにフラグを設け、‘１’のフラグをタスクリストの先頭行とみなし、フラグ列中の‘１’をシフトさせることによりタスク名ＴＮを実質的に移動させる。
【００３０】
（Ｓ１３）取り出したタスク名ＴＮのタスクを、次サイクルで実行すべきタスクＴＸと判定し、処理を終了する。
【００３１】
（Ｓ１４）ＴＸ＝φとし、処理を終了する。ここにφは空であることを示す。
【００３２】
このような方法により次サイクルで実行すべきタスクを決定すれば、現存するスレッド上の、スリープ状態でないタスクが、１サイクル毎に切り替えられて実行される。
【００３３】
図６は、上述の２つのタスクtask1()及びtask2()が図４の方法で実行される場合を示すタイムチャートである。
【００３４】
以上のような処理により、信号ＳＧ１〜ＳＧｎに応じてタスクの実行内容が変化し、これによりレジスタＲＥＧ１〜ＲＥＧｍの内容の更新時点が変化し、これらの制御データを用いて制御される周辺装置２２の制御結果も変わる。コンピュータ２１によるリアルタイム処理が遅れてレジスタＲＥＧ１〜ＲＥＧｍの内容更新周期が遅れる場合には、spend_time(τ)の引き数τの値を変更し、タスクの実行と停止のタイミングを調整し、又はプロセッサの処理速度を向上させる。引き数τの値の変更は、処理方法の変更やプログラム言語の変更などに対応している。
【００３５】
本第１実施形態によれば、ソフトウェア（及びハードウェア）の詳細設計前に、リアルタイム制御を正常に行うための各タスクに要求される処理時間や処理のタイミングを知ることができるので、これに基づきソフトウェア（及びハードウェア）を詳細設計することにより、従来のような設計と実試験の繰り返しによる開発期間の長期化を避けることができる。
【００３６】
［第２実施形態］
図７は、図３のステップＳ４の他の処理方法を本発明の第２実施形態として示すフローチャートであり、この方法では、タスク優先度に基づいて次サイクル実行タスクを決定する。
【００３７】
ステップＳ１０及びＳ１４は、図４の対応するステップと同一である。
【００３８】
（Ｓ２０）初期値として、次サイクル実行タスクＴＸにφ、該タスクの優先度ＰＬＸに最低優先度ＰＬminを代入する。
【００３９】
（Ｓ２１）タスクリストの第ｉ行を示す変数ｉに初期値１を代入する。
【００４０】
図８はタスクリストを示しており、各行はタスク名とそのタスクの優先度とからなる。第ｉ行のタスク名及び優先度をそれぞれタスクＴＮ（ｉ）及ＰＬＮ（ｉ）で表す。優先度は例えばレベル０〜７であり、値の小さいほど優先度が高い。
【００４１】
（Ｓ２２）図１の状態記憶部２４を参照して、タスクＴＮ（ｉ）のタスクが次サイクルにおいてスリープ状態であるかどうかを判定し、スリープ状態であればステップＳ２５へ進み、そうでなければステップＳ２３へ進む。
【００４２】
（Ｓ２３）次サイクル実行タスクＴＸの優先度ＰＬＸが優先度ＰＬＮ（ｉ）より低ければ、すなわちＰＬＸ＞ＰＬＮ（ｉ）であれば、ステップＳ２４へ進み、そうでなければステップＳ２５へ進む。
【００４３】
（Ｓ２４）ＴＸ及びＰＬＸにそれぞれＴＮ（ｉ）及びＰＬＮ（ｉ）を代入する。
【００４４】
（Ｓ２５）ｉを１だけインクリメントする。
【００４５】
（Ｓ２６）タスクＴＮ（ｉ）が存在すればステップＳ２２へ戻り、そうでなければＴＸを次サイクルで実行すべきタスクとし図７の処理を終了する。
【００４６】
このような処理により、スレッド上の次サイクルにおけるタスクのうち、スリープ状態でなく優先度が最も高いタスクが次サイクル実行タスクＴＸとして決定される。タスクＴＸと同一優先度のタスクが複数存在する場合には、これらのタスクリスト中の順序（記憶装置内の配列順）により実行タスクＴＸを決定する。
【００４７】
図９は、優先度が異なる次の２つのタスクtask1()及びtask2()が実行される場合を示す。
【００４８】
0004132802.tif 000004
上記タスクは簡単化のため入力処理がない場合を示しているが、各spend_time(τ)の前又は後に入力処理を含んでもよい。spend_time(τ)の引数τの最小値が１であるので、１ｃ＝１ｕと決定される。
【００４９】
スレッドＳＬ１はtask1()のスレッドであり、時刻ｔ＝０で図１のレジスタＲＥＧ１に制御データｄｔ１が格納され、該スレッドにより時刻ｔ＝１ｃでtask2()のスレッドＳＬ２が生成される。task2()はtask1()よりも優先度の高い計算処理を実行することが求められており、task2()の優先度はtask1()のそれより高く設定されているとする。タスクリストにはスリープ状態でないtask1()及びtask2()が存在し、task1()よりtask2()の方が優先度が高いので、次サイクル実行タスクＴＸとしてtask2()が選択されて、spend_time(4)が実行される。
【００５０】
次にスレッドＳＬ２が削除され、タスクリストにはスリープ状態でないtask1()のみ存在し、次サイクル実行タスクＴＸとしてtask1()が選択されて、レジスタＲＥＧ１に制御データｄｔ２が格納され、次いでspend_time(3)が実行される。
【００５１】
図１において、周辺装置２２がレジスタＲＥＧ１の制御データを時間３ｕ毎に読み出し、この読み出し前に制御データの更新がコンピュータ２１により行われなければならないとする。
【００５２】
図９の場合、この要求が満たされないので、例えば次の１つ以上を詳細設計条件とすることにより、この要求を満たす。
【００５３】
（１）task2()の処理内容を減らす。
【００５４】
（２）task2()の実行のタイミングをずらす。
【００５５】
（３）task2()について、より高速の機械語コードを生成する。
【００５６】
（４）より高速のコンピュータ２１を用いる。
【００５７】
［第３実施形態］
図１０は、図３のステップＳ４のさらに他の処理方法を本発明の第３実施形態として示すフローチャートであり、この方法では、タスク優先度よりも割込を優先させてそのタスクを次サイクル実行タスクと決定する。図１の周辺装置は例えば、センサーを含む車のエンジンのモデルである。
【００５８】
１個の割込に対し８個の割り込み要因があり、これらが０〜７で識別され、要因ｉの割込処理がタスクＴｉで実行され、タスクＴｉがポインタＰＴＲ（ｉ）で指定されるとする。また、要因ｉの割込要求があると、割込フラグＩＦが‘１’になるとともに割込要因フラグＩＲＱ（０）〜ＩＲＱ（７）のうちＩＲＱ（ｉ）のみ‘１’になるとする。図１において、フラグＩＦ及びＩＲＱ（０）〜ＩＲＱ（７）はコンピュータ２１の内部レジスタに対応しており、周辺装置２２からコンピュータ２１への信号により該フラグが設定される。
【００５９】
（Ｓ３０）ＩＦ＝‘０’であれば図７のステップＳ１０へ進み、そうでなければステップＳ３１へ進む。
【００６０】
（Ｓ３１）ｉに初期値０を代入する。
【００６１】
（Ｓ３２）ｉ＜８であればステップＳ３３へ進み、そうでなければ、すなわちＩＲＱ（０）〜ＩＲＱ（７）のいずれも‘０’であれば図７のステップＳ１０へ進む。
【００６２】
（Ｓ３３）ＩＲ（ｉ）＝‘１’であればステップＳ３５へ進み、そうでなければステップＳ３４へ進む。
【００６３】
（Ｓ３４）ｉの値を１だけインクリメントし、ステップ３２へ戻る。
【００６４】
（Ｓ３５）ポインタＰＴＲ（ｉ）で指定されるタスクＴｉのスレッドを生成する。
【００６５】
（Ｓ３６）ＩＦ＝‘０’及びＩＲＱ（ｉ）＝‘０’として、同じ割込要求の再受付を避ける。
【００６６】
（Ｓ３７）タスクＴｉを次サイクル実行タスクＴＸと決定する。
【００６７】
図１１は、次のタスクが図１０の方法を用いて実行された場合の動作を示すタイムチャートである。
【００６８】
0004132802.tif 000005
上記タスクは簡単化のため入力処理がない場合を示しているが、各spend_time(τ)の前又は後に入力処理を含んでもよい。関数sleep(τ)は、他のタスクを実行させるため時間τだけ実行を休む処理である。上記の場合、task1()の実行中に、第２〜４サイクルの各々で割込がかかり、割込毎にtask2()が実行される。上記第２実施形態と同様に、図１において周辺装置２２がレジスタＲＥＧ１の制御データを３ｕ毎に読み出し、この読み出し前に制御データの更新がコンピュータ２１により行われなければならないとする。この要求が満たされないので、例えば次の１つ又は両方を詳細設計条件とすることにより、この要求を満たす。
【００６９】
（１）割込発生間隔を一定サイクル以上とする。
【００７０】
（２）割込処理task2()に関数sleep(τ)を含ませる、すなわち割込が発生してから所定時間経過後に割込処理を実行する。
【００７１】
なお、本発明には外にも種々の変形例が含まれる。
【００７２】
例えば１サイクルタイムを、全タスクに含まれる待ち処理時間の最小値の１／（自然数）と決定してもよい。これにより、入力信号読み取り、信号出力及び割込のタイミングを変えることができる。
【００７３】
また、上記第３実施形態では簡単化のために割込優先度が同一である場合を説明したが、異なる優先度の割込がある場合にも本発明が適用されることは勿論である。
【００７４】
さらに、モデルタスクは、１つのプロセスを複数のスレッドで実行する場合の各スレッドに対応したもののモデルも含む概念である。
【図面の簡単な説明】
【図１】  図１は、本発明の第１実施形態の概略マルチタスクソフトウェアシミュレーション方法を示す概略ブロック図である。
【図２】  図１のタスク実行制御部２３により実行されるタスクの概略説明図である。
【図３】  タスクＴｉ中の関数spend_time(τ)に対する、図１のタスク実行制御部２３の処理を示すフローチャートである。
【図４】  図３中のステップＳ４の詳細を、ラウンドロビン方式を採用した場合について示すフローチャートである。
【図５】  図４の処理説明のためのタスクリストを示す図である。
【図６】  ２つのタスクtask1()及びtask2()が図４の方法で実行される場合を示すタイムチャートである。
【図７】  図３のステップＳ４の他の処理方法を本発明の第２実施形態として示すフローチャートである。
【図８】  図７の処理説明のためのタスクリストを示す図である。
【図９】  優先度が異なる次の２つのタスクtask1()及びtask2()が図７の方法で実行される場合を示すタイムチャートである。
【図１０】  図３のステップＳ４のさらに他の処理方法を本発明の第３実施形態として示すフローチャートである。
【図１１】  主タスクtask1()と割込タスクtask2()が図１０の方法で実行される場合を示すタイムチャートである。
【図１】
0004132802.tif 000006
【図２】
0004132802.tif 000007
【図３】
0004132802.tif 000008
【図４】
0004132802.tif 000009
【図５】
0004132802.tif 000010
【図６】
0004132802.tif 000011
【図７】
0004132802.tif 000012
【図８】
0004132802.tif 000013
【図９】
0004132802.tif 000014
【図１０】
0004132802.tif 000015
【図１１】
0004132802.tif 000016