ポストPC時代のキーワード「エンベデッド」のすべて ――転換点はカー・ナビゲーション・システム
●デバッガの拡張プラグインAPIの例
ここでは,米国Metrowerks社の開発ツールCodeWarriorのマルチタスク・デバッガ(http://www.metrowerks.co.jp/Products/Embedded/)の拡張APIを一例として紹介する.
CodeWarriorのデバッガは,リアルタイム・カーネルを搭載したターゲット・システムの情報をリモートで獲得したり制御を行うためのプラグインを組み込むことができる(写真5).ホスト環境はWindows(Win32)で,マルチタスク・デバッガのためのプラグインはCOM(Component Object Model)で実装されている.マルチタスク・デバッガ・プラグインは,直接のターゲット・システムとは通信を行わない.ホスト・ターゲット間のデバッグ・インターフェース自体はデバッガ本体に任せ,デバッガを介してターゲット・システムの情報を獲得,制御している.マルチタスク・デバッガのためのプラグインAPIを表7にまとめた.
CodeWarriorのマルチタスク・デバッガはプロセス・モデルのOSとタスク・モデルのOSに対応している.タスク・モデルのOSではアプリケーション全体を一つのプロセスとして認識し,そのなかで各タスクのタスクIDを認識する.
●OSごとに拡張プラグインAPIを用意しなければならない
ここではCodeWarriorを例にデバッガの拡張APIを紹介したが,機能的には一般的なものであり,ほかの組み込み系のデバッガでもこのようなAPIを備えている.ただし,こうしたAPIを使ってリアルタイムOSのマルチタスク・デバッガを開発するためには,それぞれのOSの内部情報(タスク・コントロール・ブロックなど)に合わせてプラグインを毎回作りこむ必要がある.
今後ITRON専門委員会でデバッガとITRONのインターフェース仕様が標準化されれば,ITRONの各社からの実装ごとにプラグインを作り込む必要がなくなり画期的だ.ITRON以外のOSもこうしたデバッグ標準インターフェースを実装すればいっそう好ましい.
〔写真5〕CodeWarriorのマルチタスク・デバッガの画面
〔表7〕 マルチタスク・デバッガのためのプラグインAPI一覧
(CodeWarriorの例)
プラグインAPI
|
機 能
|
GetCurrentThread | 現在実行状態にあるスレッド(タスク)IDを獲得する. |
GetProcesses | 現在ターゲット上で実行されているプロセスのIDを獲得する. |
GetProcessInformation | 現在ターゲット上で実行されているプロセスの情報を獲得する. |
GetProcessThreads | 現在ターゲット上で実行されているプロセス下にあるスレッドのリストを獲得する. |
GetThreadInformation | 現在ターゲット上で実行されているプロセス下にあるスレッドの情報を獲得する. |
InstallNubMenu | マルチタスク・デバッグのためのデバッガ・メニューをインストールする. |
NotifyAboutToRun | プラグインにデバッガ本体がスレッドの実行を再開しようとしていることを通 知する. |
NotifyReturnFromRun | スレッドがブレーク・ポイント,例外またはその他の理由により停止されたことをデバッガか らプラグインに通知する. |
NotifyShutDown | デバッガがデバッグ・セッションを終了しようとしていることをプラグインに通 知する. |
ProcessExists | デバッガはターゲット・システムのデバッグで実行されているプログラムのデバッグにプラグ インが必要かどうか最初にこの関数を呼び出して確定する. |
ReadThreadRegisters | OSによりサスペンドされているスレッドのレジスタ情報を獲得する.実行中のスレッドのレ ジスタ情報はデバッガ本体によって別のメカニズムで獲得する. |
WriteThreadRegisters | OSによりサスペンドされているスレッドのレジスタ値を変更する.実行中のスレッドのレジ スタ値はデバッガ本体によって別のメカニズムで変更する. |