JP2020113244A - Rtosアプリケーションデバッグ装置及びrtosアプリケーションデバッグ方法 - Google Patents
Rtosアプリケーションデバッグ装置及びrtosアプリケーションデバッグ方法 Download PDFInfo
- Publication number
- JP2020113244A JP2020113244A JP2019148032A JP2019148032A JP2020113244A JP 2020113244 A JP2020113244 A JP 2020113244A JP 2019148032 A JP2019148032 A JP 2019148032A JP 2019148032 A JP2019148032 A JP 2019148032A JP 2020113244 A JP2020113244 A JP 2020113244A
- Authority
- JP
- Japan
- Prior art keywords
- rtos
- context information
- task
- simulator
- processing unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】汎用OS上でRTOS処理を行わせてRTOS用アプリケーションプログラムのデバッグを行う場合に、RTOSのタスクスケジューリングやRTOSのメモリ管理を簡易に実現してデバッグを行うこと。【解決手段】RTOSシミュレータプログラム2は、デバッグ対象プログラムであるRTOS用アプリケーションプログラム11とRTOS処理部12とを動作させるRTOSシミュレータスレッド10と、RTOSシミュレータスレッド10が管理する静的メモリ領域41と、を備え、RTOSシミュレータスレッド10は、スタック情報変更処理部14と、コンテキスト情報保存処理部15と、コンテキスト情報復元処理部16と、タスク生成時コンテキスト情報保存処理部17と、を備える。【選択図】図2
Description
本発明は、汎用オペレーティングシステム(以下、OSと記す)上で、リアルタイムオペレーティングシステム(以下、RTOSと記す)処理を行わせてRTOS用アプリケーションプログラムのデバッグを行う場合に、RTOSのタスクスケジューリングやRTOSのメモリ管理を簡易に実現してデバッグを行うことができるRTOSアプリケーションデバッグ装置及びRTOSアプリケーションデバッグ方法に関する。
RTOSアプリケーションプログラムのデバッグを簡便に行うための一手段として、RTOS処理を汎用OS上のプログラムとして実行し、デバッグ対象となるアプリケーションプログラムをRTOS処理に与えて実行し、汎用OSの開発環境上でデバッグを行うRTOSシミュレーション方式がある。
RTOSシミュレーション方式の利点は、RTOSの実システムや、RTOSの実システムとデバッグを行う環境とを接続するためのICE等の専用機器や、専用の開発ツール等を必要とせず、汎用OSを搭載したパーソナルコンピュータ(PC)と汎用OS上のアプリケーションプログラム開発環境上で、簡便にデバッグを行えることである。
特許文献1では、コントローラ用のファームウェアをリコンパイルし、汎用OS上で動作するシミュレータとして作成する。デバッグ対象となる制御プログラムは、プログラミングツール上でコンパイルを行い、実行ファイルを生成する。デバッグを行う場合、シミュレータを起動後、スケジューラが必要な個数のタスクスレッドを生成し、タスクスレッドにデバッグ対象となる制御プログラムの実行ファイルを割り当てて、シミュレーションを開始する。
また、特許文献2では、デバッグ対象となるアプリケーションタスクを、汎用OSのスレッドとして動作、又はタスク処理スレッド上で動作させ、RTOSと汎用OSとのスレッドスケジューリングの差異をなくすため、タスク切替手段を設け、このタスク切替手段によって、RTOSと同じタスクスケジューリングが行われるように制御している。
しかしながら、特許文献1では、タスクスレッドが汎用OS上で動作するシミュレータプロセス内のスレッドとして生成・動作するため、個々のタスクスレッド内の制御プログラムの実行結果は、基本的にRTOSの実機コントローラと同じ内容となるが、タスクスレッド間の処理優先順位やスレッドスケジューリングは、汎用OSが管理することになり、実機コントローラ上で使用するRTOSとでは、コントローラ全体の動作に差異が生じるおそれがある。
また、特許文献2では、本来RTOSが備えているタスクスケジューリング処理を汎用OS用に新たに作成することになり、開発工数が増えるという課題がある。また、作成したタスク切替手段による動作が、RTOSのタスクスケジューリングを忠実に模倣できているかの検証も必要である。
さらに、特許文献1,2に共通した課題は、アプリケーションタスクとして動作するスレッドで使用するスタック領域メモリが、汎用OSによって自動で割り当てられる点である。通常、RTOS用アプリケーションタスクは、タスク生成時にタスク生成情報によって指定したサイズのスタック領域メモリをRTOSによって割り当てられ、割り当てられたスタック領域メモリを使用して動作する。指定サイズ以上のスタック領域のメモリにアクセスした場合、スタックオーバーフロー等の例外としてRTOSに検出される。しかし、アプリケーションタスクを汎用OSのスレッドとして動作させた場合、スレッドが使用するスタック領域メモリは汎用OSが自動で割り当てるため、RTOS上のタスクとして必要とするスタック領域メモリサイズの検証が行えず、汎用OS上で正常動作と確認できても、RTOSの実機上で動作させると、スタック領域不足等の不具合が発生する場合がある。
本発明は、上記に鑑みてなされたものであって、汎用OS上でRTOS処理を行わせてRTOS用アプリケーションプログラムのデバッグを行う場合に、RTOSのタスクスケジューリングやRTOSのメモリ管理を簡易に実現してデバッグを行うことができるRTOSアプリケーションデバッグ装置及びRTOSアプリケーションデバッグ方法を提供することを目的とする。
上述した課題を解決し、目的を達成するために、本発明にかかるRTOSアプリケーションデバッグ装置は、デバッグ対象プログラムがRTOS用のアプリケーションプログラムであり、汎用OS上で、RTOS処理を汎用OS用RTOSシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記RTOS処理に与えて動作させてデバッグを行うRTOSアプリケーションデバッグ装置であって、前記汎用OS用RTOSシミュレータプログラムは、前記デバッグ対象プログラムと前記RTOS処理とを動作させるRTOSシミュレータスレッドと、前記RTOSシミュレータスレッドが管理する静的メモリ領域と、を備え、前記RTOSシミュレータスレッドは、前記RTOSシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理部と、前記RTOSシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理部と、前記コンテキスト情報保存処理部によって保存されたコンテキスト情報を前記RTOSシミュレータスレッドに復元するコンテキスト情報復元処理部と、前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理部と、を備えたことを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記RTOSシミュレータスレッドは、前記RTOS処理から、前記デバッグ対象プログラムを実システムと同じRTOS上のタスクとして呼び出し、当該RTOSシミュレータスレッド上で処理することを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記静的メモリ領域は、前記汎用OS上で連続したメモリ領域であり、実システムで利用可能なメモリ空間と同じ領域サイズ、又は、前記RTOSシミュレータスレッド上で前記RTOS処理及び前記デバッグ対象プログラムが正常動作するために必要な領域サイズであることを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記スタック情報変更処理部は、前記汎用OSが前記RTOSシミュレータスレッドに割り当てたスタック領域のスタック情報を、前記静的メモリ領域を前記RTOSシミュレータスレッドのスタック領域とする情報に変更することを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記コンテキスト情報保存処理部は、コンテキスト情報保存処理の呼出時点の前記RTOSシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報をコンテキスト情報保存処理の呼出時点で動作している前記デバッグ対象プログラム内のタスクに対応した前記RTOS処理内のタスク制御情報に保存することを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記コンテキスト情報復元処理部は、前記RTOS処理内のタスク制御情報から復元対象となるコンテキスト情報を取得し、取得したコンテキスト情報を前記RTOSシミュレータスレッドに復元することを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記タスク生成時コンテキスト情報保存処理部は、タスク生成時点の前記RTOSシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報のタスク初回起動に関連する情報を変更した後、生成したタスクに対応した前記RTOS処理内のタスク制御情報に保存することを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記タスク初回起動に関連する情報は、少なくともタスク関数の先頭アドレスと、タスク起動時のスタックベースポインタと、タスク起動時のスタックポインタとを含むことを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ装置は、上記の発明において、前記汎用OS用RTOSシミュレータプログラムは、前記汎用OSが搭載されたハードウェアに接続される周辺機器へのアクセス処理を行うデバイスドライバ機能を有し、前記デバイスドライバ機能によるRTOS割込処理を、前記汎用OS用RTOSシミュレータプログラムとは別に、前記汎用OS上で実行する汎用OS用RTOS割込シミュレータプログラムを備え、前記デバイスドライバ機能は、汎用OS用RTOS割込シミュレータプログラムを介して前記周辺機器へのアクセス処理を行うことを特徴とする。
また、本発明にかかるRTOSアプリケーションデバッグ方法は、デバッグ対象プログラムがRTOS用のアプリケーションプログラムであり、汎用OS上で、RTOS処理を汎用OS用RTOSシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記RTOS処理に与えて動作させてデバッグを行うRTOSアプリケーションデバッグ方法であって、前記汎用OS用RTOSシミュレータプログラムは、前記デバッグ対象プログラムと前記RTOS処理とを動作させるRTOSシミュレータスレッドと、前記RTOSシミュレータスレッドが管理する静的メモリ領域と、を備え、前記RTOSシミュレータスレッドは、前記RTOSシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理ステップと、前記RTOSシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理ステップと、前記コンテキスト情報保存処理ステップによって保存されたコンテキスト情報を前記RTOSシミュレータスレッドに復元するコンテキスト情報復元処理ステップと、前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理ステップと、を含むことを特徴とする。
本発明によれば、汎用OS上でRTOS処理を行わせてRTOS用アプリケーションプログラムのデバッグを行う場合に、RTOSのタスクスケジューリングやRTOSのメモリ管理を簡易に実現してデバッグを行うことができる。
以下、添付図面を参照してこの発明を実施するための形態について説明する。
<全体構成>
図1は、本発明の実施の形態であるRTOSアプリケーションデバッグ装置1の概要構成を示すブロック図である。図1に示すように、RTOSアプリケーションデバッグ装置1は、RTOSシミュレータプログラム2、汎用OS用プログラム開発環境3、汎用OS4、及びPCハードウェア5を有する。PCハードウェア5は、パーソナルコンピュータ(PC)のハードウェアである。
図1は、本発明の実施の形態であるRTOSアプリケーションデバッグ装置1の概要構成を示すブロック図である。図1に示すように、RTOSアプリケーションデバッグ装置1は、RTOSシミュレータプログラム2、汎用OS用プログラム開発環境3、汎用OS4、及びPCハードウェア5を有する。PCハードウェア5は、パーソナルコンピュータ(PC)のハードウェアである。
RTOSシミュレータプログラム2は、汎用OS用プログラム開発環境3上で、デバッグ対象プログラムとして呼び出されて動作し、又は、汎用OS用プログラム開発環境3の汎用OS用のプログラムとして動作する。
汎用OS4は、PCハードウェア5内のCPUのコンテキスト情報6を取得し、設定することができる。コンテキスト情報6の取得及び設定の処理は、汎用OSのAPI関数、プログラミング言語の標準関数、又は、CPUに対応したアセンブラコードで記述した処理などが用いられるが、これらに限らず、RTOSシミュレータプログラム2から呼び出して所望のコンテキスト情報を取得し、設定することができるものであればよい。
<RTOSシミュレータプログラムの構成>
図2は、RTOSシミュレータプログラム2の構成を示すブロック図である。図2に示すように、RTOSシミュレータプログラム2は、RTOSシミュレータスレッド10、RTOSシミュレータプログラムメイン処理部20、汎用OS提供処理部30、及び汎用OS割当メモリ領域40を有する。
図2は、RTOSシミュレータプログラム2の構成を示すブロック図である。図2に示すように、RTOSシミュレータプログラム2は、RTOSシミュレータスレッド10、RTOSシミュレータプログラムメイン処理部20、汎用OS提供処理部30、及び汎用OS割当メモリ領域40を有する。
汎用OS割当メモリ領域40は、静的メモリ領域41と、図示しないその他のメモリ領域とで構成される。その他のメモリ領域は、汎用OSがRTOSシミュレータプログラム2に割り当てたメモリ領域のうち、RTOSシミュレータプログラム2のコード領域、グローバル変数領域、ヒープメモリ領域、スレッド毎のコンテキスト情報保存領域・スタック領域などで構成され、割付アドレスや領域サイズは、RTOSシミュレータプログラム2のコンパイル・ビルド時、及びプログラム起動時に、汎用OSによって決定される。
静的メモリ領域41は、汎用OS割当メモリ領域40内のグローバル変数領域に割り当てられる連続したメモリ領域である。領域サイズは、RTOSシミュレータプログラム2のプログラムコード上で、実システムで利用可能なメモリ空間と同じ領域サイズで定義して確保する。あるいは、実システムと汎用OSとで、関数呼出し等の際に使用するスタックサイズが異なる場合、スタックサイズ差を考慮し、デバッグ対象プログラムが正常動作するために必要な領域サイズで定義して確保してもよい。静的メモリ領域41は、RTOSシミュレータスレッド10のみが使用可能であり、他のスレッドは使用不可とする。
RTOSシミュレータスレッド10は、RTOS用アプリケーションプログラム11、タスク制御情報13を含むRTOS処理部12、スタック情報変更処理部14、コンテキスト情報保存処理部15、コンテキスト情報復元処理部16、及びタスク生成時コンテキスト情報保存処理部17を有する。なお、このほかに、RTOSシミュレータスレッド10として必要な処理部があれば、追加してもよい。例えば、汎用OS用プログラムとして動作させる場合、RTOSシミュレータスレッド10の動作状況をコンソールに文字列として表示する処理部を追加してもよい。RTOSシミュレータスレッド10は、RTOSシミュレータプログラム内の1つのスレッドとして動作する。
RTOS用アプリケーションプログラム11は、デバッグ対象プログラムである。RTOS用アプリケーションプログラム11は、0個以上のタスク処理を含むRTOS上で動作するプログラムであり、実システム上で動作させるアプリケーションプログラムと同一のものでもよい。
RTOS処理部12は、RTOSの機能をエミュレートする処理部である。RTOS処理部12は、基本的に実システムのソースコードをそのまま、もしくは実システム上と汎用OS上とで差異のある箇所に若干の修正を加えて、汎用OS用にリコンパイルして構成されたものである。
RTOS処理部12は、RTOS用アプリケーションプログラム11内の生成・動作中タスクに関する情報を、タスク制御情報13に格納し、管理する。タスク制御情報13のデータ構造は、基本的に実システムで動作させるRTOSと同様にコンテキスト情報を含むが、保存するコンテキスト情報は、CPUのコンテキスト情報6である。RTOS処理部12は、その他、汎用OS上で動作するにあたり、必要な情報があれば追加してもよい。
スタック情報変更処理部14は、RTOSシミュレータスレッド10のコンテキスト情報中のスタックに関する情報を変更し、RTOSシミュレータスレッド10のスタック領域を静的メモリ領域41上に変更する。スタック情報変更処理部14によるスタック情報変更処理は、RTOSシミュレータプログラムメイン処理部20から呼び出される。
コンテキスト情報中のスタックに関する情報は、スタック領域の基底アドレスを示すスタックベースポインタと、現在使用中のスタック領域のアドレスを示すスタックポインタとで構成される。なお、このほかに必要なものがあれば、追加してもよい。
コンテキスト情報保存処理部15は、コンテキスト情報保存処理を呼び出した時点でのRTOSシミュレータスレッド10のコンテキスト情報を保存するコンテキスト情報保存処理を行う処理部であり、RTOSシミュレータスレッド10内の1関数として呼び出される。基本的に、コンテキスト情報保存処理は、タスク切替が発生する時点で呼び出され、切替前のタスクの現時点でのコンテキスト情報を取得し、RTOS処理部12のタスク制御情報13に保存する。
コンテキスト情報復元処理部16は、指定された時点のRTOSシミュレータスレッド10のコンテキスト情報に復元するコンテキスト情報復元処理を行う処理部であり、RTOSシミュレータスレッド10内の1関数として呼び出される。基本的に、コンテキスト情報保存処理により、現在実行中のタスクのコンテキスト情報を保存した後、コンテキスト情報復元処理により、RTOS処理部12のタスク制御情報13から、次に実行するタスクのタスク制御情報を取得し、保存されているコンテキスト情報を参照し、RTOSシミュレータスレッド10のコンテキスト情報に復元する。
タスク生成時コンテキスト情報保存処理部17は、タスク生成時に、コンテキスト情報の初期設定を行い、RTOS処理部12のタスク制御情報13に保存する処理を行う。タスク生成時には、RTOS処理部12のタスク制御情報13内のコンテキスト情報は不定値であるため、タスク生成時点のコンテキスト情報を初期値として設定する。さらに、タスクが初回起動した際、タスク関数の先頭から処理を開始するように、タスク関数は、RTOS処理部12によって割り当てられたスタック領域を使用するように、コンテキスト情報を設定する。
RTOSシミュレータプログラムメイン処理部20は、RTOSシミュレータプログラムが実行された際、最初に動作するメイン処理を行う。RTOSシミュレータプログラムメイン処理部20は、RTOSシミュレータプログラム2内の1スレッドとして動作し、RTOSシミュレータプログラム2の起動処理が実行された後、RTOSシミュレータスレッド10を生成・起動し、RTOSシミュレータスレッド10の処理終了待ち状態に入る。RTOSシミュレータスレッド10の動作に影響を与えない範囲で、RTOSシミュレータプログラム2として必要な処理やスレッドがあれば、RTOSシミュレータプログラムメイン処理から処理実行、スレッド生成、起動等を行ってもよい。
汎用OS提供処理部30は、コンテキスト情報を取得・設定するする汎用OSのAPI関数、又はプログラミング言語の標準関数を含む、汎用OS用プログラムが汎用OS上で動作するために必要な機能を提供する処理群である。RTOSシミュレータプログラム2のコンパイル・ビルド時に、汎用OSプログラム開発環境3が必要な処理を適宜、RTOSシミュレータプログラムにリンクする。
<RTOSシミュレータプログラムメイン処理部によるメイン処理>
次に、図3に示したフローチャートを参照して、RTOSシミュレータプログラムメイン処理部20によるメイン処理手順について説明する。図3に示すように、シミュレータプログラムメイン処理部20は、まず、スタック情報変更処理部14によるスタック情報変更処理を行う(ステップS101)。その後、無限ループのRTOS起動処理を行う(ステップS102)。
次に、図3に示したフローチャートを参照して、RTOSシミュレータプログラムメイン処理部20によるメイン処理手順について説明する。図3に示すように、シミュレータプログラムメイン処理部20は、まず、スタック情報変更処理部14によるスタック情報変更処理を行う(ステップS101)。その後、無限ループのRTOS起動処理を行う(ステップS102)。
<スタック情報変更処理>
次に、図4に示したフローチャートを参照して、ステップS101におけるスタック情報変更処理部14によるスタック情報変更処理手順について説明する。図4に示すように、まず、スタック情報変更処理部14は、静的メモリ領域41の先頭アドレスを取得する(ステップS201)。静的メモリ領域41の先頭アドレスは、RTOSシミュレータプログラム2の起動時に汎用OSが決定されるため、常に同じアドレス値が参照できるとは限らない。
次に、図4に示したフローチャートを参照して、ステップS101におけるスタック情報変更処理部14によるスタック情報変更処理手順について説明する。図4に示すように、まず、スタック情報変更処理部14は、静的メモリ領域41の先頭アドレスを取得する(ステップS201)。静的メモリ領域41の先頭アドレスは、RTOSシミュレータプログラム2の起動時に汎用OSが決定されるため、常に同じアドレス値が参照できるとは限らない。
その後、スタック情報変更処理部14は、RTOSシミュレータスレッド10の初期スタックアドレスを算出する(ステップS202)。この算出は、静的メモリ領域41の先頭アドレスに、実システムにおけるメモリ空間の0番地アドレスからのスタック領域の相対開始アドレスを足し込むことで行う。
その後、スタック情報変更処理部14は、RTOSシミュレータスレッド10のコンテキスト情報のスタックベースポインタに、初期スタックアドレスを設定する(ステップS203)。
その後、スタック情報変更処理部14は、RTOSシミュレータスレッド10のコンテキスト情報のスタックポインタに、初期スタックアドレスを設定する(ステップS204)。
その後、スタック情報変更処理部14は、現在、RTOSシミュレータスレッド10のコンテキスト情報のスタックポインタが示すアドレスの領域に、初期スタックアドレスを格納して(ステップS205)、ステップS101にリターンする。
<RTOS起動処理>
次に、図5に示したフローチャートを参照して、ステップS102におけるRTOS起動処理手順について説明する。図5に示すように、RTOSシミュレータプログラムメイン処理部20は、まず、タスク切替か、タスク生成か、切替要求なしかを判定する(ステップS301)。
次に、図5に示したフローチャートを参照して、ステップS102におけるRTOS起動処理手順について説明する。図5に示すように、RTOSシミュレータプログラムメイン処理部20は、まず、タスク切替か、タスク生成か、切替要求なしかを判定する(ステップS301)。
タスク切替である場合(ステップS301,タスク切替)、コンテキスト情報保存処理部15によるコンテキスト情報保存処理を行う(ステップS302)。その後、コンテキスト情報復元処理部16によるコンテキスト情報復元処理を行って(ステップS303)、ステップS301に移行する。一方、タスク生成である場合(ステップS301,タスク生成)、タスク生成時コンテキスト情報保存処理部17によるタスク生成時コンテキスト情報保存処理を行って(ステップS304)、ステップS301に移行する。また、切替要求なしの場合(ステップS301,切替要求なし)、その他のRTOS処理を行って(ステップS305)、ステップS301に移行する。このRTOS起動処理では、図5に示すように無限ループに入る。
<コンテキスト情報保存処理>
次に、図6に示したフローチャートを参照して、ステップS302におけるコンテキスト情報保存処理部15によるコンテキスト情報保存処理手順について説明する。図6に示すように、コンテキスト情報保存処理部15は、RTOS処理部12のタスク制御情報13から、現在実行中のタスクのタスク制御情報を取得する(ステップS401)。その後、汎用OSのコンテキスト情報保存処理を呼び出し、RTOSシミュレータスレッド10の現時点でのコンテキスト情報を取得する(ステップS402)。この時に取得されるコンテキスト情報は、現在実行中のタスクのタスク関数内のコンテキスト情報であり、次回、本タスクに制御が戻り、処理が再開される際のコンテキスト情報でもある。汎用OSのコンテキスト情報保存処理は、プログラミング言語標準の関数として、C言語のsetjmp関数、汎用OSのAPI関数としてWindows(登録商標)系OSのGetThreadContext関数などがある。
次に、図6に示したフローチャートを参照して、ステップS302におけるコンテキスト情報保存処理部15によるコンテキスト情報保存処理手順について説明する。図6に示すように、コンテキスト情報保存処理部15は、RTOS処理部12のタスク制御情報13から、現在実行中のタスクのタスク制御情報を取得する(ステップS401)。その後、汎用OSのコンテキスト情報保存処理を呼び出し、RTOSシミュレータスレッド10の現時点でのコンテキスト情報を取得する(ステップS402)。この時に取得されるコンテキスト情報は、現在実行中のタスクのタスク関数内のコンテキスト情報であり、次回、本タスクに制御が戻り、処理が再開される際のコンテキスト情報でもある。汎用OSのコンテキスト情報保存処理は、プログラミング言語標準の関数として、C言語のsetjmp関数、汎用OSのAPI関数としてWindows(登録商標)系OSのGetThreadContext関数などがある。
その後、取得したコンテキスト情報を、ステップS401で取得したタスク制御情報に格納し(ステップS404)、ステップS302にリターンする。
<コンテキスト情報復元処理>
次に、図7に示したフローチャートを参照して、ステップS303におけるコンテキスト情報復元処理部16によるコンテキスト情報復元処理手順について説明する。図7に示すように、コンテキスト情報復元処理部16は、RTOS処理部12から、次に実行するタスクのタスク制御情報を取得する(ステップS501)。その後、次に実行するタスクのタスク制御情報に格納されたコンテキスト情報を参照し、汎用OSのコンテキスト情報設定処理を呼び出し、RTOSシミュレータスレッド10の現時点でのコンテキスト情報に設定し(ステップS502)、ステップS303にリターンする。
次に、図7に示したフローチャートを参照して、ステップS303におけるコンテキスト情報復元処理部16によるコンテキスト情報復元処理手順について説明する。図7に示すように、コンテキスト情報復元処理部16は、RTOS処理部12から、次に実行するタスクのタスク制御情報を取得する(ステップS501)。その後、次に実行するタスクのタスク制御情報に格納されたコンテキスト情報を参照し、汎用OSのコンテキスト情報設定処理を呼び出し、RTOSシミュレータスレッド10の現時点でのコンテキスト情報に設定し(ステップS502)、ステップS303にリターンする。
汎用OSのコンテキスト情報設定処理は、プログラミング言語標準の関数として、C言語のlongjmp関数、汎用OSのAPI関数としてWindows(登録商標)系OSのSetThreadContext関数などがある。ただし、使用可能な汎用OSのコンテキスト情報設定処理は、コンテキスト情報保存処理により、RTOS処理部12のタスク制御情報13に格納されたコンテキスト情報を扱える処理に限る。例えば、setjmp関数によりコンテキスト情報を取得した場合は、longjmp関数を使用しなければならない。また、GetThreadContext関数によりコンテキスト情報を取得した場合は、SetThreadContext関数を使用しなければならない。
汎用OSのコンテキスト情報設定処理(ステップS502)の後に、本コンテキスト情報復元処理は終了するが、実際には、汎用OSのコンテキスト情報設定処理終了後は、既にRTOSシミュレータスレッド10のコンテキスト情報に、次に実行するタスクのコンテキスト情報が復元されているため、汎用OSのコンテキスト情報設定処理後は、次に実行するタスクに制御が移り、次に実行するタスクが、前回まで処理を行っていた箇所から再開される。
<タスク生成時コンテキスト情報保存処理>
次に、図8に示したフローチャートを参照して、ステップS304におけるタスク生成時コンテキスト情報保存処理部17によるタスク生成時コンテキスト情報保存処理手順について説明する。図8に示すように、タスク生成時コンテキスト情報保存処理部17は、RTOS処理部12から、生成したタスクのタスク制御情報を取得する(ステップS601)。
次に、図8に示したフローチャートを参照して、ステップS304におけるタスク生成時コンテキスト情報保存処理部17によるタスク生成時コンテキスト情報保存処理手順について説明する。図8に示すように、タスク生成時コンテキスト情報保存処理部17は、RTOS処理部12から、生成したタスクのタスク制御情報を取得する(ステップS601)。
その後、汎用OSのコンテキスト情報保存処理を呼び出し、RTOSシミュレータスレッド11の現時点でのコンテキスト情報を取得する(ステップS602)。汎用OSのコンテキスト情報保存処理は、プログラミング言語標準の関数として、C言語のsetjmp関数、汎用OSのAPI関数としてWindows(登録商標)系OSのGetThreadContext関数などがある。ただし、使用可能な汎用OSのコンテキスト情報保存処理は、コンテキスト情報復元処理により、RTOS処理部12のタスク制御情報13に格納されたコンテキスト情報を扱える処理に限る。例えば、longjmp関数によりコンテキスト情報を設定する場合は、setjmp関数を使用しなければならない。また、SetThreadContext関数によりコンテキスト情報を復元する場合は、GetThreadContext関数を使用しなければならない。
その後、取得したコンテキスト情報を、ステップS601で取得したタスク制御情報に格納する(ステップS603)。さらに、格納したコンテキスト情報内のプログラムカウンタの値を、タスク関数の先頭アドレス値に更新する(ステップS604)。
さらに、格納したコンテキスト情報内のスタックベースポインタの値を、タスクに割り当てられたスタック領域の基底アドレスに更新する(ステップS605)。なお、スタック領域の基底アドレスは、RTOS処理部12に割り当てられたスタック領域の基底アドレスを使用してもよいし、スタック領域の基底部にアプリケーションで使用したい領域を配置したければ、その領域分を差し引いたアドレスを加味して基底アドレスとして使用してもよい。
その後、格納したコンテキスト情報内のスタックポインタの値を、タスクに割り当てられたスタック領域のスタック開始アドレスに更新して(ステップS606)、ステップS304にリターンする。なお、スタック開始アドレスは、RTOS処理部12に割り当てられたスタック領域の基底アドレスを使用してもよいし、スタック領域の基底部にアプリケーションで使用したい領域を配置したければ、その領域分を差し引いたアドレスを加味してスタック開始アドレスとして使用してもよい。
<静的メモリ領域の割当>
次に、図9を参照して静的メモリ領域41の割当処理について説明する。図9は、RTOSシミュレータプログラム2の起動時に、静的メモリ領域をRTOS処理部12の実システムと同様に扱えるメモリ領域として割り当てる処理を説明する説明図である。図9には、RTOSシミュレータプログラム2のメモリマップM1とRTOS処理部12が管理するメモリマップM2とを示している。
次に、図9を参照して静的メモリ領域41の割当処理について説明する。図9は、RTOSシミュレータプログラム2の起動時に、静的メモリ領域をRTOS処理部12の実システムと同様に扱えるメモリ領域として割り当てる処理を説明する説明図である。図9には、RTOSシミュレータプログラム2のメモリマップM1とRTOS処理部12が管理するメモリマップM2とを示している。
RTOSシミュレータプログラム2のメモリマップM1は、汎用OS4がプログラム起動時に割り当てるため、プログラム起動後でないと、各領域の先頭アドレスは判明しない。汎用OS4によるメモリマップの割り当て後、RTOSシミュレータプログラム2のグローバル変数領域、及びスタック領域の割り当てが完了するため、静的メモリ領域41、スタックベースポインタが指すスタックベースアドレスA2、スタックポインタの指すアドレスA3が決定される。決定されたアドレスは、静的メモリ領域41の場合、静的メモリ領域41を固定長データの配列として定義しておけば、その配列の先頭アドレスとして参照できる。また、スタックベースアドレスA2及びスタックポインタが指すアドレスA3は、RTOSシミュレータスレッド10のコンテキスト情報から参照できる。
本実施の形態では、実システムのメモリ空間のサイズ及び静的メモリ領域41のサイズを、RTOS処理部12内で“0x200000Byte”、実システムのスタック領域サイズを“0x100000Byte”と定義し、静的メモリ領域41の先頭アドレスA1は、汎用OS4により、“0x00E00000”に割り当てられたものとする。
RTOSシミュレータプログラム2の起動後、RTOSシミュレータプログラムメイン処理部20が呼び出され、その中から、RTOSシミュレータスレッド10が起動される。RTOSシミュレータスレッド10は、起動時に、必要な前処理を行う。
スタック情報変更処理部14によるスタック情報変更処理は、まず、静的メモリ領域41の先頭アドレスA1として“0x00E00000”というアドレス値を取得する。そして、RTOS処理部12が管理するメモリマップM2において、メモリマップM1の末端からRTOSシステム領域“0x1000Byte”を差し引いたアドレス“0x0001FEFFF”を、実システム上の初期スタックアドレスA4とし、この値に静的メモリ領域41の先頭アドレスを足し合わせた“0x00FFEFFF”を、RTOSシミュレータスレッド10における初期スタックアドレスA4として算出する。
次に、算出した初期スタックアドレスA4の値を、RTOSシミュレータプログラム2のコンテキスト情報のスタックベースポインタ及びスタックポインタに設定する。この結果、RTOSシミュレータスレッド10のスタックベースポインタの指すアドレス及びスタックポインタの指すアドレスは、静的メモリ領域41内のアドレスを指す。
次に、スタックにスタックベースアドレス値をプッシュ(PUSH)することで、スタックポインタの指すアドレスは、1アドレスデータ分前のアドレスを指す。
次に、RTOS処理部12を起動するが、このRTOS処理部12が使用するRTOSスタック領域51は、スタックポインタの指すアドレスから使用を開始し、RTOSスタック領域51全体を使用することになる。
これにより、RTOSシミュレータプログラム2の起動時に、静的メモリ領域41をRTOS処理部12で実システムと同様に扱えるメモリ領域として割り当てることができる。また、静的メモリ領域41の管理は、RTOS処理部12が行うため、RTOS処理部12内で定義したスタック領域サイズの範囲内で動作させることができ、実システムと同様にスタックオーバーフロー等のメモリ以上を、RTOS処理部12で検出することができる。
<RTOSスタック領域の割当>
次に、図10を参照してRTOSスタック領域51の割当処理について説明する。すなわち、タスク生成時やRTOS資源生成時に、必要なメモリ領域を、RTOS処理部12に割り当てた静的メモリ領域41上のスタック領域から割り当てる場合の動作について説明する。図10は、RTOS処理部12が管理するRTOSスタック領域のタスクやRTOS資源の割当動作を説明する説明図である。
次に、図10を参照してRTOSスタック領域51の割当処理について説明する。すなわち、タスク生成時やRTOS資源生成時に、必要なメモリ領域を、RTOS処理部12に割り当てた静的メモリ領域41上のスタック領域から割り当てる場合の動作について説明する。図10は、RTOS処理部12が管理するRTOSスタック領域のタスクやRTOS資源の割当動作を説明する説明図である。
RTOS処理部12は、タスクのスタック領域やセマフォ・メモリプール等のRTOS資源に割り当てるため、RTOSスタック領域のメモリ管理を行う処理を保有する。例えば、図10(1)に示すように、起動時に割り当てられたRTOSスタック領域51全体あるいは一部を、N個の固定サイズのメモリブロックに分割し、図示しない分割したメモリブロックを管理するための情報を生成し、要求のあったタスクやRTOS資源にメモリブロック単位でRTOSスタック領域51を割り当てる。
ここで、デバッグ対象プログラムからタスクAの生成要求が行われた場合、RTOS処理部12は、要求されたサイズに応じて必要なメモリブロックをタスクAに割り当てる。図10(2)では、2つ分のメモリブロックのサイズが要求されたものとして、2つの連続したメモリブロック(メモリブロック「1」,「2」)がタスクAに割り当てられる。
ここで、デバッグ対象プログラムからメモリプールCの生成要求が行われた場合、RTOS処理部12は、要求されたサイズに応じて必要なメモリブロックをメモリプールCに割り当てる。図10(3)では、1つ分のメモリブロックのサイズが要求されたものとして、単一のメモリブロック(メモリブロック「4」)が、メモリプールCに割り当てられる。
これらの動作は、RTOS処理部12が元から保有する機能が動作した結果であり、本実施の形態のRTOSアプリケーションデバッグ装置1上の静的メモリ領域41であっても、実システム上であっても、全く同じ動作をする。
これにより、タスク生成時やRTOS資源生成に、実システムと同様の方式で、静的メモリ領域41上のRTOSスタック領域51からタスクやRTOS資源にメモリ領域が割り当てられる。
<タスクの切替処理>
次に、図11を参照してタスクAからタスクBへのタスク切替が発生した場合の動作について説明する。図11は、タスクAからタスクBへのタスク切替が発生した場合の動作について説明する説明図である。
次に、図11を参照してタスクAからタスクBへのタスク切替が発生した場合の動作について説明する。図11は、タスクAからタスクBへのタスク切替が発生した場合の動作について説明する説明図である。
図11に示すように、RTOS用アプリケーションプログラム11内でタスクAが動作中に、何らかのタスク切替要因が発生すると、RTOS処理部12は、タスク切替要因を受け付け、タスクAの動作を一時中断する。
その後、RTOS処理部12は、コンテキスト情報保存処理を呼び出し、汎用OS4のコンテキスト情報取得処理を経由して、タスクAの動作中断時点のCPUのコンテキスト情報を取得し、タスクAのタスク制御情報に、取得したコンテキスト情報を格納する。
その後、RTOS処理部12は、実行中タスクのタスク制御情報を、タスクAからタスクBのタスク制御情報に切り替える。その後、RTOS処理部12は、コンテキスト情報復元処理を呼び出し、タスクBのタスク制御情報から、前回タスク切替前に一時中断し、保存したタスクBのコンテキスト情報を取得し、汎用OSのコンテキスト情報設定処理を経由して、CPUのコンテキスト情報に設定する。
次に、コンテキスト情報復元処理から復帰した後、CPUのコンテキスト情報は、タスクBの前回タスク切替前に一時中断し、保存したコンテキスト情報に復元されているため、タスク切替が反映され、RTOS用アプリケーションプログラム11内では、タスクBが一時中断した処理から処理を再開する。
これにより、実システムと同様の方式で、RTOSシミュレータスレッド10内でタスクAからタスクBへのタスク切替が実行される。
<タスク生成後のタスク初回起動時の動作>
次に、図12を参照してタスク生成後のタスク初回起動時の動作について説明する。なお、汎用OSのコンテキスト情報取得の関数としてsetjmp関数を使用する場合について説明する。図12は、タスク生成時のタスク制御情報内のコンテキスト情報の格納内容の変移を説明する説明図である。
次に、図12を参照してタスク生成後のタスク初回起動時の動作について説明する。なお、汎用OSのコンテキスト情報取得の関数としてsetjmp関数を使用する場合について説明する。図12は、タスク生成時のタスク制御情報内のコンテキスト情報の格納内容の変移を説明する説明図である。
RTOSのタスク生成システムコールを呼び出して、図12(1)に示すように、RTOS処理部12のタスク制御情報に、タスクのコンテキスト情報を格納する領域が確保される。この時点では、タスク制御情報のコンテキスト情報の内容は不定値となる。
その後、タスク生成システムコールは、タスク生成時コンテキスト情報保存処理を呼び出す。タスク生成時コンテキスト情報保存処理は、setjmp関数を呼び出し、setjmp関数は、図12(2)に示す自身が呼び出された時点でのコンテキスト情報を、タスク制御情報に格納する。
その後、タスク生成時コンテキスト情報保存処理は、コンテキスト情報の中で、タスク初回起動するために必要な情報を変更する。図12(3)は、変更後のコンテキスト情報の内容を示している。すなわち、スタックベースポインタEBPに、タスク初回起動時のスタックベースアドレスが格納される。また、スタックポインタESPに、タスク初回起動時のスタック領域のアドレス値が格納される。さらに、プログラムカウンタEIPに、タスク関数の先頭アドレス値が格納される。
この時点で、タスク切替が発生した際、生成したタスクが初回起動するために必要なコンテキスト情報が、タスク制御情報内に全て揃った状態となっている。この後、タスク切替が発生しても、このタスクに制御が移った場合、格納されたタスク関数の先頭アドレスから処理が開始されることになる。
これにより、タスク生成時に、タスク生成時点のコンテキスト情報を取得し、プログラムカウンタ等のタスク初回起動に必要な情報に設定してから、タスク制御情報のコンテキスト情報を保存するため、タスク生成後のタスク切替発生により初めて呼び出される場合でも、正常にタスクが起動される。
本実施の形態では、OSシミュレータプロセス起動時に、OSシミュレータスレッドのスタック情報を実システムのハードウェアと同等サイズの静的メモリ領域41に変更する。また、デバッグ対象プログラムのタスクの切替時に、現在のOSシミュレータスレッドのコンテキスト情報を現在処理中タスクのコンテキスト情報として保存した後、次に実行するタスクのコンテキスト情報へと復元する。さらに、タスク生成時にコンテキスト情報にタスク関数の先頭アドレスや初期スタック領域情報を設定する。これにより、デバッグ対象プログラムとRTOS処理とを、実システムと同じスタック領域メモリを割り当てられた単一のスレッド上で起動・動作させることが可能となる。この結果、汎用OSのメモリ割付及びスレッドスケジューリングの影響を受けずに、OSシミュレータプロセスのOSシミュレータスレッド内のみで、実システムのハードウェア上と全く同じ処理手順・メモリ割付でデバッグ対象プログラムを起動・動作させてのデバッグを行うことができる。
<変形例>
ところで、汎用OS4が搭載されたPCハードウェア5に接続される周辺機器を接続する場合、USB通信規格やRS232C通信規格などの各種通信規格のデバイスドライバ機能を用いて、各種通信規格の周辺機器接続ハードウェア100を介して周辺機器へのアクセス処理が行われる。一般に、デバイスドライバ機能は、RTOS用アプリケーションプログラム11に付加される機能であり、このデバイスドライバ機能を付加する場合、デバイスドライバ機能は別個に開発されている。したがって、この別個に開発されたデバイスドライバ機能を、実機のRTOS上で動作させる場合、再開発(ソースコードの修正)が必要となる。そこで、本変形例では、RTOS用アプリケーションプログラム11にデバイスドライバ機能を組み込んでデバッグできるようにしている。
ところで、汎用OS4が搭載されたPCハードウェア5に接続される周辺機器を接続する場合、USB通信規格やRS232C通信規格などの各種通信規格のデバイスドライバ機能を用いて、各種通信規格の周辺機器接続ハードウェア100を介して周辺機器へのアクセス処理が行われる。一般に、デバイスドライバ機能は、RTOS用アプリケーションプログラム11に付加される機能であり、このデバイスドライバ機能を付加する場合、デバイスドライバ機能は別個に開発されている。したがって、この別個に開発されたデバイスドライバ機能を、実機のRTOS上で動作させる場合、再開発(ソースコードの修正)が必要となる。そこで、本変形例では、RTOS用アプリケーションプログラム11にデバイスドライバ機能を組み込んでデバッグできるようにしている。
図13は、本発明の実施の形態の変形例であるRTOSアプリケーションデバッグ装置1の概要構成を示すブロック図である。図13に示すように、本変形例のRTOSアプリケーションデバッグ装置1では、RTOS用アプリケーションプログラム11内にデバイスドライバ機能111が組み込まれ、割込ベクタテーブル113には、デバイスドライバ応答割込関数114が予め設けられている。そして、デバイスドライバ機能111によるRTOS割込処理を、汎用OS用RTOSシミュレータプログラム2とは別であって、汎用OS用RTOSシミュレータプログラム2と同様に汎用OS4上で動作する汎用OS用RTOS割込シミュレータプログラム120を新たに設けている。なお、図13では、説明の都合上、タスク制御情報13、スタック情報変更処理部14、コンテキスト情報保存処理部15、コンテキスト情報復元処理部16及びタスク生成時コンテキスト情報保存処理部17を削除している。
RTOSシミュレータプログラム2は、デバイスドライバ機能111の実行時における割込シミュレータプログラム120との接続処理を行う割込受付処理部101を新たに設けている。一方、割込シミュレータプログラム120は、デバイスドライバ機能111によるアクセス要求を受け付ける要求受付処理部102、要求受付処理部102からのアクセス要求を受けて、USB通信規格やRS232Cなどの周辺機器接続ハードウェア100へのアクセス要求に対する応答処理を行う要求応答処理部103、及び、汎用OS提供処理部30と同様な汎用OS提供処理部130を有する。
<デバイスドライバ機能によるアクセス動作>
ここで、図13を参照して、デバイスドライバ機能111による周辺機器接続ハードウェア100へのアクセス動作について説明する。図13に示すように、まず、デバイスドライバ機能111は、周辺機器接続ハードウェア100に対する、データ送信やデータ受信などのアクセス処理を要求受付処理部102に要求する(ステップS1)。
ここで、図13を参照して、デバイスドライバ機能111による周辺機器接続ハードウェア100へのアクセス動作について説明する。図13に示すように、まず、デバイスドライバ機能111は、周辺機器接続ハードウェア100に対する、データ送信やデータ受信などのアクセス処理を要求受付処理部102に要求する(ステップS1)。
要求受付処理部102は、デバイスドライバ機能111からのアクセス処理の要求を受け付けると、要求応答処理部103に対して、周辺機器接続ハードウェア100に対するアクセス処理を依頼する(ステップS2)。このアクセス処理の依頼を受けた要求応答処理部103は、汎用OS提供処理部130を介して周辺機器接続ハードウェア100に対するアクセス処理を行う(ステップS3)。そして、要求応答処理部103は、アクセス処理結果の応答を割込受付処理部101に通知する(ステップS4)。
アクセス処理結果の応答を受けた割込受付処理部101は、割込ベクタテーブル113内のデバイスドライバ応答割込関数114を参照して(ステップS5)、このデバイスドライバ応答割込関数114を実行してアクセス処理結果をデバイスドライバ機能111に通知し(ステップS6)、本処理を終了する。
本変形例では、RTOSシミュレータプログラム2とは別個に、割込シミュレータプログラム120を設けているので、デバイスドライバ機能の実行時においてRTOSシミュレータプログラム2のRTOS処理動作に影響を与えることなくデバイスドライバ機能のデバッグを行うことができる。また、デバイスドライバ機能111は、RTOS用アプリケーションプログラム11に後程、付加するのではなく、予めRTOS標準で、RTOS用アプリケーションプログラム11に組み込まれているので、RTOS用アプリケーションプログラム11のデバッグと同時にデバッグを行うことができ、開発工数を削減することができる。さらに、デバイスドライバ機能111は、RTOS標準であるため、実機で動作させるために、RTOSアプリケーションのソースコードを修正することなく、実機用コンパイラでコンパイルのみを実施すればよい。
また、上記の実施の形態及び変形例で図示した各構成は機能概略的なものであり、必ずしも物理的に図示の構成をされていることを要しない。すなわち、各装置及び構成要素の分散・統合の形態は図示のものに限られず、その全部又は一部を各種の使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
1 アプリケーションデバッグ装置
2 RTOSシミュレータプログラム
3 汎用OS用プログラム開発環境
4 汎用OS
5 PCハードウェア
6 コンテキスト情報
10 RTOSシミュレータスレッド
11 RTOS用アプリケーションプログラム
12 RTOS処理部
13 タスク制御情報
14 スタック情報変更処理部
15 コンテキスト情報保存処理部
16 コンテキスト情報復元処理部
17 タスク生成時コンテキスト情報保存処理部
20 RTOSシミュレータプログラムメイン処理部
30,130 汎用OS提供処理部
40 汎用OS割当メモリ領域
41 静的メモリ領域
51 スタック領域
100 周辺機器接続ハードウェア
101 割込受付処理部
102 要求受付処理部
103 要求応答処理部
111 デバイスドライバ機能
113 割込ベクタテーブル
114 デバイスドライバ応答割込関数
120 割込シミュレータプログラム
A,B タスク
A1 先頭アドレス
A2 スタックベースアドレス
A3 アドレス
A4 初期スタックアドレス
C メモリプール
M1,M2 メモリマップ
2 RTOSシミュレータプログラム
3 汎用OS用プログラム開発環境
4 汎用OS
5 PCハードウェア
6 コンテキスト情報
10 RTOSシミュレータスレッド
11 RTOS用アプリケーションプログラム
12 RTOS処理部
13 タスク制御情報
14 スタック情報変更処理部
15 コンテキスト情報保存処理部
16 コンテキスト情報復元処理部
17 タスク生成時コンテキスト情報保存処理部
20 RTOSシミュレータプログラムメイン処理部
30,130 汎用OS提供処理部
40 汎用OS割当メモリ領域
41 静的メモリ領域
51 スタック領域
100 周辺機器接続ハードウェア
101 割込受付処理部
102 要求受付処理部
103 要求応答処理部
111 デバイスドライバ機能
113 割込ベクタテーブル
114 デバイスドライバ応答割込関数
120 割込シミュレータプログラム
A,B タスク
A1 先頭アドレス
A2 スタックベースアドレス
A3 アドレス
A4 初期スタックアドレス
C メモリプール
M1,M2 メモリマップ
Claims (10)
- デバッグ対象プログラムがRTOS用のアプリケーションプログラムであり、汎用OS上で、RTOS処理を汎用OS用RTOSシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記RTOS処理に与えて動作させてデバッグを行うRTOSアプリケーションデバッグ装置であって、
前記汎用OS用RTOSシミュレータプログラムは、
前記デバッグ対象プログラムと前記RTOS処理とを動作させるRTOSシミュレータスレッドと、
前記RTOSシミュレータスレッドが管理する静的メモリ領域と、
を備え、
前記RTOSシミュレータスレッドは、
前記RTOSシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理部と、
前記RTOSシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理部と、
前記コンテキスト情報保存処理部によって保存されたコンテキスト情報を前記RTOSシミュレータスレッドに復元するコンテキスト情報復元処理部と、
前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理部と、
を備えたことを特徴とするRTOSアプリケーションデバッグ装置。 - 前記RTOSシミュレータスレッドは、前記RTOS処理から、前記デバッグ対象プログラムを実システムと同じRTOS上のタスクとして呼び出し、当該RTOSシミュレータスレッド上で処理することを特徴とする請求項1に記載のRTOSアプリケーションデバッグ装置。
- 前記静的メモリ領域は、前記汎用OS上で連続したメモリ領域であり、実システムで利用可能なメモリ空間と同じ領域サイズ、又は、前記RTOSシミュレータスレッド上で前記RTOS処理及び前記デバッグ対象プログラムが正常動作するために必要な領域サイズであることを特徴とする請求項1または2に記載のRTOSアプリケーションデバッグ装置。
- 前記スタック情報変更処理部は、前記汎用OSが前記RTOSシミュレータスレッドに割り当てたスタック領域のスタック情報を、前記静的メモリ領域を前記RTOSシミュレータスレッドのスタック領域とする情報に変更することを特徴とする請求項1〜3のいずれか一つに記載のRTOSアプリケーションデバッグ装置。
- 前記コンテキスト情報保存処理部は、コンテキスト情報保存処理の呼出時点の前記RTOSシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報をコンテキスト情報保存処理の呼出時点で動作している前記デバッグ対象プログラム内のタスクに対応した前記RTOS処理内のタスク制御情報に保存することを特徴とする請求項1〜4のいずれか一つに記載のRTOSアプリケーションデバッグ装置。
- 前記コンテキスト情報復元処理部は、前記RTOS処理内のタスク制御情報から復元対象となるコンテキスト情報を取得し、取得したコンテキスト情報を前記RTOSシミュレータスレッドに復元することを特徴とする請求項1〜5のいずれか一つに記載のRTOSアプリケーションデバッグ装置。
- 前記タスク生成時コンテキスト情報保存処理部は、タスク生成時点の前記RTOSシミュレータスレッドのコンテキスト情報を取得し、取得したコンテキスト情報のタスク初回起動に関連する情報を変更した後、生成したタスクに対応した前記RTOS処理内のタスク制御情報に保存することを特徴とする請求項1〜6のいずれか一つに記載のRTOSアプリケーションデバッグ装置。
- 前記タスク初回起動に関連する情報は、少なくともタスク関数の先頭アドレスと、タスク起動時のスタックベースポインタと、タスク起動時のスタックポインタとを含むことを特徴とする請求項7に記載のRTOSアプリケーションデバッグ装置。
- 前記汎用OS用RTOSシミュレータプログラムは、前記汎用OSが搭載されたハードウェアに接続される周辺機器へのアクセス処理を行うデバイスドライバ機能を有し、
前記デバイスドライバ機能によるRTOS割込処理を、前記汎用OS用RTOSシミュレータプログラムとは別に、前記汎用OS上で実行する汎用OS用RTOS割込シミュレータプログラムを備え、
前記デバイスドライバ機能は、汎用OS用RTOS割込シミュレータプログラムを介して前記周辺機器へのアクセス処理を行うことを特徴とする請求項1〜8のいずれか一つに記載のRTOSアプリケーションデバッグ装置。 - デバッグ対象プログラムがRTOS用のアプリケーションプログラムであり、汎用OS上で、RTOS処理を汎用OS用RTOSシミュレータプログラムとして実行し、前記デバッグ対象プログラムを前記RTOS処理に与えて動作させてデバッグを行うRTOSアプリケーションデバッグ方法であって、
前記汎用OS用RTOSシミュレータプログラムは、
前記デバッグ対象プログラムと前記RTOS処理とを動作させるRTOSシミュレータスレッドと、
前記RTOSシミュレータスレッドが管理する静的メモリ領域と、
を備え、
前記RTOSシミュレータスレッドは、
前記RTOSシミュレータスレッドのスタック情報を前記静的メモリ領域に変更するスタック情報変更処理ステップと、
前記RTOSシミュレータスレッドのコンテキスト情報を保存するコンテキスト情報保存処理ステップと、
前記コンテキスト情報保存処理ステップによって保存されたコンテキスト情報を前記RTOSシミュレータスレッドに復元するコンテキスト情報復元処理ステップと、
前記デバッグ対象プログラム内のタスク生成時のコンテキスト情報の初期値を生成し、保存するタスク生成時コンテキスト情報保存処理ステップと、
を含むことを特徴とするRTOSアプリケーションデバッグ方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019005234 | 2019-01-16 | ||
JP2019005234 | 2019-01-16 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020113244A true JP2020113244A (ja) | 2020-07-27 |
Family
ID=71667157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019148032A Withdrawn JP2020113244A (ja) | 2019-01-16 | 2019-08-09 | Rtosアプリケーションデバッグ装置及びrtosアプリケーションデバッグ方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2020113244A (ja) |
-
2019
- 2019-08-09 JP JP2019148032A patent/JP2020113244A/ja not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Akkus et al. | {SAND}: Towards {High-Performance} serverless computing | |
CN107636612B (zh) | 应用迁移装置、方法与存储介质 | |
US9354944B2 (en) | Mapping processing logic having data-parallel threads across processors | |
EP2701061B1 (en) | Method of updating or rollbacking dynamically a Java Agent by instrumenting its bytecode | |
US8756591B2 (en) | Generating compiled code that indicates register liveness | |
EP2950206A1 (en) | Extracting source code | |
EP3869336A1 (en) | Method and apparatus for processing development machine operation task, device and storage medium | |
CN102402419A (zh) | 用所选执行运行时执行的用户代码的运行时不可知表示 | |
WO2012131507A1 (en) | Running a plurality of instances of an application | |
KR102338849B1 (ko) | 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 | |
EP3021216A1 (en) | Incremental source code analysis | |
WO2006069484A1 (en) | Methods and apparatuses to maintain multiple execution contexts | |
JP2009157684A (ja) | 仮想化プログラム、シミュレーション装置、仮想化方法 | |
US20210232416A1 (en) | Extension application mechanisms through intra-process operation systems | |
US10530892B2 (en) | Processing request for multi-versioned service | |
CN116685946A (zh) | 在不停止应用的执行的情况下的更新的共享库的重新加载 | |
CN114253713A (zh) | 一种基于reactor的异步批处理方法及系统 | |
US10496433B2 (en) | Modification of context saving functions | |
JP2017522658A (ja) | 移行および遠隔ランタイム統合 | |
US10552135B1 (en) | Reducing a size of an application package | |
CN106775608B (zh) | 独立系统进程的实现方法和装置 | |
JP2008523491A (ja) | アクティブオブジェクトへのアクセスを提供する方法及びシステム | |
CN109800166B (zh) | 一种嵌入式实时操作系统的调试方法及装置 | |
US10303523B2 (en) | Method and apparatus to migrate stacks for thread execution | |
CN115599530B (zh) | 一种基于Linux内核的硬实时优化改造方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220713 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20221114 |