(57)【要約】【課題】ハードウェアがタスクを制御するマルチタスクシステムにおいて、特定のタスクに着目した実行制御やプログラム実行状態の把握をリアルタイム性を維持した形で実現する。【解決手段】タスクコントローラ１０が次回実行タスクのコンテキストをレジスタバンク２１に転送するときに、割込みコントローラ３０が次回実行タスクを覚えておき、プロセッサ２０におけるレジスタバンク２１の切替え時に、割込みコントローラ２０において次回実行タスクがユーザ指定タスクと同一の場合のみ、プロセッサ２０に対するハードウェア割込みを発生させ、プログラム実行を停止させる。これにより、ＯＳに依存せずに、また、ブレークポイントの設定を行わないステップ実行の場合でも、特定のタスクに着目したデバッグが実行可能である。【選択図】図１
2006344109.tif 000002
【特許請求の範囲】
【請求項１】
タスク実行のスケジューリングおよび次回実行タスクのコンテキストの転送を行うタスクコントローラと、
前記タスクコントローラから転送されてくる前記タスクのコンテキストを保持するレジスタバンクをもち、前記レジスタバンクを切替えることで複数のタスクを切替えながらプログラムを実行するプロセッサと、
前記プロセッサによる前記レジスタバンクの切替え時に、前記次回実行タスクとユーザ指定タスクとを比較し、同じタスクのときにハードウェア割込みを発生させて前記プロセッサに送出する割込みコントローラと、
前記プロセッサに接続され、前記割込みコントローラに対して前記ユーザ指定タスクを指示するデバッガとを備えたプログラムデバッグ装置。
【請求項２】
前記割込みコントローラは、
前記プロセッサにおいて前記レジスタバンクの切替えが発生したときに前記次回実行予定タスクと前記ユーザ指定タスクとを比較するタスク比較部と、
前記タスク比較部での比較結果が同一タスクのときに前記ハードウェア割込みを発生させる割込み発生部とからなる請求項１に記載のプログラムデバッグ装置。
【請求項３】
タスク実行のスケジューリングおよび次回実行タスクのコンテキストの転送を行うタスクコントローラと、
前記タスクコントローラから転送されてくる前記タスクのコンテキストを保持するレジスタバンクをもち、前記レジスタバンクを切替えることで複数のタスクを切替えながらプログラムを実行するプロセッサと、
割込み設定要求があったときにアクティブになり、前記プロセッサによる前記レジスタバンクの切替え時にハードウェア割込みを発生させて前記プロセッサに送出する割込みコントローラと、
前記プロセッサに接続され、ユーザ指定タスクのコンテキスト格納位置へのアクセスを検知するためのブレークポイントを設定し、前記ブレークポイントを検出したときに割込み設定要求を前記割込みコントローラに指示するデバッガとを備えたプログラムデバッグ装置。
【請求項４】
前記デバッガは、
前記ユーザ指定タスクの入力を行うインタフェース部と、
前記インタフェース部から得た前記ユーザ指定タスクのコンテキスト格納位置へ前記ブレークポイントを設定するとともに、前記ブレークポイントの成立時に前記割込みコントローラに前記割込み設定要求を出力するブレークポイント設定部とからなる請求項３に記載のプログラムデバッグ装置。
【請求項５】
前記割込みコントローラは、前記デバッガからの前記割込み設定要求の受け取り後に、前記レジスタバンクの切替えが発生したときに前記ハードウェア割込みを発生させる割込み発生部を備える請求項３または請求項４に記載のプログラムデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクシステムのプログラムデバッグ装置にかかわり、特には、タスク制御を行うのがＯＳ（Operating System）ではなくハードウェアであっても、特定のタスクに着目したデバッグ作業を行えるようにする技術に関する。
【背景技術】
【０００２】
プログラムの動作を検証するためには、対象となるプログラムの実行後、任意の位置で停止させてプログラムの状態を確認するといったデバッグ作業を行う。通常、デバッグ作業にはデバッガを用い、プログラムを任意の位置で停止させるための手法として、実行時に停止位置を指定するカム実行や、１ステップずつ実行を行うステップ実行、あるいはプログラムの停止位置を指定するブレークポイント設定といったデバッガの実行制御機能を使用する。
【０００３】
マルチタスクシステムにおいて、複数のタスクで共有しているライブラリでプログラム実行を停止させようとしたとき、ユーザが意図していないタスクで停止する可能性があり、特定のタスクに着目したデバッグ作業が困難になっていた。
【０００４】
従来はＯＳでタスク制御を行っていた。ＯＳにデバッグ用のシステムコールを追加し、ＯＳがタスク切替え時にシステムコールを発行することで、デバッガにタスク切替えのタイミングと、次に実行するタスク（次回実行タスク）を通知していた。特定のタスクに着目したデバッグ作業は、タスク切替えを認識すると、次回実行タスクをユーザが指定したタスク（ユーザ指定タスク）と比較して、一致する場合はプログラムの実行を停止し、異なる場合はプログラムの実行を継続させる（例えば、特許文献１参照）。
【０００５】
また、他の方法としては、タスク毎に使用するスタック領域を設定し、ブレーク命令に対象となるタスクのスタック領域を指定するためのセグメントアドレスを付加する。プログラム実行がブレークポイントに到達したときに、スタックポインタレジスタに含まれるセグメントアドレスとブレーク命令に付加したスタック領域のアドレスを比較する。そして、一致する場合はプログラムの実行を停止し、異なる場合はプログラムの実行を継続させることで、特定のタスクに着目したデバッグ作業を実現する（例えば、特許文献２参照）。
【特許文献１】特開平１１−２７２５０１号公報（第３−４頁、第１−３図）
【特許文献２】特開平１０−２１１１７号公報（第４−５頁、第１−７図）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、前者の方法においては、ＯＳがタスクを制御していることが前提である。そのため、ハードウェアがタスクを制御するマルチタスクシステムにおいては、ＯＳがタスクの状態を認識できず、特定のタスクに着目したデバッグ作業を実現することができない。
【０００７】
また、後者の方法においては、プログラムの実行を中断させるブレークポイントの度にタスク判定を実施するため、ブレークポイントの設定を行わないステップ実行の場合には、タスク判定を実施せず、特定のタスクに着目したデバッグ作業を実現することができない。
【０００８】
本発明は、このような事情に鑑みて創作したものであり、ＯＳではなくハードウェアがタスクを制御するマルチタスクシステムにおいて、ブレークポイントの設定を行わないステップ実行の場合においても、特定のタスクに着目したデバッグが行えるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明によるプログラムデバッグ装置は、
タスク実行のスケジューリングおよび次回実行タスクのコンテキストの転送を行うタスクコントローラと、
前記タスクコントローラから転送されてくる前記タスクのコンテキストを保持するレジスタバンクをもち、前記レジスタバンクを切替えることで複数のタスクを切替えながらプログラムを実行するプロセッサと、
前記プロセッサによる前記レジスタバンクの切替え時に、前記次回実行タスクとユーザ指定タスクとを比較し、同じタスクのときにハードウェア割込みを発生させて前記プロセッサに送出する割込みコントローラと、
前記プロセッサに接続され、前記割込みコントローラに対して前記ユーザ指定タスクを指示するデバッガとを備えたものである。
【００１０】
上記において、前記割込みコントローラについての好ましい態様は、
前記プロセッサにおいて前記レジスタバンクの切替えが発生したときに前記次回実行予定タスクと前記ユーザ指定タスクとを比較するタスク比較部と、
前記タスク比較部での比較結果が同一タスクのときに前記ハードウェア割込みを発生させる割込み発生部とからなるというものである。
【００１１】
ＯＳではなくハードウェアがタスクを制御するマルチタスクシステムにおいて、タスクコントローラがスケジューリングに従って次回実行タスクのコンテキストをプロセッサに転送する。プロセッサは、タスクコントローラから転送されてきた次回実行タスクのコンテキストを現在使用していないレジスタセットに格納し、レジスタセットを切替えることでタスク切替えを行う。ユーザ指定タスクを保持している割込みコントローラは、プロセッサによるタスク切替え時に、次回実行タスクとユーザ指定タスクとを比較し、異なるタスクの場合はそのままプログラム実行を継続させ、同じタスクの場合はハードウェア割込みを発生し、プログラムの実行を停止させる。割込み判断のタイミングはプロセッサで決定するが、ハードウェア割込みの発生は割込みコントローラで行うため、ＯＳに依存せずに、また、ブレークポイントの設定を行わないステップ実行の場合でも、特定のタスクに着目したデバッグが実行可能である。
【００１２】
また、本発明によるプログラムデバッグ装置は、
タスク実行のスケジューリングおよび次回実行タスクのコンテキストの転送を行うタスクコントローラと、
前記タスクコントローラから転送されてくる前記タスクのコンテキストを保持するレジスタバンクをもち、前記レジスタバンクを切替えることで複数のタスクを切替えながらプログラムを実行するプロセッサと、
割込み設定要求があったときにアクティブになり、前記プロセッサによる前記レジスタバンクの切替え時にハードウェア割込みを発生させて前記プロセッサに送出する割込みコントローラと、
前記プロセッサに接続され、ユーザ指定タスクのコンテキスト格納位置へのアクセスを検知するためのブレークポイントを設定し、前記ブレークポイントを検出したときに割込み設定要求を前記割込みコントローラに指示するデバッガとを備えたものである。
【００１３】
上記において、前記デバッガについての好ましい態様は、
前記ユーザ指定タスクの入力を行うインタフェース部と、
前記インタフェース部から得た前記ユーザ指定タスクのコンテキスト格納位置へ前記ブレークポイントを設定するとともに、前記ブレークポイントの成立時に前記割込みコントローラに前記割込み設定要求を出力するブレークポイント設定部とからなるというものである。
【００１４】
また、上記において、前記割込みコントローラについての好ましい態様は、前記デバッガからの前記割込み設定要求の受け取り後に、前記レジスタバンクの切替えが発生したときに前記ハードウェア割込みを発生させる割込み発生部を備えるというものである。
【００１５】
ＯＳではなくハードウェアがタスクを制御するマルチタスクシステムにおいて、タスクコントローラは、タスクが保持するコンテキストの格納位置をタスク毎に決定する。デバッガは、ユーザ指定タスクに対応するブレークポイントを設定する。このブレークポイントは、ユーザ指定タスクのコンテキスト格納位置に対してのアクセスを検知するためのものである。そしてプログラム実行後に、ユーザ指定タスクに対応したコンテキスト格納位置へのアクセスが発生したときに、ブレークポイント成立とし、デバッガが割込みコントローラに割込み設定要求を行う。割込みコントローラは、プロセッサによるレジスタ切替え時にハードウェア割込みを発生し、プログラムの実行を停止させる。このようにユーザ指定タスクへのアクセスを監視することにより、タスク切替え毎のタスク判別は省略できる。その結果として、プログラム実行への影響を低減し、特定のタスクに着目したデバッグ作業の効率を向上させることが可能となる。
【発明の効果】
【００１６】
本発明によれば、ＯＳではなくハードウェアがタスクを制御するマルチタスクシステムであっても、レジスタバンクの切替えを検知し、切替え後に使用されるコンテキストから次回実行タスクを判別し、ユーザ指定タスクと比較することでプログラムの実行中断を判定するため、ＯＳにタスクの状態を把握していなくても、特定のタスク着目したデバッグ作業を実現可能である。
【００１７】
また、タスクが保持するコンテキストの格納位置を一意に定め、ユーザ指定タスクのコンテキスト格納位置へのアクセスを検知するためのブレークポイントを設定することにより、ユーザ指定タスク以外へのタスク切替え時には一時的にも実行が停止しないため、リアルタイム性を損なうことなく、特定のタスクに着目したデバッガ作業やタスク切替え時のプログラム実行状況の把握が可能となる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明にかかわるプログラムデバッグ装置の実施の形態を図面に基づいて詳細に説明する。
【００１９】
（実施の形態１）
図１は本発明の実施の形態１におけるマルチタスクシステムの構成を示すブロック図である。
【００２０】
図１に示すマルチタスクシステム１００は、タスクコントローラ１０、プロセッサ２０、割込みコントローラ３０により構成されている。また、このマルチタスクシステム１００にデバッガ４０を接続することで、ユーザはマルチタスクシステム１００上で動作するプログラムのデバッグ作業を行うことができる。
【００２１】
タスクコントローラ１０は、タスクの実行順序をスケジューリングするタスクスケジューラ１１と、タスク毎に保持するコンテキストを格納するコンテキストメモリ１２とを備えている。コンテキストメモリ１２は、複数のコンテキスト格納領域を持ち、タスク毎に決められた位置にコンテキストを格納しておくことにより、コンテキスト格納位置から一意に特定のタスクを判別可能である。
【００２２】
タスクスケジューラ１１は、スケジューリングに従って次回実行タスクを決定し、コンテキストメモリ１２に通知する。コンテキストメモリ１２は、通知されたタスクに該当するコンテキスト格納位置からコンテキストを読み出し、プロセッサ２０に転送する。
【００２３】
プロセッサ２０は、切替え可能な複数のレジスタセットを持ったレジスタバンク２１を備えている。
【００２４】
割込みコントローラ３０は、次回実行タスクとユーザ指定タスクを比較するタスク比較部３１と、ハードウェア割込みを発生させてプログラムの実行を停止する割込み発生部３２とを備えている。タスク比較部３１は、タスクコントローラ１０からプロセッサ２０へのコンテキスト転送時に、転送されたコンテキストの格納位置から次回実行タスクを判別し、保持しておく。タスク比較部３１は、ユーザからの入力によるユーザ指定タスクをデバッガ４０を通じて受け取り、保持しておく。そしてプロセッサ２０によるレジスタセットの切替え時に、タスク比較部３１で保持している次回実行タスクとユーザ指定タスクを比較する。タスク比較部３１での比較の結果、同じタスクの場合にのみ割込み発生部３２にハードウェア割込み発生を依頼する。比較結果が異なる場合は実行を継続させる。タスク比較部３１からの通知を受け取った割込み発生部３２はハードウェア割込みを発生させ、プログラムの実行を停止させる。
【００２５】
いま、２つのタスクＡ，Ｂとそれに対応するコンテキストＡ，Ｂが存在するプログラムにおいて、タスクのスケジューリングがＡ→Ｂ→Ａとなっているとする。そして、タスクＡの最後の命令からステップ実行する場合を想定する。
【００２６】
従来の技術の場合には、ステップ実行に伴って、タスク切替えが発生し、タスクＢの最初の命令でプログラム実行が停止する。この場合、ユーザはタスクＡに着目したデバッグを意図しているにも関わらず、タスクＢに着目することになってしまう。
【００２７】
次に、上記のように構成された本実施の形態のプログラムデバッグ装置の動作を説明する。ここでの状況は上記と同様であるとする。
【００２８】
まず、タスクＡの最後の命令で停止しているため、レジスタバンク２１にはコンテキストＡが格納されている。プログラムの実行を開始すると、タスクコントローラ１０は次回実行タスクであるタスクＢのコンテキストをプロセッサ２０に転送する。プロセッサ２０は、複数のレジスタセットを持ったレジスタバンク２１において、現在使用していないレジスタセットに転送されてきたコンテキストＢを格納する。次いで、プロセッサ２０は、コンテキストＡのレジスタセットとコンテキストＢのレジスタセットを切替え、これにより実行タスクをタスクＡからタスクＢに切替える。
【００２９】
割込みコントローラ３０は、タスクコントローラ１０からプロセッサ２０へコンテキストＢを転送したときに、コンテキストＢに対応したタスクＢを次回実行タスクとして保持しておく。またデバッガ４０から、ユーザが着目しているタスクであるタスクＡをユーザ指定タスクとして受け取り、割込みコントローラ３０で保持しておく。
【００３０】
そして、プロセッサ２０によるレジスタセットの切替えが発生したときに、割込みコントローラ３０におけるタスク比較部３１は次回実行タスクとユーザ指定タスクを比較する。当初は、比較対象が次回実行タスクＢとユーザ指定タスクＡとなっていて、異なるタスクであるため、不一致と判定し、その結果を割込み発生部３２に伝えると、割込み発生部３２はハードウェア割込みを発生せず、結果として、プロセッサ２０はタスクＢの実行を継続する。
【００３１】
プロセッサ２０がタスクＢの実行を継続し、タスクＢの最後の命令まで来たとする。このとき、タスクコントローラ１０は上記と同様に次回実行タスクであるタスクＡのコンテキストをプロセッサ２０へ転送する。割込みコントローラ３０は次回実行タスクＡの保持を行う。そして、プロセッサ２０によるレジスタセットの切替えが発生したときに、再度、割込みコントローラ３０で次回実行タスクとユーザ指定タスクの比較を行い、今度は、比較対象が次回実行タスクＡとユーザ指定タスクＡであるため、同じタスクであると判定し、その結果を割込み発生部３２に伝えると、割込み発生部３２はハードウェア割込みを発生し、結果として、プロセッサ２０はプログラムの実行を停止する。
【００３２】
以上のように本実施の形態によれば、ハードウェアがタスクを制御するマルチタスクシステムにおいても、ユーザが指定したタスクでのみプログラムの実行を停止させることができ、特定のタスクに着目したデバッグ作業を可能にするとともに、タスク切替え時のプログラム実行状況の把握を可能にする。
【００３３】
（実施の形態２）
上記の実施の形態１においては、次回実行タスクとユーザ指定タスクとの比較を通じて、特定の注目タスクでプログラム実行を停止させるように構成している。これに対して、本発明の実施の形態２は、注目タスクに対応したコンテキスト格納位置へのアクセスのチェックを通じて、注目タスクでプログラム実行を停止させるように構成し、リアルタイム性を向上させるものである。
【００３４】
図２は実施の形態２におけるマルチタスクシステム２００の構成を示すブロック図である。以下では、実施の形態１との比較において異なる部分を中心に説明する。図２において、実施の形態１の図１におけるのと同じ符号は同一構成要素を指している。
【００３５】
タスクコントローラ１０は実施の形態１と同様にタスクのコンテキストを格納し、コンテキストの格納位置によってタスクを一意に判別することが可能である。
【００３６】
割込みコントローラ３０は割込み発生部３３を備えている。割込み発生部３３は、デバッガ４０からの割込み設定要求を受け取ったときにのみ機能し、プロセッサ２０からレジスタセット切替えの通知を受け取ったときにハードウェア割込みを発生させる機能を持つ。
【００３７】
デバッガ４０は、インタフェース部４１とブレークポイント設定部４２とを備えている。インタフェース部４１は、ユーザから着目タスクの指定を受け、そのユーザ指定タスクをブレークポイント設定部４２に通知する。ブレークポイント設定部４２は、インタフェース部４１から通知されたユーザ指定タスクのコンテキスト格納位置に対してブレークポイントを設定する。また、割込み発生部３３に対して、割込み設定要求を通知する。
【００３８】
次に、上記のように構成された本実施の形態のプログラムデバッグ装置の動作を図３のフローチャートに基づいて説明する。ここで、実施の形態１と同様に、タスクＡ，Ｂとそれに対応するコンテキストＡ，Ｂが存在するプログラムにおいて、タスクのスケジューリングがＡ→Ｂ→Ａとなっており、タスクＡの最後の命令からステップ実行した場合について説明する。ここで、タスクＡの最後の命令で停止しており、レジスタバンク２１にはコンテキストＡが格納されているものとする。
【００３９】
まずステップＳ１において、デバッガ４０におけるブレークポイント設定部４２は、ユーザ指定タスクＡのコンテキスト格納位置へのアクセス発生をデバッガ４０に通知するためのブレークポイントを設定する。
【００４０】
次いでステップＳ２において、プログラムを実行する。これに伴い、タスクコントローラ１０におけるコンテキストメモリ１２内の次回実行タスクへのアクセスが行われる。
【００４１】
次いでステップＳ３において、ユーザ指定タスクＡのコンテキスト読み出しが生じデバッガ４０がブレーク成立を検知したか否か、すなわち、タスクＢからタスクＡへのタスクの切替えが発生したか否かを判定する。ステップＳ１で設定したブレークポイントはコンテキストＡに対してであるので、コンテキストＢへのアクセス発生時にはブレークは成立しない。成立しないと判定したときは、ステップＳ４に進んで、タスクの切り替えを行い、ステップＳ２に戻り、プログラムの実行を継続する。
【００４２】
一方、プログラムの実行を継続し、タスクＢの最後の命令まで来たときに、次回実行タスクであるタスクＡのコンテキストへのアクセスを行う。このときにアクセスされるコンテキストはコンテキストＡであるため、ステップＳ１で設定したブレークが成立する。そこで、ステップＳ３の判断において、ユーザ指定タスクＡのコンテキスト読み出しが生じデバッガ４０がブレーク成立を検知したと判定したときは、ステップＳ５に進んで、割込みコントローラ３０に対してハードウェア割込み設定を要求する。
【００４３】
次いでステップＳ６において、割込みコントローラ３０の割込み発生部３３は、プロセッサ２０からのレジスタセット切替えの通知を受けるとハードウェア割込みを発生させる。
【００４４】
次いでステップＳ７において、プロセッサ２０はタスクＡの最初の命令でプログラム実行を停止する。
【００４５】
以上のように本実施の形態によれば、タスク切替え時にプログラムを停止させることなく、ユーザはプログラムの実行状態やタスク切替えのタイミングを知ることができる。また、着目していないタスクの実行時にはプログラムを停止させず、着目したタスクに対してのみプログラムを停止させることが可能になり、リアルタイム性を維持した状態でデバッグ作業を行うことが可能になる。
【産業上の利用可能性】
【００４６】
本発明の技術は、ハードウェアがタスクを制御するマルチタスクシステムにおけるプログラムデバッグ装置として有用である。
【図面の簡単な説明】
【００４７】
【図１】本発明の実施の形態１におけるマルチタスクシステムとデバッガの構成を示すブロック図
【図２】本発明の実施の形態２におけるマルチタスクシステムとデバッガの構成を示すブロック図
【図３】本発明の実施の形態２におけるユーザ指定タスクでのプログラム停止処理の動作手順を示すフローチャート
【符号の説明】
【００４８】
１０  タスクコントローラ
１１  タスクスケジューラ
１２  コンテキストメモリ
２０  プロセッサ
２１  レジスタバンク
３０  割込みコントローラ
３１  タスク比較部
３２，３３  割込み発生部
４０  デバッガ
４１  インタフェース部
４２  ブレークポイント設定部
１００，２００  マルチタスクシステム
【図１】
2006344109.tif 000003
【図２】
2006344109.tif 000004
【図３】
2006344109.tif 000005