(57)【特許請求の範囲】
【請求項１】
データを含む信号の送受信処理を実行する通信処理部と、
デバッグ対象となる本体プログラムと、少なくとも前記デバッグ支援処理に係るデバッグコマンドに関するデータが設定されており、前記本体プログラムの誤りを検出するデバッグ支援処理を行うためのデバッグプログラムとを記憶する、書き換え可能な記憶部に記憶されている前記デバッグコマンドに関するデータに基づいて、前記通信処理部が受信した信号に係るデータが前記デバッグコマンドであるかどうかを判定するコマンド判定部及び前記デバッグコマンドに関するデータに規定された前記本体プログラムの所定実行位置におけるデバッグ情報のデータを検出して記録するデバッグ情報格納部を有し、前記本体プログラムに基づく処理を実行中に、前記所定実行位置における前記デバッグ情報のデータを前記本体プログラムから検出してデバッグ情報格納部に記録し、前記コマンド判定部が前記受信した信号に係るデータが前記デバッグコマンドであると判定すると、そのデバッグコマンドに対応する前記デバッグ情報のデータを含む信号を前記通信処理部に送信させる処理を行う記述プログラム解釈部と
を備えることを特徴とするプログラムデバッグ支援装置。
【請求項２】
デバッグ対象となる本体プログラムと、少なくとも前記デバッグ支援処理に係るデバッグコマンドに関するデータが設定されており、前記本体プログラムの誤りを検出するデバッグ支援処理を行うためのデバッグプログラムとを記憶する、書き換え可能な記憶部と、
データを含む信号の送受信処理を実行する通信処理部と、
前記通信処理部が受信した信号に係るデータが前記デバッグコマンドであるかどうかを、前記記憶部に記憶された前記デバッグコマンドに関するデータに基づいて判定するコマンド判定部及び前記デバッグコマンドに関するデータに規定された前記本体プログラムの所定実行位置におけるデバッグ情報のデータを検出して記録するデバッグ情報格納部を有し、前記本体プログラムに基づく処理を実行中に、前記所定実行位置における前記デバッグ情報のデータを前記本体プログラムから検出してデバッグ情報格納部に記録し、前記コマンド判定部が前記受信した信号に係るデータが前記デバッグコマンドであると判定すると、そのデバッグコマンドに対応する前記デバッグ情報のデータを含む信号を前記通信処理部に送信させる処理を行う記述プログラム解釈部と
を備えることを特徴とするプログラムデバッグ支援装置。
【請求項３】
前記通信処理部は、前記本体プログラムの処理に係るデータを含む信号と前記デバッグコマンドのデータを含む信号とを共通の入力インタフェースを介して受信することを特徴とする請求項１又は２記載のプログラムデバッグ支援装置。
【請求項４】
前記本体プログラムは、スタックによるデータ構造を利用する逆ポーランド記法に基づく言語で記述されたデータで構成され、
前記記述プログラム解釈部は、前記本体プログラムの所定位置における記述の処理を実行する際に、前記スタックに基づくデータをデバッグ情報のデータとして検出して記録し、前記デバッグコマンドに基づいて、前記検出したデバッグ情報のデータを含む信号を通信処理部に送信させることを特徴とする請求項１〜３のいずれかに記載のプログラムデバッグ支援装置。
【請求項５】
前記本体プログラム及び／又はデバッグプログラムをダウンロード処理して前記記憶部にプログラムを記憶させるダウンロード管理部をさらに備えることを特徴とする請求項１〜４のいずれかに記載のプログラムデバッグ支援装置。
【請求項６】
請求項１〜５のいずれかに記載のプログラムデバッグ支援装置を有し、前記本体プログラムに基づいて、前記通信処理部に接続される２以上の通信回線の間のプロトコル変換処理を行うことを特徴とする通信用アダプタ。
【請求項７】
少なくとも前記デバッグ支援処理に係るデバッグコマンドに関するデータが設定されており、また書き換え可能な記憶部に記憶された、デバッグ対象となる本体プログラムの誤りを検出するためのプログラムデバッグ支援処理プログラムであって、
前記本体プログラムに基づく処理を実行中に、前記デバッグコマンドに関するデータに規定された前記本体プログラムの所定実行位置におけるデバッグ情報のデータを検出して記録する処理と、
通信処理部が受信した信号に係るデータが前記デバッグコマンドであるかどうかを前記デバッグコマンドに関するデータに基づいて判定し、前記デバッグコマンドであると判定すると、そのデバッグコマンドに対応する前記デバッグ情報のデータを含む信号を前記通信処理部に送信させる処理と
をコンピュータに実行させることを特徴とするプログラムデバッグ支援処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば、組み込み機器に機能を実行させるために搭載するプログラムのデバッグ（バグ（プログラムの誤り）の修正）を支援するための処理装置及びその処理を実現するためのプログラムに関するものである。
【背景技術】
【０００２】
従来のプログラムデバッグ装置は、プログラム本体のほか、デバッグ支援処理（メモリに記憶された変数等の値の出力、レジスタの参照等）を行うためのコマンドのデータ（以下、デバッグコマンドという）を受信し、解釈し、実行し、その結果を返答する機能（プログラム）を行う手段を付加し、機能動作を行わせることにより、エミュレータ等を用いずにプログラム本体のデバッグ支援処理を直接行うことができるように構成している（例えば特許文献１参照）。
【０００３】
【特許文献１】特開平１１−１６７５０１号公報（第１頁〜４頁、第１図）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来のプログラムデバッグ支援処理装置では、デバッグコマンドの受信・解釈・実行・返答を実行する手段が予めファームウェア内に組み込まれる構成となっており、プログラム本体のデバッグのために必要な情報を得る（出力させる）ためには、レジスタやメモリ内の特定のアドレス値等、ハードウェアのリソースを直接指定する必要があった。従って、例えば高級言語等でプログラムが記述されているような、変数の値の参照など、直接どのハードウェアのリソースを参照すべきかを指定できない場合には、このような処理が困難であるという問題点があった。
【０００５】
また、デバッグ支援処理に係る各手段の機能が固定され、変更が容易でないため、例えば、デバッグコマンドについても、プログラム本体の処理に係るコマンド等のデータに応じて変更することが困難である。このため、プログラム本体の受信インタフェース（受信部）と、デバッグ用の手段の受信インタフェースが共有されている場合、インタフェースの違いにより特定できないため、プログラム本体の処理に係るデータ（コマンド等の制御信号）とデバッグコマンドとが（データの内容として）重ならないように通信しなければならないが、その設定が容易に行えないという問題点があった。
【０００６】
この発明は、上記のような問題点を解決するためになされたもので、エミュレータ等の高価な装置を利用しなくても、機器に組み込まれた高級言語で記述されたプログラム、主としてインタプリタで解釈されるスクリプト言語のプログラムについてもデバッグ支援処理を可能にするプログラムデバッグ支援処理装置を得るものである。
【０００７】
さらに、プログラムの処理に係るコマンドが拡張されたり書き換えられたりしたとき、プログラム本体の受信インタフェースとデバッグ用の手段の受信インタフェースが共有されている場合でも、デバッグコマンドに関する定義の設定を容易に変えることができ、プログラムの処理に係るデータとデバッグコマンドとが重ならないようにするプログラムデバッグ支援処理装置を得るものである。
【課題を解決するための手段】
【０００８】
この発明に係るプログラムデバッグ支援装置は、データを含む信号の送受信処理を実行する通信処理部と、デバッグ対象となる本体プログラムと、少なくともデバッグ支援処理に係るデバッグコマンドに関するデータが設定されており、本体プログラムの誤りを検出するデバッグ支援処理を行うためのデバッグプログラムとを記憶する、書き換え可能な記憶部に記憶されているデバッグコマンドに関するデータに基づいて、通信処理部が受信した信号に係るデータがデバッグコマンドであるかどうかを判定するコマンド判定部及びデバッグコマンドに関するデータに規定された本体プログラムの所定実行位置におけるデバッグ情報のデータを検出して記録するデバッグ情報格納部を有し、本体プログラムに基づく処理を実行中に、所定実行位置におけるデバッグ情報のデータを本体プログラムから検出してデバッグ情報格納部に記録し、コマンド判定部が受信した信号に係るデータがデバッグコマンドであると判定すると、そのデバッグコマンドに対応するデバッグ情報のデータを含む信号を通信処理部に送信させる処理を行う記述プログラム解釈部とを備える。
【発明の効果】
【０００９】
この発明によれば、本体プログラムだけでなく、デバッグプログラムについてもデータ変更可能な記憶部にデータとして記憶するようにしたので、本体プログラムのプログラム記述形式等に対応したデバッグプログラムを容易に記憶させ、記述プログラム解釈部に実行させることが可能になり、エミュレータ等の高価な装置を用いなくても、例えば、高級言語により記述されたプログラムに対応したデバッグプログラムに基づいてデバッグ支援処理を行うことができる。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
図１はこの発明の実施の形態１によるプログラムデバッグ支援装置を中心とする構成を示すブロック図である。本実施の形態では、家電機器とホームネットワークとを接続するための通信用アダプタ１００（以下、アダプタ１００という）の機能を実現するために組み込まれるプログラム（以下、本体プログラムという）をデバッグ対象のプログラムとして説明する。したがってアダプタ１００が、本体プログラムの処理を実行する装置であるとともに、実行装置自体が本体プログラムに係るデバッグを支援するためのプログラムデバッグ支援装置の役割を果たす。さらに具体的には、家電機器であるエアコンの制御を行うプロトコルと、家電機器同士を連携させつつ制御を行うホームネットワークの規格であるECHONET （ECHONET はECHONET コンソーシアムの商標）で規定されたプロトコルとの相互変換を行う本体プログラムのデバッグを支援する装置を例に説明する。
【００１１】
図２はアダプタ１００を利用して家電機器をECHONET に接続したホームネットワークの構成を示す図である。例えば、家電機器では、機種ごとの独自のプロトコルに従って動作の制御を行い、一方で、ECHONET では、規格化されたプロトコルに従って電文（各種データ等を含む信号）の送受信を行う。そのため、家電機器をホームネットワークに接続するアダプタ機能を実現する場合等において、プロトコル変換処理が必要になる。ここで、各家電機器のプロトコルに対応してプロトコル変換処理の手順をプロトコル変換プログラムとしておけば、プロトコル変換プログラムのみを書き換えて記憶手段に記憶させることで、（例えば物理的構成が）同じアダプタであれば異なる種類の家電機器に対応させることができ、ホームネットワークに各家電機器を接続することができる。そのため、プロトコル変換プログラムは、家電機器本体や、パーソナルコンピュータ、インターネット上に公開されたサーバなどの外部装置１１０からダウンロードできるようにし、アダプタ１００を外部装置１１０と接続すると、記憶部１０１の書き換え可能な記憶領域に書き込まれるようにする。
【００１２】
また、本実施の形態で例とするプロトコル変換プログラムは、アダプタ１００を構成するハードウェア（特に記述プログラム解釈部１０５等の機能を実現するＣＰＵ（Central Processing Unit ）等のデータ処理手段）に依存しないスクリプト言語（高級言語）で記述されているものとする。そのため、アダプタ１００がハードウェア的に異なっても同じプログラムで対応させることができる。
【００１３】
図１において、アダプタ１００は、プログラムを記憶する記憶部１０１、そのプログラムを外部装置１１０からダウンロード処理するプログラムダウンロード管理部１０２、記憶部１０１に記憶されたプログラムに記述された内容に基づいて処理を実行する記述プログラム解釈部１０５、及び、記述プログラム解釈部１０５と、電文中のデータを一時的に家電機器シミュレータ１１２（家電機器）、ECHONET のコントローラ１１６とが電文を送受信するための処理を行う通信処理部１０６から構成される。
【００１４】
ここで、アダプタ１００内の各部（特にプログラムダウンロード管理部１０２、記述プログラム解釈部１０５）に関しては、機器（ハードウェア）として独立して構成することもできるが、例えば、ＣＰＵ（Central Processing Unit ）を中心とするデータ処理手段（コンピュータ）でハードウェアを構成し、後述する各部によるフローチャートの手順（本体プログラム、デバッグプログラムに従って処理を行うための前段階としての手順）をあらかじめプログラム化してソフトウェア、ファームウェア等としてアダプタ１００内に記憶し、コンピュータに処理させることもできる。
【００１５】
記憶部１０１には、前述した本体プログラムが例えばファイル形式のデータとして記憶される（以下、記憶された本体プログラムの記述内容を本体プログラム記述部１０３という）。また、本体プログラムをデバッグするためのデバッグプログラムも同様にファイル形式のデータとして記憶される（以下、記憶されたデバッグプログラムの記述内容をデバッグプログラム記述部１０４という）。そして、デバッグプログラム記述部１０４は、さらに、デバッグコマンドの定義や処理に基づいて出力すべきデバッグ情報の指定に係る記述がなされたデバッグコマンド設定記述部１０７と、デバッグ情報を出力する実行手順が記述されたデバッグコマンド実行記述部１０８とからなる。後述するように、デバッグコマンド設定記述部１０７に記述された内容は、記述プログラム解釈部１０５が行う処理により、デバッグに係る処理を行う際に参照とするデータとしてデバッグ情報格納部１０９に登録され、格納される。そして、デバッグ情報格納部１０９は、通信処理部１０６が受信した電文内のデバッグコマンドに関して、その定義等に関するデータをデバッグコマンドデータとして登録したデバッグコマンド登録部１１６と、出力すべきデバッグ情報の指定等に関するデータをデバッグデータとして登録したデバッグデータ登録部１１７から構成される。これらについては後述する。
【００１６】
電文送受信部１１４から送信された電文を、アダプタ１００の通信処理部１０６が受信する。記述プログラム解釈部１０５のデバッグコマンド判定部１０５ａは、デバッグコマンド登録部１１６に登録したデバッグコマンドデータを参照して、電文中のデータがデバッグコマンドであるか否かを判定する。デバッグコマンドであると判定すると、デバッグプログラムによる処理を行うものと判定して、記述プログラム解釈部１０５は、デバッグコマンド実行記述部１０８の記述に従った処理を実行する。一方、デバッグコマンドでないと判定すると、本体プログラム記述部１０３の記述に従った処理を実行する。ここで、記述プログラム解釈部１０５が各プログラムの記述に基づく処理を行う際、後述するように辞書を参照して処理を行う。辞書記憶部１０５ｃは、この辞書に関するデータが登録され、記憶されている。また、記述プログラム解釈部１０５には、例えば、処理を実行中に、その処理に係る指示命令、データを例えば一時的に記憶しておくキャッシュメモリ（ＲＡＭ）、レジスタ等の処理記憶部１０５ｂを有するものとする。デバッグ支援処理においては、特に本体プログラムに基づく処理実行時における処理記憶部１０５ｂに記憶された変数、配列（バッファ等）の値をデバッグ情報として出力する等の処理が行われる。
【００１７】
家電機器シミュレータ１１２は、実際の家電機器の代わりに、デバッグ段階において、その家電機器に対応した通信電文、デバッグコマンド等のデータを含む電文を送受信するための装置であり、例えばパーソナルコンピュータ等によって構成される。ここで、家電機器シミュレータ１１２は、アダプタ１００に送信する電文を作成する電文作成部１１３と、アダプタ１００との間で電文の送受信電文を行う電文送受信部１１４及びアダプタ１００との間で送受信を行った電文内容を表示する電文表示部１１８から構成される。
【００１８】
コントローラ１１５は、ECHONET の電文を送受信する装置である。特に限定はしないが、家電機器シミュレータ１１２と同様に、パーソナルコンピュータ等によって構成されるシミュレータでも良い。以下、家電機器シミュレータ１１２とアダプタ１００（通信処理部１０６）との間を家電機器側とし、コントローラ１１５とアダプタ１００との間をECHONET 側とする。
【００１９】
図３は、プログラムダウンロード管理部１０２の処理動作を表すフローチャートを示す図である。接続端子（図示せず）等を介して、プログラムを保持した外部装置１１０にアダプタ１００が接続されると、ステップＳＴ３０１において、プログラムダウンロード管理部１０２は、例えば電圧の変化等により外部装置１１０との接続を検知する。接続により、プログラムダウンロード管理部１０２（アダプタ１００）とプログラム保持部（外部装置１１０）との間で通信が可能となる。次に、ステップＳＴ３０２で、プログラム保持部１１１に保持されたプログラムをダウンロード処理する。本体プログラム及び／又はデバッグプログラムは、それぞれ例えばファイル形式のデータとしてアダプタ１００の記憶部１０１に記憶される。そして、ステップＳＴ３０３において、記述プログラム解釈部１０５に処理を引き継ぎ実行させる。
【００２０】
図４は、アダプタ１００のプロトコル変換と通信処理における動作を記述した本体プログラムの例を示す図である。ここで、プログラムは１又は複数の実行コードで構成される。実行コードは、記述プログラム解釈部１０５においてインタプリタにより逐次に実行処理を行う際の単位となる。本実施の形態においては、プログラムを記述する言語としてForth を用いる。Forth はスタック（ＬＩＦＯ（Last In  First Out）によるデータ構造）を利用した逆ポーランド記法に基づく言語であり、構文解析が不要なため、処理系が小さく、省資源（記憶容量を必要としない）でインタプリタが動作するという特徴を持つ。このため、家電機器に接続する通信用のアダプタのように、低コストで実現することが要求される機器に搭載するインタプリタとしては最適な言語である。
【００２１】
Forth では、実行すべき処理を表すデータをWordと呼ぶ。実行コードは、Wordと、Wordに基づく処理のためのデータとで構成され、データ、Wordの順に記述される。各Wordについては、その処理内容のデータとあらかじめ定義づけられて（関連づけられて）、辞書として辞書記憶部１０５ｃに登録され、管理されている。実行コードに記述された文字列等のデータにおいて、辞書として登録されていればWordであり、登録されていなければ処理のためのデータとなる。また、Wordはあらかじめ決められたものだけではなく、さらに処理内容を定義して辞書として辞書記憶部１０５ｃにデータとして登録することで、新たな処理機能を追加できる。プログラムの解釈・実行において、記述プログラム解釈部１０５は、プログラムを処理する際、読み込んだ文字列が辞書に存在しない場合は処理のためのデータとみなしてスタックに積み、辞書に存在する場合は、Wordとみなして（その時点において）スタックに積まれた各データに対して処理を実行する。
【００２２】
例えば、図４では、ANS規格で規定されたForthのWord（Programming Languages-Forth X3J14 dpANS-6 -June 30,1993）に加え、プロトコル変換用の拡張Wordとして、「SET_SEND_EPC」、「GET_EPC 」、「FROM_ECHONET」、「TO_EQUIPMENT」、及び「FROM_EQUIPMENT 」というWordを定義し、登録して用いるものとする。
【００２３】
「SET_SEND_EPC」は、ECHONET プロパティとその値のデータを、ECHONET 規格の電文に変換してECHONET 側に送信する処理を記述プログラム解釈部１０５に行わせるためのWordである。「GET_EPC 」は、ECHONET 側からの受信からECHONET プロパティの値を取得する処理を行わせるためのWordである。ここで、ECHONET プロパティとは、例えば、エアコンにおける風量設定状態等、家電機器に応じて設定可能なプロパティのコードを表すものとする。そして、そのコードに対する値はそれぞれECHONET の規格で定められている。
【００２４】
「FROM_ECHONET」は、ECHONET 側からの電文の受信の有無をチェックする処理を行わせるWordである。「TO_EQUIPMENT」は、送信バッファに格納されたデータを含む電文を家電機器側に送信処理させるWordである。「FROM_EQUIPMENT」は、家電機器側から受信した電文中のデータ（コマンド等。以下、受信データという）を受信バッファに格納させる処理を行わせる、受信処理を行うためのWordである。
【００２５】
次に、記述プログラム解釈部１０５が行う処理内容について図４の本体プログラムに基づいて説明する。ここで、アダプタ１００と接続する家電機器がエアコン（空気調和装置）であるものとして説明する。１行目は、このプログラムで扱う数値が１６進数であることを示している。２行目と３行目は、受信バッファとなる「RV_BUF」と送信バッファとなる「TR_BUF」とがそれぞれ２２バイトの配列であることを宣言している。４行目と５行目は、「IDT 」と「EDT 」がそれぞれ整数型の変数であることを宣言している。
【００２６】
７行目から１４行目は、エアコン（家電機器）側からの受信電文を解釈するWord「PROC_RV_DATA」の処理内容を定義している。９行目から１２行目は、エアコン側からの受信電文が格納された受信バッファ「RV_BUF」の８バイト目の値が、電源ＯＮ／ＯＦＦの状態を示すことを仮定して記述したコードである。例えば「RV_BUF」の８バイト目の値が「0 」のときはエアコンの電源がＯＦＦであり、「1 」のときはエアコンの電源がＯＮを表すものとする。９行目で、受信バッファ「RV_BUF」の８バイト目を取り出し、変数「IDT 」に代入処理する。１０行目で、「IDT 」の値が「0 」であれば、変数「EDT 」に「31」を代入処理し、１１行目で、「IDT 」の値が「1 」であれば、変数「EDT 」に「30」を代入処理する。１２行目で、Word「SET_SEND_EPC」を実行処理し、「EDT 」の値を電文に含み、ECHONET 側に送信する処理を行う。ここで、１２行目の「80」はECHONET 規格で規定された電源ＯＮ／ＯＦＦを表すECHONET プロパティである。ECHONET 規格では、ECHONET プロパティ「80」における値が「31」のときは電源ＯＦＦを、「30」のときは電源ＯＮを表すことが規定されている。つまり、１２行目は、ECHONET 規格の仕様に変換されたプロパティの値をデータとして送信電文に含み、ECHONET 側に送信する処理を行うことになる。
【００２７】
１６行目から２５行目は、エアコン側に送信する電文を設定する処理を行うWord「PROC_TR_DATA」の処理内容を定義している。１７行目では、エアコンに送信する電文を格納する送信バッファ「TR_BUF」の０バイト目に値「FC」を代入処理する。１８行目では「TR_BUF」の１バイト目に値「41」を代入処理する。２０行目から２３行目は「TR_BUF」の８バイト目の値が、エアコンの電源ＯＮ／ＯＦＦの状態を示すことを仮定して記述したコードである。「TR_BUF」の８バイト目の値が「0 」のときはエアコンの電源をＯＦＦに設定し、「1 」のときはエアコンの電源をＯＮに設定するものとする。２０行目で、Word「GET_EPC 」によって、ECHONET 側から受信したECHONET プロパティ「80」に対する値を取得して、変数「EDT 」に代入処理する。２１行目で、「EDT 」の値が「31」であれば、変数「IDT 」に「0 」を代入処理し、２２行目で、「EDT 」の値が「30」であれば、変数「IDT 」に「1 」を代入処理する。２３行目で、「IDT 」の値を送信バッファ「TR_BUF」の８バイト目に代入処理する。
【００２８】
２７行目から３９行目のメイン処理は、無限ループになっており、ECHONET 側から電文を受信したら、ECHONET プロパティ及びその値をエアコン側に送信する電文に変換してエアコン側に送信し、エアコン側から電文を受信したら、ECHONET プロパティに変換して電文をECHONET 側に送信する、という処理を行う。
【００２９】
３０行目では、Word「FROM_ECHONET」によって、ECHONET 側からの受信をチェックしている。「FROM_ECHONET」は、受信があった場合は値「1 」をスタックに積み、受信がなかった場合は値「0 」をスタックに積む。３１行目から３４行目は、ECHONET 側から受信があった場合の処理内容を表す。３２行目でWord「PROC_TR_DATA」を呼び出して、１６行目から２５行目に記述された内容に基づく処理を実行し、エアコン側への送信電文の内容を送信バッファ「TR_BUF」に格納する。３３行目で、Word「TO_EQUIPMENT」によって、「TR_BUF」の内容を送信電文としてエアコン側に送信処理する。
【００３０】
一方、３５行目では、受信処理のためのWord「FROM_EQUIPMENT」によって、エアコン側からの受信をチェックする。「FROM_EQUIPMENT」は、受信があった場合は受信電文を受信バッファ「RV_BUF」に格納して値「1 」をスタックに積み、受信がなかった場合は値「0 」をスタックに積む。３６行目から３８行目は、エアコン側から受信があった場合の処理を表す。３７行目でWord「PROC_TR_DATA」を呼び出して、７行目から１４行目に記述された内容に基づく処理を実行し、送信バッファ「RV_BUF」の各バイトの値をECHONET プロパティに変換してECHONET 側に送信電文として送信する。
【００３１】
図５は本体プログラムの別例を表す図である。図４では、説明のために、本体プログラムにコメントを付与してインデントを施したが、実際にダウンロードされる本体プログラムの記述としては、図５のように、コメントや余分な空白を削除した形式であっても良い。
【００３２】
図６は、デバッグプログラムの例を示す図である。本実施の形態では、デバッグプログラムについても、本体プログラム同様、プログラムの記述をForth によって行い、デバッグ用の拡張Wordを加えた言語を用いて記述している。本例で用いる「SET_DBG_CMD 」は、本体プログラム上の指定された位置で受信するデバッグコマンドに関するデータをデバッグコマンド登録部１１６に登録する処理を記述プログラム解釈部１０５に行わせるためのWordである。また、「SET_DBG_DATA」は、本体プログラム上の指定された位置におけるデータの値を記録する処理を行わせるため、デバッグデータをデバッグデータ登録部１１８に登録処理するためのWordである。「GET_DBG_CMD 」は、アダプタ１００が受信した電文がデバッグコマンドであった場合に、デバッグコマンドを取得する処理を行わせるためのWordである。「DUMP_DATA 」は、デバッグ情報に係るデータの内容を出力する処理を行わせるためのWordである。
【００３３】
次に、記述プログラム解釈部１０５が行うデバッグ処理内容について図６のデバッグプログラムの記述に基づいて説明する。１行目は、このプログラムで扱う数値が１６進数であることを示している。２行目は、「CODE」が整数型の変数であることを示している。
【００３４】
３行目から１１行目は、デバッグコマンド設定記述部１０７であることを示すWordである「RGST_DBG_CMD」の処理内容を定義している。４行目の「SET_DBG_CMD 」の１つ右のデータ「1 」は、デバッグコマンド情報を識別するコマンドIDのデータである。２つ右の「64」は、本体プログラム上において、デバッグコマンドの受信を確認（チェック）する位置（ポイント）を表すデータである。本実施の形態では、本体プログラム上の位置を、先頭から何番目のシンボル（名前）であるかという値で示すものとする。ここでは、「64」は図４のＬＯＣ４０１の位置を示すものとする。３つ右の「2 」は、デバッグコマンドの長さを表すものとする。５つ右と４つ右の「FF 1」は、デバッグコマンドのバイト列を示すものとする。４行目の記述は、図４のＬＯＣ４０１の位置における受信チェックによって得られるバイト列「FF 1」のデバッグコマンドのコマンドIDを「1 」と定義したことを示す。
【００３５】
同様に、５行目の記述は、図４のＬＯＣ４０２の位置における受信チェックによって得られるバイト列「FF 2」のデバッグコマンドのコマンドIDを「2 」と定義したことを示す。６行目の記述は、図４のＬＯＣ４０３の位置における受信チェックによって得られるバイト列「FF 3」のデバッグコマンドのコマンドIDを「3 」と定義したことを示す。
【００３６】
７行目において、Word「SET_DBG_DATA」の１つ右の「1 」は、出力すべきデバッグ情報のデバッグデータを識別するデータIDである。２つ右の「1 」は記録すべきデータのタイプを表す値である。「1 」のときは変数の値を、「2 」のときは配列の値を、「3 」のときはスタックの状態を記録するものとする。３つ右の「78」は、本体プログラム上でデバッグ情報を記録する位置である。本実施の形態では、プログラム上の位置を、先頭から何番目のシンボルであるかという値で示すものとする。ここでは、「78」は図４のＬＯＣ４０２の位置を示すものとする。５つ右と４つ右の「C"EDT"」は「EDT 」というシンボルを表す記述である。７行目の記述は、図４のＬＯＣ４０２の位置における変数「EDT 」の値の記録をデータID「1 」と定義したことを示す。
【００３７】
８行目は、記録するデータが配列の場合の記述である。「SET_DBG_DATA」の４つ右の「16」は、配列長（１０進数では２２バイト）を示す。８行目の記述は、図４のＬＯＣ４０１の位置における２２バイトの配列「RV_BUF」の値の記録をデータID「2 」と定義したことを示す。９行目と１０行目は、記録するデータがスタックの場合の記述である。本体プログラムがスタックを利用した逆ポーランド記法に基づいた言語で記述されている場合、スタックの内容を確認する機能を設けることにより、スタックのオーバーフローなど、入出力される電文内容の確認だけでは検出しにくいバグも検出可能となる。スタックの状態を記録する場合は、シンボルの指定は不要である。９行目の記述は、図４のＬＯＣ４０３の位置におけるスタックの状態の記録をデータID「3 」と定義し、１０行目の記述は、図４のＬＯＣ４０４の位置におけるスタックの状態の記録をデータID「4 」と定義したことを示す。
【００３８】
１３行目から２５行目は、デバッグコマンド実行記述部１０８であることを示すWordである「EXEC_DBG_CMD」の処理内容を定義している。このデバッグコマンド実行記述部１０８の記載に基づいて記述プログラム解釈部１０５が行う処理内容については後述する。
【００３９】
なお、プログラム保持部１１１は、必ずしも本体プログラムとデバッグプログラムの両方を保持している必要はない。例えば本体プログラムのデータのみ保持している場合は、そのデータを記憶部１０１に記憶させてもよい。このときは本体プログラム記述部１０３の記述内容が変更される。また、同様に、デバッグプログラムのデータのみ保持している場合は、デバッグプログラム記述部１０４の記述内容が変更される。また、本体プログラム記述記憶部１０３とデバッグプログラム記述記憶部１０４を、物理的に別の記憶手段で記憶させるようにしてもよい（この場合、プログラムダウンロード管理部１０２は、ダウンロードしたプログラムが本体プログラムであるかデバッグプログラムであるかを判断してそれぞれの記憶手段に記憶させる必要がある）。また、本体プログラムとデバッグプログラムとをそれぞれ別のファイル形式のデータとして記憶させているが、別のファイルである必要は無く、同一のファイル中に記述してもよい（この場合、記述プログラム解釈部１０５は、Wordによって機能実行の処理かデバッグに係る処理かの区別を行う）。
【００４０】
プログラムダウンロード管理部１０２により、上記のような本体プログラムとデバッグプログラムが、それぞれ本体プログラム記述記憶部１０３とデバッグプログラム記述記憶部１０４に格納された後、ステップＳＴ３０３によって、記述プログラム解釈部１０５が処理を実行する。
【００４１】
図７は、記述プログラム解釈部１０５の処理動作のフローチャートを表す図である。まず、ステップＳＴ７０１において、記述プログラム解釈部１０５は、例えば、ファイル名等により、デバッグプログラムが記述された部分のデータを記憶部１０１から検索し、デバッグプログラムに記述された処理を開始する。記述プログラム解釈部１０５は、Word「RGST_DBG_CMD」に基づいて、そのWordに係る実行コードに記述されたデータを、デバッグコマンドデータとしてデバッグコマンド登録部１１６に登録させる。また、Word「SET_DBG_DATA」が記述されていると判断すると、そのWordに係る実行コードに記述されたデータを、デバッグデータとしてデバッグデータ登録部１１７に登録させる。
【００４２】
図８は、図６のデバッグコマンド設定記述部１０７の記述に基づいて登録処理されたデバッグコマンド登録部１１６の内容を示す図である。ここで、各データについてはテーブル形式で登録されるものとする。コマンドID格納欄８０１は、各デバッグコマンドを識別するコマンドIDのデータを格納する欄である。デバッグコマンド受信ポイント格納欄８０２は、デバッグコマンドの受信確認をする本体プログラム上のポイント（位置）のデータを格納する欄である。コマンド長格納欄８０３は、登録されるデバッグコマンドの長さのデータを格納する欄である。デバッグコマンドバイト列格納欄８０４は、デバッグコマンドのバイト列のデータを格納する欄である。
【００４３】
図９は、図６のデバッグコマンド設定記述部１０７の記述に基づいて登録処理されたデバッグデータ登録部１１７の内容を示す図である。ここでも、各データについてテーブル形式で登録されているものとする。データID格納欄９０１は、出力すべき各デバッグ情報のデバッグデータを識別するデータIDのデータを格納する欄である。デバッグ情報設定ポイント格納欄９０２は、デバッグ情報を記録する処理を行う本体プログラム上の位置のデータを格納する欄である。データ種別格納欄９０３は、デバッグ情報が、変数であるか、シンボルであるか、スタックであるかの種別を表すデータを格納する欄である。デバッグシンボル格納欄９０４は、デバッグ種別が変数または配列のときに設定され、変数または配列のシンボルを格納する欄である。型格納欄９０５は、デバッグ種別が変数または配列のときに設定され、変数または配列のデータ型（type）のデータを格納する欄である。配列サイズ格納欄９０６は、デバッグ種別が配列のときに設定され、配列のサイズのデータを格納する欄である。データ内容格納欄９０７は、デバッグ情報の内容のデータを格納する欄である。
【００４４】
図１０は、ＳＴ７０２を詳細化した、記述プログラム解釈部１０５が行うデバッグ支援に係る本体プログラムの実行処理時に行う処理動作を示したフローチャートを表す図である。ＳＴ７０１によってデバッグを行う際に参照するデータをデバッグ情報格納部１０９に登録処理した後、ＳＴ７０２によって、デバッグ支援のために本体プログラムの処理を実行する。まず、デバッグ支援処理段階を実行する。ステップＳＴ１００１で、本体プログラムの読み込み位置を更新（設定）する。登録処理の直後であれば、読み込み位置は本体プログラム記述記憶部１０３の先頭に設定し、その他の場合であれば、処理を実行したシンボルの次のシンボルに更新する。
【００４５】
次に、ステップＳＴ１００２で、読み込み位置がデバッグ情報設定ポイントであるか否かを判定する。デバッグ情報設定ポイントは、デバッグデータ登録部１１７のデバッグ情報設定ポイント格納部９０２に格納されているため、記述プログラム解釈部１０５は、判定の際にデバッグ情報設定ポイント格納欄９０２に登録されたデータを参照する。
【００４６】
「YES 」と判定すれば、ステップＳＴ１００３で処理記憶部１０５ｂに記憶されたデータのうち、対応するデバッグ情報を記録する処理を行う。例えば図９のデバッグデータ登録部１１７に従うと、読み込み位置が「64」（図４のＬＯＣ４０１）であれば配列「RV_BUF」の値を、読み込み位置が「78」（図４のＬＯＣ４０２）であれば変数「EDT 」の値を、読み込み位置が「12C 」（図４のＬＯＣ４０３）であればスタックの状態を、読み込み位置が「134 」（図４のＬＯＣ４０４）であればスタックの状態を、デバッグデータ登録部１１７のデータ内容格納欄９０７にデバッグ情報として記録する。
【００４７】
図１１はデバッグ情報設定ポイントにおける最新の値が、データ内容格納欄９０７にデータとして記録されたデバッグデータ登録部１１７の例を示す図である。ＳＴ１００３の処理を行った結果、デバッグデータ登録部１１７のデータ内容格納欄９０７には、常に各デバッグ情報について、デバッグ情報設定ポイントにおける最新の値がデータとして記録された状態となる。
【００４８】
次に、ステップＳＴ１００４で、読み込み位置がデバッグコマンド受信ポイントであるか否かを判定する。デバッグコマンド受信ポイントのデータは、デバッグコマンド登録部１１６のデバッグコマンド受信ポイント格納欄８０２に格納されており、判定の際には登録されたデバッグコマンドデータを参照する。
【００４９】
「YES 」と判定すれば、ステップＳＴ１００５で、デバッグコマンド判定部１０５ａが、受信電文に基づく未処理の受信データをチェック処理する。ステップＳＴ１００６において、デバッグコマンド判定部１０５ａは、デバッグコマンド登録部１１６に登録されているデバッグコマンド受信ポイント欄８０２とデバッグコマンドバイト列欄８０４のデータを参照し、未処理の受信データと比較する。そして、受信データがデバッグコマンド登録部１１６に登録されているデバッグコマンドと合致したかどうかを条件にして判定を行う。「YES 」と判定すれば、ステップＳＴ１００７において、デバッグプログラム中のデバッグコマンド実行記述部１０８に記述された実行コードに基づいて処理を実行する。
【００５０】
図６の１３行目から２５行目は、デバッグコマンド実行記述部１０８を示すWordである「EXEC_DBG_CMD」の処理内容を定義している。まず、Word「GET_DBG_CODE」によって、デバッグコマンド登録部１１６を参照して、受信データに基づくコマンドIDのデータを返す処理を実行する。「DUMP_DATA 」は、データID９０１に対応するデータを出力するWordである。図６のデバッグコマンド実行記述部１０８の記述に従うと、受信したデバッグコマンドのコマンドIDが「1 」のときは、データIDが「2 」に対応するデータである読み込み位置が図４のＬＯＣ４０１のときの配列「RV_BUF」の値（データ内容格納欄９０７に記録されたデバッグ情報のデータ。以下同じ）をデータとして出力する。コマンドIDが「2 」のときは、データIDが「1 」に対応するデータである読み込み位置が図４のＬＯＣ４０２のときの変数「EDT 」の値をデータとして出力する。コマンドIDが「3 」のときは、データIDが「3 」に対応するデータである図４の読み込み位置がＬＯＣ４０３のときのスタックの状態と、データIDが４に対応するデータである図４の読み込み位置がＬＯＣ４０４のときのスタックの状態をデータとして出力する。通信処理部１０６は、出力したデータを含む信号を送信電文として家電機器シミュレータ１１２（家電機器側）に送信する。
【００５１】
図１２は電文表示部１１８に表示された電文の内容を示す図である。アダプタ１００へ送信する電文内容と、アダプタ１００から受信した電文内容を表示する。図１２は本実施の形態において、デバッグデータ登録部１１７の状態が図１１である状態で、電文「FF 03 」を送信したときにアダプタ１００から送信された電文を受信し、電文表示部１１８に表示した状態の例を示したものである。ここで、読み込み位置が「12C 」（図４のＬＯＣ４０３）及び「134 」（図４のＬＯＣ４０４）のスタックの状態「00」「01」が電文として送信されるが、スタックの要素のサイズは２バイトのリトルエンディアンで、スタックデータの始まりには、「FFFF」が付与されるものとする。また、Word「DUNP_DATA 」によって、アダプタ１００から出力する電文は、データの内容そのままではなく、データの区切りや、データの種別となる情報を付与した形式であってもよい。
【００５２】
一方、ステップＳＴ１００６において「NO」と判定すると、受信データを未処理にしたままステップＳＴ１００８に進む。これにより、デバッグ支援処理段階は終了する。
【００５３】
次に、本体プログラム処理段階を実行する。ステップＳＴ１００８で、本体プログラムの読み込み位置におけるシンボル（文字列）を読み込む。次にステップＳＴ１００９で、シンボルが受信処理用のWordであるか否かを判定する。本実施の形態では、家電機器側の受信インタフェースからデバッグコマンドを受信する可能性があるので、ＳＴ１００９の判定が「YES」となるのは、読み込んだ文字列が「FROM_EQUIPMENT」の場合である。
【００５４】
ステップＳＴ１００９において「YES 」と判定すると、ステップＳＴ１０１０で、受信データがデバッグコマンド登録部１１６に登録されているデバッグコマンドであるか否かをデバッグコマンド判定部１０５ａがチェックする。デバッグコマンドの場合はステップＳＴ１０１１の判定が「YES 」となる。ここは本体プログラム処理段階であるため、デバッグコマンドに基づいて処理を行わない。そこで、以後の読み込み位置におけるデバッグ支援処理段階で処理させるため、ステップ１０１４で受信データなしとみなし、受信データを未処理のままにする。
【００５５】
一方、ステップＳＴ１０１１において「NO」と判定すれば、受信データは本体プログラムに基づく処理を行うために用いられるデータであるため、ステップＳＴ１０１３で、本体プログラムに従って受信データの処理等を行う。
【００５６】
また、ステップＳＴ１００８で読み込んだ文字列が「FROM_EQUIPMENT」以外の場合は、ステップＳＴ１００９において「NO」と判定することになる。ステップＳＴ１０１２で、シンボルに対する通常の処理を行う。次に、ステップＳＴ１０１５で本体プログラムが終了したか否かを判定し、終了していない場合は、ステップ１００１に戻って、本体プログラムの読み込み位置を更新する。以上のようにして、デバッグ支援処理を行い、例えば、電文表示部１１８に表示された電文の内容に基づいて本体プログラムのバグを発見することによりデバッグが行われる。
【００５７】
このようなデバッグの段階を経て、バグのない本体プログラムに基づくアダプタ１００の機能を実用段階で用いる場合、例えば、デバッグ情報格納部１０９に格納するデータを空にしたり、デバッグプログラム自体を記憶部１０１から消去したりすれば、記述プログラム解釈部１０５は、デバッグ支援処理を実行することなく、本体プログラムだけに基づいた処理を実行することができる。
【００５８】
以上のように、本実施の形態の装置（アダプタ１００）では、プログラムダウンロード管理部１０２により、本体プログラムだけでなく、デバッグプログラムについても外部装置１１０からダウンロード可能にし、従来のようなファームウェア形式ではなく、データ変更（書き換え）可能な記憶部１０１に記憶するようにしたので、本体プログラムのプログラム記述形式等に対応したデバッグプログラムを容易に記憶させ、記述プログラム解釈部１０５に実行させることが可能になり、エミュレータ等の高価な装置を用いなくても、例えば、高級言語により記述された本体プログラムに対応したデバッグプログラムに基づいてデバッグ支援処理を行うことができる。また、デバッグ情報格納部１０９にデバッグ支援処理に関するデータを格納することで、デバッグコマンドの判断、デバッグ情報を取得する本体プログラムの実行位置をデバッグプログラムに基づいて容易に設定することができる。さらに、プログラムダウンロード管理部１０２により、例えば、家電機器、サーバ等に接続することにより、機能実行、デバッグ支援処理等に必要なプログラムをダウンロードすることができる。
【００５９】
また、デバッグプログラムのデータ内容の変更が容易に行えるので、デバッグコマンド設定記述部１０７の記述に基づいて、デバッグ支援処理を行うためのデバッグコマンドの設定（定義）変更も容易に行うことができる。そのため、例えば通信処理部１０６において受信インタフェースが共有され、本体プログラムの処理に係るコマンド等の受信データとデバッグコマンドとの内容に重なりが認められない場合でも、重ならないように振り分けできる設定を容易に行うことができる。このため、特にデバッグ支援処理の対象装置が通信用のアダプタ１００のような場合、搭載する本体プログラムを実機で動作検証可能となる。
【００６０】
さらに、処理記憶部１０５ｂに記憶された変数や配列の値をデバッグ情報として出力するだけでなく、本体プログラムを記述する言語がスタックを利用した逆ポーランド記法に基づいた言語の場合には、スタックの状態もデバッグ情報として出力できるようにしたので、例えば、スタックのオーバーフローなど、入出力の信号を確認しただけでは検出しにくいバグも検出可能となる。
【００６１】
実施の形態２．
上述の実施の形態では、外部装置１１０から本体プログラム、デバッグプログラムをダウンロードし、記憶部１０１に記憶させるようにしたが、これに限定するものではない。例えば、装置から着脱可能なメモリカード等の記憶手段を記憶部１０１として、別の装置で各プログラムを記憶させることもできる。
【産業上の利用可能性】
【００６２】
以上のように、この発明に係るアダプタ（変換装置）は、小型軽量化、省スペース化、低コストを図るのに、さらに製品の品質向上するのに有用である。
【図面の簡単な説明】
【００６３】
【図１】この発明のプログラムデバッグ支援装置を中心とするブロック図である。
【図２】アダプタ１００を利用したホームネットワークの構成を示す図である。
【図３】プログラムダウンロード管理部１０２の処理動作のフローチャートである。
【図４】この発明の実施の形態の本体プログラムの例である。
【図５】コメントや余分な空白を削除した本体プログラムの例である。
【図６】この発明の実施の形態のデバッグプログラムの例である。
【図７】記述プログラム解釈部１０５の処理動作のフローチャートである。
【図８】この発明の実施の形態のデバッグコマンド登録部１１６の例である。
【図９】この発明の実施の形態のデバッグデータ登録部１１７の例である。
【図１０】本体プログラムの処理時における処理動作のフローチャートである。
【図１１】最新の値が記録されたデバッグデータ登録部１１７の例を示す図である。
【図１２】電文表示部１１８に表示された画面の例である。
【符号の説明】
【００６４】
１００  アダプタ、１０１  記憶部、１０２  プログラムダウンロード管理部、１０３  本体プログラム記述部、１０４  デバッグプログラム記述部、１０５  記述プログラム解釈部、１０５ａ  デバッグコマンド判定部、１０５ｂ  処理記憶部、１０５ｃ  辞書記憶部、１０６  通信処理部、１０７  デバッグコマンド設定記述部、１０８  デバッグコマンド実行記述部、１０９  デバッグ情報格納部、１１０  外部装置、１１１  プログラム保持部、１１２  家電機器シミュレータ、１１３  電文作成部、１１４  電文送受信部、１１５  コントローラ、１１６  デバッグコマンド登録部、１１７  デバッグデータ登録部、１１８  電文表示部、８０１  コマンドID格納欄、８０２  デバッグコマンド受信ポイント格納欄、８０３  コマンド長格納欄、８０４  デバッグコマンドバイト列格納欄、９０１  データID格納欄、９０２  デバッグ情報設定ポイント格納欄、９０３  データ種別格納欄、９０４  デバッグシンボル格納欄、９０５  型格納欄、９０６  配列サイズ格納欄、９０７  データ内容格納欄。
【図１】
0004716929.tif 000002
【図２】
0004716929.tif 000003
【図３】
0004716929.tif 000004
【図４】
0004716929.tif 000005
【図５】
0004716929.tif 000006
【図６】
0004716929.tif 000007
【図７】
0004716929.tif 000008
【図８】
0004716929.tif 000009
【図９】
0004716929.tif 000010
【図１０】
0004716929.tif 000011
【図１１】
0004716929.tif 000012
【図１２】
0004716929.tif 000013