(57)【要約】【課題】汎用ＯＳ上でＲＴＯＳ処理を行わせてＲＴＯＳ用アプリケーションプログラムのデバッグを行う場合に、ＲＴＯＳのタスクスケジューリングやＲＴＯＳのメモリ管理を簡易に実現してデバッグを行うこと。【解決手段】ＲＴＯＳシミュレータプログラム２は、デバッグ対象プログラムであるＲＴＯＳ用アプリケーションプログラム１１とＲＴＯＳ処理部１２とを動作させるＲＴＯＳシミュレータスレッド１０と、ＲＴＯＳシミュレータスレッド１０が管理する静的メモリ領域４１と、を備え、ＲＴＯＳシミュレータスレッド１０は、スタック情報変更処理部１４と、コンテキスト情報保存処理部１５と、コンテキスト情報復元処理部１６と、タスク生成時コンテキスト情報保存処理部１７と、を備える。【選択図】図２
2020113244.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ対象プログラムがＲＴＯＳ用のアプリケーションプログラムであり、汎用ＯＳ上で、ＲＴＯＳ処理を汎用ＯＳ用ＲＴＯＳシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記ＲＴＯＳ処理に与えて動作させてデバッグを行うＲＴＯＳアプリケーションデバッグ装置であって、
前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムは、
前記デバッグ対象プログラムと前記ＲＴＯＳ処理とを動作させるＲＴＯＳシミュレータスレッドと、
前記ＲＴＯＳシミュレータスレッドが管理する静的メモリ領域と、
を備え、
前記ＲＴＯＳシミュレータスレッドは、
前記ＲＴＯＳシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理部と、
前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理部と、
前記コンテキスト情報保存処理部によって保存されたコンテキスト情報を前記ＲＴＯＳシミュレータスレッドに復元するコンテキスト情報復元処理部と、
前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理部と、
を備えたことを特徴とするＲＴＯＳアプリケーションデバッグ装置。
【請求項２】
前記ＲＴＯＳシミュレータスレッドは、前記ＲＴＯＳ処理から、前記デバッグ対象プログラムを実システムと同じＲＴＯＳ上のタスクとして呼び出し、当該ＲＴＯＳシミュレータスレッド上で処理することを特徴とする請求項１に記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項３】
前記静的メモリ領域は、前記汎用ＯＳ上で連続したメモリ領域であり、実システムで利用可能なメモリ空間と同じ領域サイズ、又は、前記ＲＴＯＳシミュレータスレッド上で前記ＲＴＯＳ処理及び前記デバッグ対象プログラムが正常動作するために必要な領域サイズであることを特徴とする請求項１または２に記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項４】
前記スタック情報変更処理部は、前記汎用ＯＳが前記ＲＴＯＳシミュレータスレッドに割り当てたスタック領域のスタック情報を、前記静的メモリ領域を前記ＲＴＯＳシミュレータスレッドのスタック領域とする情報に変更することを特徴とする請求項１〜３のいずれか一つに記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項５】
前記コンテキスト情報保存処理部は、コンテキスト情報保存処理の呼出時点の前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報をコンテキスト情報保存処理の呼出時点で動作している前記デバッグ対象プログラム内のタスクに対応した前記ＲＴＯＳ処理内のタスク制御情報に保存することを特徴とする請求項１〜４のいずれか一つに記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項６】
前記コンテキスト情報復元処理部は、前記ＲＴＯＳ処理内のタスク制御情報から復元対象となるコンテキスト情報を取得し、取得したコンテキスト情報を前記ＲＴＯＳシミュレータスレッドに復元することを特徴とする請求項１〜５のいずれか一つに記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項７】
前記タスク生成時コンテキスト情報保存処理部は、タスク生成時点の前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報のタスク初回起動に関連する情報を変更した後、生成したタスクに対応した前記ＲＴＯＳ処理内のタスク制御情報に保存することを特徴とする請求項１〜６のいずれか一つに記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項８】
前記タスク初回起動に関連する情報は、少なくともタスク関数の先頭アドレスと、タスク起動時のスタックベースポインタと、タスク起動時のスタックポインタとを含むことを特徴とする請求項７に記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項９】
前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムは、前記汎用ＯＳが搭載されたハードウェアに接続される周辺機器へのアクセス処理を行うデバイスドライバ機能を有し、
前記デバイスドライバ機能によるＲＴＯＳ割込処理を、前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムとは別に、前記汎用ＯＳ上で実行する汎用ＯＳ用ＲＴＯＳ割込シミュレータプログラムを備え、
前記デバイスドライバ機能は、汎用ＯＳ用ＲＴＯＳ割込シミュレータプログラムを介して前記周辺機器へのアクセス処理を行うことを特徴とする請求項１〜８のいずれか一つに記載のＲＴＯＳアプリケーションデバッグ装置。
【請求項１０】
デバッグ対象プログラムがＲＴＯＳ用のアプリケーションプログラムであり、汎用ＯＳ上で、ＲＴＯＳ処理を汎用ＯＳ用ＲＴＯＳシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記ＲＴＯＳ処理に与えて動作させてデバッグを行うＲＴＯＳアプリケーションデバッグ方法であって、
前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムは、
前記デバッグ対象プログラムと前記ＲＴＯＳ処理とを動作させるＲＴＯＳシミュレータスレッドと、
前記ＲＴＯＳシミュレータスレッドが管理する静的メモリ領域と、
を備え、
前記ＲＴＯＳシミュレータスレッドは、
前記ＲＴＯＳシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理ステップと、
前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理ステップと、
前記コンテキスト情報保存処理ステップによって保存されたコンテキスト情報を前記ＲＴＯＳシミュレータスレッドに復元するコンテキスト情報復元処理ステップと、
前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理ステップと、
を含むことを特徴とするＲＴＯＳアプリケーションデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用オペレーティングシステム（以下、ＯＳと記す）上で、リアルタイムオペレーティングシステム（以下、ＲＴＯＳと記す）処理を行わせてＲＴＯＳ用アプリケーションプログラムのデバッグを行う場合に、ＲＴＯＳのタスクスケジューリングやＲＴＯＳのメモリ管理を簡易に実現してデバッグを行うことができるＲＴＯＳアプリケーションデバッグ装置及びＲＴＯＳアプリケーションデバッグ方法に関する。
【背景技術】
【０００２】
ＲＴＯＳアプリケーションプログラムのデバッグを簡便に行うための一手段として、ＲＴＯＳ処理を汎用ＯＳ上のプログラムとして実行し、デバッグ対象となるアプリケーションプログラムをＲＴＯＳ処理に与えて実行し、汎用ＯＳの開発環境上でデバッグを行うＲＴＯＳシミュレーション方式がある。
【０００３】
ＲＴＯＳシミュレーション方式の利点は、ＲＴＯＳの実システムや、ＲＴＯＳの実システムとデバッグを行う環境とを接続するためのＩＣＥ等の専用機器や、専用の開発ツール等を必要とせず、汎用ＯＳを搭載したパーソナルコンピュータ（ＰＣ）と汎用ＯＳ上のアプリケーションプログラム開発環境上で、簡便にデバッグを行えることである。
【０００４】
特許文献１では、コントローラ用のファームウェアをリコンパイルし、汎用ＯＳ上で動作するシミュレータとして作成する。デバッグ対象となる制御プログラムは、プログラミングツール上でコンパイルを行い、実行ファイルを生成する。デバッグを行う場合、シミュレータを起動後、スケジューラが必要な個数のタスクスレッドを生成し、タスクスレッドにデバッグ対象となる制御プログラムの実行ファイルを割り当てて、シミュレーションを開始する。
【０００５】
また、特許文献２では、デバッグ対象となるアプリケーションタスクを、汎用ＯＳのスレッドとして動作、又はタスク処理スレッド上で動作させ、ＲＴＯＳと汎用ＯＳとのスレッドスケジューリングの差異をなくすため、タスク切替手段を設け、このタスク切替手段によって、ＲＴＯＳと同じタスクスケジューリングが行われるように制御している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−１９４６３２号公報
【特許文献２】特開２００２−７１４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１では、タスクスレッドが汎用ＯＳ上で動作するシミュレータプロセス内のスレッドとして生成・動作するため、個々のタスクスレッド内の制御プログラムの実行結果は、基本的にＲＴＯＳの実機コントローラと同じ内容となるが、タスクスレッド間の処理優先順位やスレッドスケジューリングは、汎用ＯＳが管理することになり、実機コントローラ上で使用するＲＴＯＳとでは、コントローラ全体の動作に差異が生じるおそれがある。
【０００８】
また、特許文献２では、本来ＲＴＯＳが備えているタスクスケジューリング処理を汎用ＯＳ用に新たに作成することになり、開発工数が増えるという課題がある。また、作成したタスク切替手段による動作が、ＲＴＯＳのタスクスケジューリングを忠実に模倣できているかの検証も必要である。
【０００９】
さらに、特許文献１，２に共通した課題は、アプリケーションタスクとして動作するスレッドで使用するスタック領域メモリが、汎用ＯＳによって自動で割り当てられる点である。通常、ＲＴＯＳ用アプリケーションタスクは、タスク生成時にタスク生成情報によって指定したサイズのスタック領域メモリをＲＴＯＳによって割り当てられ、割り当てられたスタック領域メモリを使用して動作する。指定サイズ以上のスタック領域のメモリにアクセスした場合、スタックオーバーフロー等の例外としてＲＴＯＳに検出される。しかし、アプリケーションタスクを汎用ＯＳのスレッドとして動作させた場合、スレッドが使用するスタック領域メモリは汎用ＯＳが自動で割り当てるため、ＲＴＯＳ上のタスクとして必要とするスタック領域メモリサイズの検証が行えず、汎用ＯＳ上で正常動作と確認できても、ＲＴＯＳの実機上で動作させると、スタック領域不足等の不具合が発生する場合がある。
【００１０】
本発明は、上記に鑑みてなされたものであって、汎用ＯＳ上でＲＴＯＳ処理を行わせてＲＴＯＳ用アプリケーションプログラムのデバッグを行う場合に、ＲＴＯＳのタスクスケジューリングやＲＴＯＳのメモリ管理を簡易に実現してデバッグを行うことができるＲＴＯＳアプリケーションデバッグ装置及びＲＴＯＳアプリケーションデバッグ方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するために、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、デバッグ対象プログラムがＲＴＯＳ用のアプリケーションプログラムであり、汎用ＯＳ上で、ＲＴＯＳ処理を汎用ＯＳ用ＲＴＯＳシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記ＲＴＯＳ処理に与えて動作させてデバッグを行うＲＴＯＳアプリケーションデバッグ装置であって、前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムは、前記デバッグ対象プログラムと前記ＲＴＯＳ処理とを動作させるＲＴＯＳシミュレータスレッドと、前記ＲＴＯＳシミュレータスレッドが管理する静的メモリ領域と、を備え、前記ＲＴＯＳシミュレータスレッドは、前記ＲＴＯＳシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理部と、前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理部と、前記コンテキスト情報保存処理部によって保存されたコンテキスト情報を前記ＲＴＯＳシミュレータスレッドに復元するコンテキスト情報復元処理部と、前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理部と、を備えたことを特徴とする。
【００１２】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記ＲＴＯＳシミュレータスレッドは、前記ＲＴＯＳ処理から、前記デバッグ対象プログラムを実システムと同じＲＴＯＳ上のタスクとして呼び出し、当該ＲＴＯＳシミュレータスレッド上で処理することを特徴とする。
【００１３】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記静的メモリ領域は、前記汎用ＯＳ上で連続したメモリ領域であり、実システムで利用可能なメモリ空間と同じ領域サイズ、又は、前記ＲＴＯＳシミュレータスレッド上で前記ＲＴＯＳ処理及び前記デバッグ対象プログラムが正常動作するために必要な領域サイズであることを特徴とする。
【００１４】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記スタック情報変更処理部は、前記汎用ＯＳが前記ＲＴＯＳシミュレータスレッドに割り当てたスタック領域のスタック情報を、前記静的メモリ領域を前記ＲＴＯＳシミュレータスレッドのスタック領域とする情報に変更することを特徴とする。
【００１５】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記コンテキスト情報保存処理部は、コンテキスト情報保存処理の呼出時点の前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報をコンテキスト情報保存処理の呼出時点で動作している前記デバッグ対象プログラム内のタスクに対応した前記ＲＴＯＳ処理内のタスク制御情報に保存することを特徴とする。
【００１６】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記コンテキスト情報復元処理部は、前記ＲＴＯＳ処理内のタスク制御情報から復元対象となるコンテキスト情報を取得し、取得したコンテキスト情報を前記ＲＴＯＳシミュレータスレッドに復元することを特徴とする。
【００１７】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記タスク生成時コンテキスト情報保存処理部は、タスク生成時点の前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報のタスク初回起動に関連する情報を変更した後、生成したタスクに対応した前記ＲＴＯＳ処理内のタスク制御情報に保存することを特徴とする。
【００１８】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記タスク初回起動に関連する情報は、少なくともタスク関数の先頭アドレスと、タスク起動時のスタックベースポインタと、タスク起動時のスタックポインタとを含むことを特徴とする。
【００１９】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ装置は、上記の発明において、前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムは、前記汎用ＯＳが搭載されたハードウェアに接続される周辺機器へのアクセス処理を行うデバイスドライバ機能を有し、前記デバイスドライバ機能によるＲＴＯＳ割込処理を、前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムとは別に、前記汎用ＯＳ上で実行する汎用ＯＳ用ＲＴＯＳ割込シミュレータプログラムを備え、前記デバイスドライバ機能は、汎用ＯＳ用ＲＴＯＳ割込シミュレータプログラムを介して前記周辺機器へのアクセス処理を行うことを特徴とする。
【００２０】
また、本発明にかかるＲＴＯＳアプリケーションデバッグ方法は、デバッグ対象プログラムがＲＴＯＳ用のアプリケーションプログラムであり、汎用ＯＳ上で、ＲＴＯＳ処理を汎用ＯＳ用ＲＴＯＳシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記ＲＴＯＳ処理に与えて動作させてデバッグを行うＲＴＯＳアプリケーションデバッグ方法であって、前記汎用ＯＳ用ＲＴＯＳシミュレータプログラムは、前記デバッグ対象プログラムと前記ＲＴＯＳ処理とを動作させるＲＴＯＳシミュレータスレッドと、前記ＲＴＯＳシミュレータスレッドが管理する静的メモリ領域と、を備え、前記ＲＴＯＳシミュレータスレッドは、前記ＲＴＯＳシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理ステップと、前記ＲＴＯＳシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理ステップと、前記コンテキスト情報保存処理ステップによって保存されたコンテキスト情報を前記ＲＴＯＳシミュレータスレッドに復元するコンテキスト情報復元処理ステップと、前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理ステップと、を含むことを特徴とする。
【発明の効果】
【００２１】
本発明によれば、汎用ＯＳ上でＲＴＯＳ処理を行わせてＲＴＯＳ用アプリケーションプログラムのデバッグを行う場合に、ＲＴＯＳのタスクスケジューリングやＲＴＯＳのメモリ管理を簡易に実現してデバッグを行うことができる。
【図面の簡単な説明】
【００２２】
【図１】図１は、本発明の実施の形態であるＲＴＯＳアプリケーションデバッグ装置の概要構成を示すブロック図である。
【図２】図２は、ＲＴＯＳシミュレータプログラムの構成を示すブロック図である。
【図３】図３は、ＲＴＯＳシミュレータプログラムメイン処理部によるメイン処理手順を示すフローチャートである。
【図４】図４は、スタック情報変更処理部によるスタック情報変更処理手順を示すフローチャートである。
【図５】図５は、ＲＴＯＳ起動処理手順を示すフローチャートである。
【図６】図６は、コンテキスト情報保存処理部によるコンテキスト情報保存処理手順を示すフローチャートである。
【図７】図７は、コンテキスト情報復元処理部によるコンテキスト情報復元処理手順を示すフローチャートである。
【図８】図８は、タスク生成時コンテキスト情報保存処理部によるタスク生成時コンテキスト情報保存処理手順を示すフローチャートである。
【図９】図９は、ＲＴＯＳシミュレータプログラムの起動時に、静的メモリ領域をＲＴＯＳ処理部の実システムと同様に扱えるメモリ領域として割り当てる処理を説明する説明図である。
【図１０】図１０は、ＲＴＯＳ処理部が管理するＲＴＯＳスタック領域のタスクやＲＴＯＳ資源の割当動作を説明する説明図である。
【図１１】図１１は、タスク切替が発生した場合の動作について説明する説明図である。
【図１２】図１２は、タスク生成時のタスク制御情報内のコンテキスト情報の格納内容の変移を説明する説明図である。
【図１３】図１３は、本発明の実施の形態の変形例であるＲＴＯＳアプリケーションデバッグ装置の概要構成を示すブロック図である。
【発明を実施するための形態】
【００２３】
以下、添付図面を参照してこの発明を実施するための形態について説明する。
【００２４】
＜全体構成＞
図１は、本発明の実施の形態であるＲＴＯＳアプリケーションデバッグ装置１の概要構成を示すブロック図である。図１に示すように、ＲＴＯＳアプリケーションデバッグ装置１は、ＲＴＯＳシミュレータプログラム２、汎用ＯＳ用プログラム開発環境３、汎用ＯＳ４、及びＰＣハードウェア５を有する。ＰＣハードウェア５は、パーソナルコンピュータ（ＰＣ）のハードウェアである。
【００２５】
ＲＴＯＳシミュレータプログラム２は、汎用ＯＳ用プログラム開発環境３上で、デバッグ対象プログラムとして呼び出されて動作し、又は、汎用ＯＳ用プログラム開発環境３の汎用ＯＳ用のプログラムとして動作する。
【００２６】
汎用ＯＳ４は、ＰＣハードウェア５内のＣＰＵのコンテキスト情報６を取得し、設定することができる。コンテキスト情報６の取得及び設定の処理は、汎用ＯＳのＡＰＩ関数、プログラミング言語の標準関数、又は、ＣＰＵに対応したアセンブラコードで記述した処理などが用いられるが、これらに限らず、ＲＴＯＳシミュレータプログラム２から呼び出して所望のコンテキスト情報を取得し、設定することができるものであればよい。
【００２７】
＜ＲＴＯＳシミュレータプログラムの構成＞
図２は、ＲＴＯＳシミュレータプログラム２の構成を示すブロック図である。図２に示すように、ＲＴＯＳシミュレータプログラム２は、ＲＴＯＳシミュレータスレッド１０、ＲＴＯＳシミュレータプログラムメイン処理部２０、汎用ＯＳ提供処理部３０、及び汎用ＯＳ割当メモリ領域４０を有する。
【００２８】
汎用ＯＳ割当メモリ領域４０は、静的メモリ領域４１と、図示しないその他のメモリ領域とで構成される。その他のメモリ領域は、汎用ＯＳがＲＴＯＳシミュレータプログラム２に割り当てたメモリ領域のうち、ＲＴＯＳシミュレータプログラム２のコード領域、グローバル変数領域、ヒープメモリ領域、スレッド毎のコンテキスト情報保存領域・スタック領域などで構成され、割付アドレスや領域サイズは、ＲＴＯＳシミュレータプログラム２のコンパイル・ビルド時、及びプログラム起動時に、汎用ＯＳによって決定される。
【００２９】
静的メモリ領域４１は、汎用ＯＳ割当メモリ領域４０内のグローバル変数領域に割り当てられる連続したメモリ領域である。領域サイズは、ＲＴＯＳシミュレータプログラム２のプログラムコード上で、実システムで利用可能なメモリ空間と同じ領域サイズで定義して確保する。あるいは、実システムと汎用ＯＳとで、関数呼出し等の際に使用するスタックサイズが異なる場合、スタックサイズ差を考慮し、デバッグ対象プログラムが正常動作するために必要な領域サイズで定義して確保してもよい。静的メモリ領域４１は、ＲＴＯＳシミュレータスレッド１０のみが使用可能であり、他のスレッドは使用不可とする。
【００３０】
ＲＴＯＳシミュレータスレッド１０は、ＲＴＯＳ用アプリケーションプログラム１１、タスク制御情報１３を含むＲＴＯＳ処理部１２、スタック情報変更処理部１４、コンテキスト情報保存処理部１５、コンテキスト情報復元処理部１６、及びタスク生成時コンテキスト情報保存処理部１７を有する。なお、このほかに、ＲＴＯＳシミュレータスレッド１０として必要な処理部があれば、追加してもよい。例えば、汎用ＯＳ用プログラムとして動作させる場合、ＲＴＯＳシミュレータスレッド１０の動作状況をコンソールに文字列として表示する処理部を追加してもよい。ＲＴＯＳシミュレータスレッド１０は、ＲＴＯＳシミュレータプログラム内の１つのスレッドとして動作する。
【００３１】
ＲＴＯＳ用アプリケーションプログラム１１は、デバッグ対象プログラムである。ＲＴＯＳ用アプリケーションプログラム１１は、０個以上のタスク処理を含むＲＴＯＳ上で動作するプログラムであり、実システム上で動作させるアプリケーションプログラムと同一のものでもよい。
【００３２】
ＲＴＯＳ処理部１２は、ＲＴＯＳの機能をエミュレートする処理部である。ＲＴＯＳ処理部１２は、基本的に実システムのソースコードをそのまま、もしくは実システム上と汎用ＯＳ上とで差異のある箇所に若干の修正を加えて、汎用ＯＳ用にリコンパイルして構成されたものである。
【００３３】
ＲＴＯＳ処理部１２は、ＲＴＯＳ用アプリケーションプログラム１１内の生成・動作中タスクに関する情報を、タスク制御情報１３に格納し、管理する。タスク制御情報１３のデータ構造は、基本的に実システムで動作させるＲＴＯＳと同様にコンテキスト情報を含むが、保存するコンテキスト情報は、ＣＰＵのコンテキスト情報６である。ＲＴＯＳ処理部１２は、その他、汎用ＯＳ上で動作するにあたり、必要な情報があれば追加してもよい。
【００３４】
スタック情報変更処理部１４は、ＲＴＯＳシミュレータスレッド１０のコンテキスト情報中のスタックに関する情報を変更し、ＲＴＯＳシミュレータスレッド１０のスタック領域を静的メモリ領域４１上に変更する。スタック情報変更処理部１４によるスタック情報変更処理は、ＲＴＯＳシミュレータプログラムメイン処理部２０から呼び出される。
【００３５】
コンテキスト情報中のスタックに関する情報は、スタック領域の基底アドレスを示すスタックベースポインタと、現在使用中のスタック領域のアドレスを示すスタックポインタとで構成される。なお、このほかに必要なものがあれば、追加してもよい。
【００３６】
コンテキスト情報保存処理部１５は、コンテキスト情報保存処理を呼び出した時点でのＲＴＯＳシミュレータスレッド１０のコンテキスト情報を保存するコンテキスト情報保存処理を行う処理部であり、ＲＴＯＳシミュレータスレッド１０内の１関数として呼び出される。基本的に、コンテキスト情報保存処理は、タスク切替が発生する時点で呼び出され、切替前のタスクの現時点でのコンテキスト情報を取得し、ＲＴＯＳ処理部１２のタスク制御情報１３に保存する。
【００３７】
コンテキスト情報復元処理部１６は、指定された時点のＲＴＯＳシミュレータスレッド１０のコンテキスト情報に復元するコンテキスト情報復元処理を行う処理部であり、ＲＴＯＳシミュレータスレッド１０内の１関数として呼び出される。基本的に、コンテキスト情報保存処理により、現在実行中のタスクのコンテキスト情報を保存した後、コンテキスト情報復元処理により、ＲＴＯＳ処理部１２のタスク制御情報１３から、次に実行するタスクのタスク制御情報を取得し、保存されているコンテキスト情報を参照し、ＲＴＯＳシミュレータスレッド１０のコンテキスト情報に復元する。
【００３８】
タスク生成時コンテキスト情報保存処理部１７は、タスク生成時に、コンテキスト情報の初期設定を行い、ＲＴＯＳ処理部１２のタスク制御情報１３に保存する処理を行う。タスク生成時には、ＲＴＯＳ処理部１２のタスク制御情報１３内のコンテキスト情報は不定値であるため、タスク生成時点のコンテキスト情報を初期値として設定する。さらに、タスクが初回起動した際、タスク関数の先頭から処理を開始するように、タスク関数は、ＲＴＯＳ処理部１２によって割り当てられたスタック領域を使用するように、コンテキスト情報を設定する。
【００３９】
ＲＴＯＳシミュレータプログラムメイン処理部２０は、ＲＴＯＳシミュレータプログラムが実行された際、最初に動作するメイン処理を行う。ＲＴＯＳシミュレータプログラムメイン処理部２０は、ＲＴＯＳシミュレータプログラム２内の１スレッドとして動作し、ＲＴＯＳシミュレータプログラム２の起動処理が実行された後、ＲＴＯＳシミュレータスレッド１０を生成・起動し、ＲＴＯＳシミュレータスレッド１０の処理終了待ち状態に入る。ＲＴＯＳシミュレータスレッド１０の動作に影響を与えない範囲で、ＲＴＯＳシミュレータプログラム２として必要な処理やスレッドがあれば、ＲＴＯＳシミュレータプログラムメイン処理から処理実行、スレッド生成、起動等を行ってもよい。
【００４０】
汎用ＯＳ提供処理部３０は、コンテキスト情報を取得・設定するする汎用ＯＳのＡＰＩ関数、又はプログラミング言語の標準関数を含む、汎用ＯＳ用プログラムが汎用ＯＳ上で動作するために必要な機能を提供する処理群である。ＲＴＯＳシミュレータプログラム２のコンパイル・ビルド時に、汎用ＯＳプログラム開発環境３が必要な処理を適宜、ＲＴＯＳシミュレータプログラムにリンクする。
【００４１】
＜ＲＴＯＳシミュレータプログラムメイン処理部によるメイン処理＞
次に、図３に示したフローチャートを参照して、ＲＴＯＳシミュレータプログラムメイン処理部２０によるメイン処理手順について説明する。図３に示すように、シミュレータプログラムメイン処理部２０は、まず、スタック情報変更処理部１４によるスタック情報変更処理を行う（ステップＳ１０１）。その後、無限ループのＲＴＯＳ起動処理を行う（ステップＳ１０２）。
【００４２】
＜スタック情報変更処理＞
次に、図４に示したフローチャートを参照して、ステップＳ１０１におけるスタック情報変更処理部１４によるスタック情報変更処理手順について説明する。図４に示すように、まず、スタック情報変更処理部１４は、静的メモリ領域４１の先頭アドレスを取得する（ステップＳ２０１）。静的メモリ領域４１の先頭アドレスは、ＲＴＯＳシミュレータプログラム２の起動時に汎用ＯＳが決定されるため、常に同じアドレス値が参照できるとは限らない。
【００４３】
その後、スタック情報変更処理部１４は、ＲＴＯＳシミュレータスレッド１０の初期スタックアドレスを算出する（ステップＳ２０２）。この算出は、静的メモリ領域４１の先頭アドレスに、実システムにおけるメモリ空間の０番地アドレスからのスタック領域の相対開始アドレスを足し込むことで行う。
【００４４】
その後、スタック情報変更処理部１４は、ＲＴＯＳシミュレータスレッド１０のコンテキスト情報のスタックベースポインタに、初期スタックアドレスを設定する（ステップＳ２０３）。
【００４５】
その後、スタック情報変更処理部１４は、ＲＴＯＳシミュレータスレッド１０のコンテキスト情報のスタックポインタに、初期スタックアドレスを設定する（ステップＳ２０４）。
【００４６】
その後、スタック情報変更処理部１４は、現在、ＲＴＯＳシミュレータスレッド１０のコンテキスト情報のスタックポインタが示すアドレスの領域に、初期スタックアドレスを格納して（ステップＳ２０５）、ステップＳ１０１にリターンする。
【００４７】
＜ＲＴＯＳ起動処理＞
次に、図５に示したフローチャートを参照して、ステップＳ１０２におけるＲＴＯＳ起動処理手順について説明する。図５に示すように、ＲＴＯＳシミュレータプログラムメイン処理部２０は、まず、タスク切替か、タスク生成か、切替要求なしかを判定する（ステップＳ３０１）。
【００４８】
タスク切替である場合（ステップＳ３０１，タスク切替）、コンテキスト情報保存処理部１５によるコンテキスト情報保存処理を行う（ステップＳ３０２）。その後、コンテキスト情報復元処理部１６によるコンテキスト情報復元処理を行って（ステップＳ３０３）、ステップＳ３０１に移行する。一方、タスク生成である場合（ステップＳ３０１，タスク生成）、タスク生成時コンテキスト情報保存処理部１７によるタスク生成時コンテキスト情報保存処理を行って（ステップＳ３０４）、ステップＳ３０１に移行する。また、切替要求なしの場合（ステップＳ３０１，切替要求なし）、その他のＲＴＯＳ処理を行って（ステップＳ３０５）、ステップＳ３０１に移行する。このＲＴＯＳ起動処理では、図５に示すように無限ループに入る。
【００４９】
＜コンテキスト情報保存処理＞
次に、図６に示したフローチャートを参照して、ステップＳ３０２におけるコンテキスト情報保存処理部１５によるコンテキスト情報保存処理手順について説明する。図６に示すように、コンテキスト情報保存処理部１５は、ＲＴＯＳ処理部１２のタスク制御情報１３から、現在実行中のタスクのタスク制御情報を取得する（ステップＳ４０１）。その後、汎用ＯＳのコンテキスト情報保存処理を呼び出し、ＲＴＯＳシミュレータスレッド１０の現時点でのコンテキスト情報を取得する（ステップＳ４０２）。この時に取得されるコンテキスト情報は、現在実行中のタスクのタスク関数内のコンテキスト情報であり、次回、本タスクに制御が戻り、処理が再開される際のコンテキスト情報でもある。汎用ＯＳのコンテキスト情報保存処理は、プログラミング言語標準の関数として、Ｃ言語のｓｅｔｊｍｐ関数、汎用ＯＳのＡＰＩ関数としてＷｉｎｄｏｗｓ（登録商標）系ＯＳのＧｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数などがある。
【００５０】
その後、取得したコンテキスト情報を、ステップＳ４０１で取得したタスク制御情報に格納し（ステップＳ４０４）、ステップＳ３０２にリターンする。
【００５１】
＜コンテキスト情報復元処理＞
次に、図７に示したフローチャートを参照して、ステップＳ３０３におけるコンテキスト情報復元処理部１６によるコンテキスト情報復元処理手順について説明する。図７に示すように、コンテキスト情報復元処理部１６は、ＲＴＯＳ処理部１２から、次に実行するタスクのタスク制御情報を取得する（ステップＳ５０１）。その後、次に実行するタスクのタスク制御情報に格納されたコンテキスト情報を参照し、汎用ＯＳのコンテキスト情報設定処理を呼び出し、ＲＴＯＳシミュレータスレッド１０の現時点でのコンテキスト情報に設定し（ステップＳ５０２）、ステップＳ３０３にリターンする。
【００５２】
汎用ＯＳのコンテキスト情報設定処理は、プログラミング言語標準の関数として、Ｃ言語のｌｏｎｇｊｍｐ関数、汎用ＯＳのＡＰＩ関数としてＷｉｎｄｏｗｓ（登録商標）系ＯＳのＳｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数などがある。ただし、使用可能な汎用ＯＳのコンテキスト情報設定処理は、コンテキスト情報保存処理により、ＲＴＯＳ処理部１２のタスク制御情報１３に格納されたコンテキスト情報を扱える処理に限る。例えば、ｓｅｔｊｍｐ関数によりコンテキスト情報を取得した場合は、ｌｏｎｇｊｍｐ関数を使用しなければならない。また、ＧｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数によりコンテキスト情報を取得した場合は、ＳｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数を使用しなければならない。
【００５３】
汎用ＯＳのコンテキスト情報設定処理（ステップＳ５０２）の後に、本コンテキスト情報復元処理は終了するが、実際には、汎用ＯＳのコンテキスト情報設定処理終了後は、既にＲＴＯＳシミュレータスレッド１０のコンテキスト情報に、次に実行するタスクのコンテキスト情報が復元されているため、汎用ＯＳのコンテキスト情報設定処理後は、次に実行するタスクに制御が移り、次に実行するタスクが、前回まで処理を行っていた箇所から再開される。
【００５４】
＜タスク生成時コンテキスト情報保存処理＞
次に、図８に示したフローチャートを参照して、ステップＳ３０４におけるタスク生成時コンテキスト情報保存処理部１７によるタスク生成時コンテキスト情報保存処理手順について説明する。図８に示すように、タスク生成時コンテキスト情報保存処理部１７は、ＲＴＯＳ処理部１２から、生成したタスクのタスク制御情報を取得する（ステップＳ６０１）。
【００５５】
その後、汎用ＯＳのコンテキスト情報保存処理を呼び出し、ＲＴＯＳシミュレータスレッド１１の現時点でのコンテキスト情報を取得する（ステップＳ６０２）。汎用ＯＳのコンテキスト情報保存処理は、プログラミング言語標準の関数として、Ｃ言語のｓｅｔｊｍｐ関数、汎用ＯＳのＡＰＩ関数としてＷｉｎｄｏｗｓ（登録商標）系ＯＳのＧｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数などがある。ただし、使用可能な汎用ＯＳのコンテキスト情報保存処理は、コンテキスト情報復元処理により、ＲＴＯＳ処理部１２のタスク制御情報１３に格納されたコンテキスト情報を扱える処理に限る。例えば、ｌｏｎｇｊｍｐ関数によりコンテキスト情報を設定する場合は、ｓｅｔｊｍｐ関数を使用しなければならない。また、ＳｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数によりコンテキスト情報を復元する場合は、ＧｅｔＴｈｒｅａｄＣｏｎｔｅｘｔ関数を使用しなければならない。
【００５６】
その後、取得したコンテキスト情報を、ステップＳ６０１で取得したタスク制御情報に格納する（ステップＳ６０３）。さらに、格納したコンテキスト情報内のプログラムカウンタの値を、タスク関数の先頭アドレス値に更新する（ステップＳ６０４）。
【００５７】
さらに、格納したコンテキスト情報内のスタックベースポインタの値を、タスクに割り当てられたスタック領域の基底アドレスに更新する（ステップＳ６０５）。なお、スタック領域の基底アドレスは、ＲＴＯＳ処理部１２に割り当てられたスタック領域の基底アドレスを使用してもよいし、スタック領域の基底部にアプリケーションで使用したい領域を配置したければ、その領域分を差し引いたアドレスを加味して基底アドレスとして使用してもよい。
【００５８】
その後、格納したコンテキスト情報内のスタックポインタの値を、タスクに割り当てられたスタック領域のスタック開始アドレスに更新して（ステップＳ６０６）、ステップＳ３０４にリターンする。なお、スタック開始アドレスは、ＲＴＯＳ処理部１２に割り当てられたスタック領域の基底アドレスを使用してもよいし、スタック領域の基底部にアプリケーションで使用したい領域を配置したければ、その領域分を差し引いたアドレスを加味してスタック開始アドレスとして使用してもよい。
【００５９】
＜静的メモリ領域の割当＞
次に、図９を参照して静的メモリ領域４１の割当処理について説明する。図９は、ＲＴＯＳシミュレータプログラム２の起動時に、静的メモリ領域をＲＴＯＳ処理部１２の実システムと同様に扱えるメモリ領域として割り当てる処理を説明する説明図である。図９には、ＲＴＯＳシミュレータプログラム２のメモリマップＭ１とＲＴＯＳ処理部１２が管理するメモリマップＭ２とを示している。
【００６０】
ＲＴＯＳシミュレータプログラム２のメモリマップＭ１は、汎用ＯＳ４がプログラム起動時に割り当てるため、プログラム起動後でないと、各領域の先頭アドレスは判明しない。汎用ＯＳ４によるメモリマップの割り当て後、ＲＴＯＳシミュレータプログラム２のグローバル変数領域、及びスタック領域の割り当てが完了するため、静的メモリ領域４１、スタックベースポインタが指すスタックベースアドレスＡ２、スタックポインタの指すアドレスＡ３が決定される。決定されたアドレスは、静的メモリ領域４１の場合、静的メモリ領域４１を固定長データの配列として定義しておけば、その配列の先頭アドレスとして参照できる。また、スタックベースアドレスＡ２及びスタックポインタが指すアドレスＡ３は、ＲＴＯＳシミュレータスレッド１０のコンテキスト情報から参照できる。
【００６１】
本実施の形態では、実システムのメモリ空間のサイズ及び静的メモリ領域４１のサイズを、ＲＴＯＳ処理部１２内で“0x200000Byte”、実システムのスタック領域サイズを“0x100000Byte”と定義し、静的メモリ領域４１の先頭アドレスＡ１は、汎用ＯＳ４により、“0x00E00000”に割り当てられたものとする。
【００６２】
ＲＴＯＳシミュレータプログラム２の起動後、ＲＴＯＳシミュレータプログラムメイン処理部２０が呼び出され、その中から、ＲＴＯＳシミュレータスレッド１０が起動される。ＲＴＯＳシミュレータスレッド１０は、起動時に、必要な前処理を行う。
【００６３】
スタック情報変更処理部１４によるスタック情報変更処理は、まず、静的メモリ領域４１の先頭アドレスＡ１として“0x00E00000”というアドレス値を取得する。そして、ＲＴＯＳ処理部１２が管理するメモリマップＭ２において、メモリマップＭ１の末端からＲＴＯＳシステム領域“0x1000Byte”を差し引いたアドレス“0x0001FEFFF”を、実システム上の初期スタックアドレスＡ４とし、この値に静的メモリ領域４１の先頭アドレスを足し合わせた“0x00FFEFFF”を、ＲＴＯＳシミュレータスレッド１０における初期スタックアドレスＡ４として算出する。
【００６４】
次に、算出した初期スタックアドレスＡ４の値を、ＲＴＯＳシミュレータプログラム２のコンテキスト情報のスタックベースポインタ及びスタックポインタに設定する。この結果、ＲＴＯＳシミュレータスレッド１０のスタックベースポインタの指すアドレス及びスタックポインタの指すアドレスは、静的メモリ領域４１内のアドレスを指す。
【００６５】
次に、スタックにスタックベースアドレス値をプッシュ（ＰＵＳＨ）することで、スタックポインタの指すアドレスは、１アドレスデータ分前のアドレスを指す。
【００６６】
次に、ＲＴＯＳ処理部１２を起動するが、このＲＴＯＳ処理部１２が使用するＲＴＯＳスタック領域５１は、スタックポインタの指すアドレスから使用を開始し、ＲＴＯＳスタック領域５１全体を使用することになる。
【００６７】
これにより、ＲＴＯＳシミュレータプログラム２の起動時に、静的メモリ領域４１をＲＴＯＳ処理部１２で実システムと同様に扱えるメモリ領域として割り当てることができる。また、静的メモリ領域４１の管理は、ＲＴＯＳ処理部１２が行うため、ＲＴＯＳ処理部１２内で定義したスタック領域サイズの範囲内で動作させることができ、実システムと同様にスタックオーバーフロー等のメモリ以上を、ＲＴＯＳ処理部１２で検出することができる。
【００６８】
＜ＲＴＯＳスタック領域の割当＞
次に、図１０を参照してＲＴＯＳスタック領域５１の割当処理について説明する。すなわち、タスク生成時やＲＴＯＳ資源生成時に、必要なメモリ領域を、ＲＴＯＳ処理部１２に割り当てた静的メモリ領域４１上のスタック領域から割り当てる場合の動作について説明する。図１０は、ＲＴＯＳ処理部１２が管理するＲＴＯＳスタック領域のタスクやＲＴＯＳ資源の割当動作を説明する説明図である。
【００６９】
ＲＴＯＳ処理部１２は、タスクのスタック領域やセマフォ・メモリプール等のＲＴＯＳ資源に割り当てるため、ＲＴＯＳスタック領域のメモリ管理を行う処理を保有する。例えば、図１０（１）に示すように、起動時に割り当てられたＲＴＯＳスタック領域５１全体あるいは一部を、Ｎ個の固定サイズのメモリブロックに分割し、図示しない分割したメモリブロックを管理するための情報を生成し、要求のあったタスクやＲＴＯＳ資源にメモリブロック単位でＲＴＯＳスタック領域５１を割り当てる。
【００７０】
ここで、デバッグ対象プログラムからタスクＡの生成要求が行われた場合、ＲＴＯＳ処理部１２は、要求されたサイズに応じて必要なメモリブロックをタスクＡに割り当てる。図１０（２）では、２つ分のメモリブロックのサイズが要求されたものとして、２つの連続したメモリブロック（メモリブロック「１」，「２」）がタスクＡに割り当てられる。
【００７１】
ここで、デバッグ対象プログラムからメモリプールＣの生成要求が行われた場合、ＲＴＯＳ処理部１２は、要求されたサイズに応じて必要なメモリブロックをメモリプールＣに割り当てる。図１０（３）では、１つ分のメモリブロックのサイズが要求されたものとして、単一のメモリブロック（メモリブロック「４」）が、メモリプールＣに割り当てられる。
【００７２】
これらの動作は、ＲＴＯＳ処理部１２が元から保有する機能が動作した結果であり、本実施の形態のＲＴＯＳアプリケーションデバッグ装置１上の静的メモリ領域４１であっても、実システム上であっても、全く同じ動作をする。
【００７３】
これにより、タスク生成時やＲＴＯＳ資源生成に、実システムと同様の方式で、静的メモリ領域４１上のＲＴＯＳスタック領域５１からタスクやＲＴＯＳ資源にメモリ領域が割り当てられる。
【００７４】
＜タスクの切替処理＞
次に、図１１を参照してタスクＡからタスクＢへのタスク切替が発生した場合の動作について説明する。図１１は、タスクＡからタスクＢへのタスク切替が発生した場合の動作について説明する説明図である。
【００７５】
図１１に示すように、ＲＴＯＳ用アプリケーションプログラム１１内でタスクＡが動作中に、何らかのタスク切替要因が発生すると、ＲＴＯＳ処理部１２は、タスク切替要因を受け付け、タスクＡの動作を一時中断する。
【００７６】
その後、ＲＴＯＳ処理部１２は、コンテキスト情報保存処理を呼び出し、汎用ＯＳ４のコンテキスト情報取得処理を経由して、タスクＡの動作中断時点のＣＰＵのコンテキスト情報を取得し、タスクＡのタスク制御情報に、取得したコンテキスト情報を格納する。
【００７７】
その後、ＲＴＯＳ処理部１２は、実行中タスクのタスク制御情報を、タスクＡからタスクＢのタスク制御情報に切り替える。その後、ＲＴＯＳ処理部１２は、コンテキスト情報復元処理を呼び出し、タスクＢのタスク制御情報から、前回タスク切替前に一時中断し、保存したタスクＢのコンテキスト情報を取得し、汎用ＯＳのコンテキスト情報設定処理を経由して、ＣＰＵのコンテキスト情報に設定する。
【００７８】
次に、コンテキスト情報復元処理から復帰した後、ＣＰＵのコンテキスト情報は、タスクＢの前回タスク切替前に一時中断し、保存したコンテキスト情報に復元されているため、タスク切替が反映され、ＲＴＯＳ用アプリケーションプログラム１１内では、タスクＢが一時中断した処理から処理を再開する。
【００７９】
これにより、実システムと同様の方式で、ＲＴＯＳシミュレータスレッド１０内でタスクＡからタスクＢへのタスク切替が実行される。
【００８０】
＜タスク生成後のタスク初回起動時の動作＞
次に、図１２を参照してタスク生成後のタスク初回起動時の動作について説明する。なお、汎用ＯＳのコンテキスト情報取得の関数としてｓｅｔｊｍｐ関数を使用する場合について説明する。図１２は、タスク生成時のタスク制御情報内のコンテキスト情報の格納内容の変移を説明する説明図である。
【００８１】
ＲＴＯＳのタスク生成システムコールを呼び出して、図１２（１）に示すように、ＲＴＯＳ処理部１２のタスク制御情報に、タスクのコンテキスト情報を格納する領域が確保される。この時点では、タスク制御情報のコンテキスト情報の内容は不定値となる。
【００８２】
その後、タスク生成システムコールは、タスク生成時コンテキスト情報保存処理を呼び出す。タスク生成時コンテキスト情報保存処理は、ｓｅｔｊｍｐ関数を呼び出し、ｓｅｔｊｍｐ関数は、図１２（２）に示す自身が呼び出された時点でのコンテキスト情報を、タスク制御情報に格納する。
【００８３】
その後、タスク生成時コンテキスト情報保存処理は、コンテキスト情報の中で、タスク初回起動するために必要な情報を変更する。図１２（３）は、変更後のコンテキスト情報の内容を示している。すなわち、スタックベースポインタＥＢＰに、タスク初回起動時のスタックベースアドレスが格納される。また、スタックポインタＥＳＰに、タスク初回起動時のスタック領域のアドレス値が格納される。さらに、プログラムカウンタＥＩＰに、タスク関数の先頭アドレス値が格納される。
【００８４】
この時点で、タスク切替が発生した際、生成したタスクが初回起動するために必要なコンテキスト情報が、タスク制御情報内に全て揃った状態となっている。この後、タスク切替が発生しても、このタスクに制御が移った場合、格納されたタスク関数の先頭アドレスから処理が開始されることになる。
【００８５】
これにより、タスク生成時に、タスク生成時点のコンテキスト情報を取得し、プログラムカウンタ等のタスク初回起動に必要な情報に設定してから、タスク制御情報のコンテキスト情報を保存するため、タスク生成後のタスク切替発生により初めて呼び出される場合でも、正常にタスクが起動される。
【００８６】
本実施の形態では、ＯＳシミュレータプロセス起動時に、ＯＳシミュレータスレッドのスタック情報を実システムのハードウェアと同等サイズの静的メモリ領域４１に変更する。また、デバッグ対象プログラムのタスクの切替時に、現在のＯＳシミュレータスレッドのコンテキスト情報を現在処理中タスクのコンテキスト情報として保存した後、次に実行するタスクのコンテキスト情報へと復元する。さらに、タスク生成時にコンテキスト情報にタスク関数の先頭アドレスや初期スタック領域情報を設定する。これにより、デバッグ対象プログラムとＲＴＯＳ処理とを、実システムと同じスタック領域メモリを割り当てられた単一のスレッド上で起動・動作させることが可能となる。この結果、汎用ＯＳのメモリ割付及びスレッドスケジューリングの影響を受けずに、ＯＳシミュレータプロセスのＯＳシミュレータスレッド内のみで、実システムのハードウェア上と全く同じ処理手順・メモリ割付でデバッグ対象プログラムを起動・動作させてのデバッグを行うことができる。
【００８７】
＜変形例＞
ところで、汎用ＯＳ４が搭載されたＰＣハードウェア５に接続される周辺機器を接続する場合、ＵＳＢ通信規格やＲＳ２３２Ｃ通信規格などの各種通信規格のデバイスドライバ機能を用いて、各種通信規格の周辺機器接続ハードウェア１００を介して周辺機器へのアクセス処理が行われる。一般に、デバイスドライバ機能は、ＲＴＯＳ用アプリケーションプログラム１１に付加される機能であり、このデバイスドライバ機能を付加する場合、デバイスドライバ機能は別個に開発されている。したがって、この別個に開発されたデバイスドライバ機能を、実機のＲＴＯＳ上で動作させる場合、再開発（ソースコードの修正）が必要となる。そこで、本変形例では、ＲＴＯＳ用アプリケーションプログラム１１にデバイスドライバ機能を組み込んでデバッグできるようにしている。
【００８８】
図１３は、本発明の実施の形態の変形例であるＲＴＯＳアプリケーションデバッグ装置１の概要構成を示すブロック図である。図１３に示すように、本変形例のＲＴＯＳアプリケーションデバッグ装置１では、ＲＴＯＳ用アプリケーションプログラム１１内にデバイスドライバ機能１１１が組み込まれ、割込ベクタテーブル１１３には、デバイスドライバ応答割込関数１１４が予め設けられている。そして、デバイスドライバ機能１１１によるＲＴＯＳ割込処理を、汎用ＯＳ用ＲＴＯＳシミュレータプログラム２とは別であって、汎用ＯＳ用ＲＴＯＳシミュレータプログラム２と同様に汎用ＯＳ４上で動作する汎用ＯＳ用ＲＴＯＳ割込シミュレータプログラム１２０を新たに設けている。なお、図１３では、説明の都合上、タスク制御情報１３、スタック情報変更処理部１４、コンテキスト情報保存処理部１５、コンテキスト情報復元処理部１６及びタスク生成時コンテキスト情報保存処理部１７を削除している。
【００８９】
ＲＴＯＳシミュレータプログラム２は、デバイスドライバ機能１１１の実行時における割込シミュレータプログラム１２０との接続処理を行う割込受付処理部１０１を新たに設けている。一方、割込シミュレータプログラム１２０は、デバイスドライバ機能１１１によるアクセス要求を受け付ける要求受付処理部１０２、要求受付処理部１０２からのアクセス要求を受けて、ＵＳＢ通信規格やＲＳ２３２Ｃなどの周辺機器接続ハードウェア１００へのアクセス要求に対する応答処理を行う要求応答処理部１０３、及び、汎用ＯＳ提供処理部３０と同様な汎用ＯＳ提供処理部１３０を有する。
【００９０】
＜デバイスドライバ機能によるアクセス動作＞
ここで、図１３を参照して、デバイスドライバ機能１１１による周辺機器接続ハードウェア１００へのアクセス動作について説明する。図１３に示すように、まず、デバイスドライバ機能１１１は、周辺機器接続ハードウェア１００に対する、データ送信やデータ受信などのアクセス処理を要求受付処理部１０２に要求する（ステップＳ１）。
【００９１】
要求受付処理部１０２は、デバイスドライバ機能１１１からのアクセス処理の要求を受け付けると、要求応答処理部１０３に対して、周辺機器接続ハードウェア１００に対するアクセス処理を依頼する（ステップＳ２）。このアクセス処理の依頼を受けた要求応答処理部１０３は、汎用ＯＳ提供処理部１３０を介して周辺機器接続ハードウェア１００に対するアクセス処理を行う（ステップＳ３）。そして、要求応答処理部１０３は、アクセス処理結果の応答を割込受付処理部１０１に通知する（ステップＳ４）。
【００９２】
アクセス処理結果の応答を受けた割込受付処理部１０１は、割込ベクタテーブル１１３内のデバイスドライバ応答割込関数１１４を参照して（ステップＳ５）、このデバイスドライバ応答割込関数１１４を実行してアクセス処理結果をデバイスドライバ機能１１１に通知し（ステップＳ６）、本処理を終了する。
【００９３】
本変形例では、ＲＴＯＳシミュレータプログラム２とは別個に、割込シミュレータプログラム１２０を設けているので、デバイスドライバ機能の実行時においてＲＴＯＳシミュレータプログラム２のＲＴＯＳ処理動作に影響を与えることなくデバイスドライバ機能のデバッグを行うことができる。また、デバイスドライバ機能１１１は、ＲＴＯＳ用アプリケーションプログラム１１に後程、付加するのではなく、予めＲＴＯＳ標準で、ＲＴＯＳ用アプリケーションプログラム１１に組み込まれているので、ＲＴＯＳ用アプリケーションプログラム１１のデバッグと同時にデバッグを行うことができ、開発工数を削減することができる。さらに、デバイスドライバ機能１１１は、ＲＴＯＳ標準であるため、実機で動作させるために、ＲＴＯＳアプリケーションのソースコードを修正することなく、実機用コンパイラでコンパイルのみを実施すればよい。
【００９４】
また、上記の実施の形態及び変形例で図示した各構成は機能概略的なものであり、必ずしも物理的に図示の構成をされていることを要しない。すなわち、各装置及び構成要素の分散・統合の形態は図示のものに限られず、その全部又は一部を各種の使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【符号の説明】
【００９５】
１  アプリケーションデバッグ装置
２  ＲＴＯＳシミュレータプログラム
３  汎用ＯＳ用プログラム開発環境
４  汎用ＯＳ
５  ＰＣハードウェア
６  コンテキスト情報
１０  ＲＴＯＳシミュレータスレッド
１１  ＲＴＯＳ用アプリケーションプログラム
１２  ＲＴＯＳ処理部
１３  タスク制御情報
１４  スタック情報変更処理部
１５  コンテキスト情報保存処理部
１６  コンテキスト情報復元処理部
１７  タスク生成時コンテキスト情報保存処理部
２０  ＲＴＯＳシミュレータプログラムメイン処理部
３０，１３０  汎用ＯＳ提供処理部
４０  汎用ＯＳ割当メモリ領域
４１  静的メモリ領域
５１  スタック領域
１００  周辺機器接続ハードウェア
１０１  割込受付処理部
１０２  要求受付処理部
１０３  要求応答処理部
１１１  デバイスドライバ機能
１１３  割込ベクタテーブル
１１４  デバイスドライバ応答割込関数
１２０  割込シミュレータプログラム
Ａ，Ｂ  タスク
Ａ１  先頭アドレス
Ａ２  スタックベースアドレス
Ａ３  アドレス
Ａ４  初期スタックアドレス
Ｃ  メモリプール
Ｍ１，Ｍ２  メモリマップ
【図１】
2020113244.tif 000003
【図２】
2020113244.tif 000004
【図３】
2020113244.tif 000005
【図４】
2020113244.tif 000006
【図５】
2020113244.tif 000007
【図６】
2020113244.tif 000008
【図７】
2020113244.tif 000009
【図８】
2020113244.tif 000010
【図９】
2020113244.tif 000011
【図１０】
2020113244.tif 000012
【図１１】
2020113244.tif 000013
【図１２】
2020113244.tif 000014
【図１３】
2020113244.tif 000015