JP2004280480A - デバッギング装置 - Google Patents
デバッギング装置 Download PDFInfo
- Publication number
- JP2004280480A JP2004280480A JP2003071162A JP2003071162A JP2004280480A JP 2004280480 A JP2004280480 A JP 2004280480A JP 2003071162 A JP2003071162 A JP 2003071162A JP 2003071162 A JP2003071162 A JP 2003071162A JP 2004280480 A JP2004280480 A JP 2004280480A
- Authority
- JP
- Japan
- Prior art keywords
- code
- data
- parallel interface
- debugging
- program
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
【課題】スナップ・ショット機能が持つ有効性を保持しつつ、リアル・タイム性を確保する。
【解決手段】制御データを外部の測定器400にパラレル・データとして出力できるパラレル・インタフェース110を設け、実行プログラムには、トレース・ポイントにトレース用のデータ・コードをパラレル・インタフェースに出力する命令を書き込んでおき、デバッギング時にパラレル・インタフェースから得るデータ・コードからプログラムの実行状況をトレースする。
パラレル・インタフェースから出力されるデータを外部メモリ回路に記憶し、このデータからプログラムの実行状況をトレースすること、データ・コードのトレース開始コードと終了コードから事象の発生間隔の測定を行うこと、データ・コードの特定の事象コードから事象の発生回数の測定を行うことを含む。
【選択図】 図1
【解決手段】制御データを外部の測定器400にパラレル・データとして出力できるパラレル・インタフェース110を設け、実行プログラムには、トレース・ポイントにトレース用のデータ・コードをパラレル・インタフェースに出力する命令を書き込んでおき、デバッギング時にパラレル・インタフェースから得るデータ・コードからプログラムの実行状況をトレースする。
パラレル・インタフェースから出力されるデータを外部メモリ回路に記憶し、このデータからプログラムの実行状況をトレースすること、データ・コードのトレース開始コードと終了コードから事象の発生間隔の測定を行うこと、データ・コードの特定の事象コードから事象の発生回数の測定を行うことを含む。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、マイクロ・プロセッサを搭載した制御装置のデバッグ機能に関わるものである。
【0002】
【従来の技術】
現在、一般産業分野のプロセス制御装置などの大型システムから、家庭電化製品のような小型の制御装置に至るまで、電子機器といわれる殆ど全ての制御装置には、その中枢部として、内部にマイクロ・プロセッサが使用されている。
【0003】
マイクロ・プロセッサを使用した制御装置には、必ずソフトウェア(S/W)またはファームウェア(F/W)と呼ばれる、プロセッサの実行プログラムが内蔵されるが、これらのプログラムの作成時には、誤り(バグと呼ばれる)を排斥するための、デバッグと言われる作業を必要とする。
【0004】
このデバッグ作業では、プログラムの実行状況を逐次監視しながら、そのプログラムが正しく実行をしているかどうかを確認していくことが必要になる。
【0005】
現在の技術では、最も詳細にこの作業を行う環境としては、ICE(In Circut Emulator)と呼ばれる開発装置が一般的である。この装置を使用すれば、プロセッサの内部レジスタ類の情報まで、トレースをしながら、ソフトウェアの実行状態を監視することができる。
【0006】
しかし、このICEの環境は、プロセッサに接続するためのアダプタを始めとして、外部に大掛かりな装置を接続することが必要となり、また、この装置を接続したまま、デバッグ対象の装置(ターゲットと呼ばれる)を実際の実行環境で動作させることは不可能である。
【0007】
そのため、ICE装置は、プログラム開発の初期段階で使用されることが多く、プログラム開発の終盤では、できるだけ、軽いデバッグ環境を用いて、実際の実行環境に近い(実機に組み込んだ形)でのデバッグを行うことが必要になってくる。
【0008】
この場合、実際に動作するマイクロ・プロセッサ環境の中に、デバッグ作業に必要なプログラム(オンライン・デバッガなど)を組み込み、このS/W(プログラム)によるセルフ開発環境を整えることが有効である。
【0009】
このセルフ開発環境に於ける、プログラムのデバッギングは、H/W的には、プロセッサに従属するシリアル・インタフェースを利用するのが一般的である。
このシリアル・インタフェースに、非常駐のコンソール(ターミナル)を接続するだけで、ターゲット装置上のセルフ環境で、ソフトウェアのデバッグ作業を行うことができる。特に、このシリアル・インタフェースを利用したプログラムのデバッギング手法としては、スナップ・ショットと呼ばれる方法が一般的である(特許文献1参照)。
【0010】
【特許文献1】
特開平10−283217号
【0011】
【発明が解決しようとする課題】
先述の通り、マイクロ・プロセッサを内蔵した制御装置に於いて行われるセルフ開発環境に於ける、プログラムのデバッギングには、H/W的には、プロセッサに従属するシリアル・インタフェースを利用するのが一般的である。このシリアル・インタフェースに、非常駐のコンソール(ターミナル)を接続するだけで、ターゲット装置上のセルフ環境で、ソフトウェアのデバッグ作業を行うことができる。
【0012】
このシリアル・インタフェースを用いた、デバッグ環境の1つに、スナップ・ショットと呼ばれる手法がある。これは、プログラム上、重要な複数のポイントに、シリアル・インタフェースからキャラクタ列を出力するための、命令を埋め込んでおき、シリアル・ターミナルからの操作で、プログラムを実行させると、実プログラムが動作した時に、この命令部分を実行すると、ターミナルにその旨の印字が行われるというものである。
【0013】
この機能を利用すると、ターミナルからプログラムの起動をかけた場合に、プログラムが実行され、処理される順序に従って、通過したプログラムの部分の情報が、ターミナル上に印字されることになり、プログラムの実行順序が極めて安直にトレースできる。
【0014】
この手法は、S/WやF/Wの開発時に頻繁に使用される、実用的かつ有効な手法である。
【0015】
しかし、この手法の場合、オペレータに対する情報の伝達のために、シリアル・インタフェースが用いられることから、その他の操作と同じターミナルを用いることができる点で極めて有効であるが、一方、シリアル・インタフェースの宿命である、印字に時間がかかるというスピード面での制約が問題になる場合が多かった。
【0016】
つまり、プログラムの中に、キャラクタを印字するための命令を埋め込む訳であるから、当然この命令の実行時間が必要なのは当然であるが、シリアル・インタフェースを相手にした場合、ビット列をシリアルに送出する関係から、かなり多くの時間を必要としていた。この時間は複数キャラクタを印字する場合には更に加算されて問題が大きくなる。
【0017】
この時間は、制御処理にリアルタイム性や、高速性が必要のない場合(つまり制御の順序だけが重要である場合)には全く問題にはならないが、処理を一定時間に済ませなければならないようなリアルタイム性を重要視する装置の場合は、致命的な問題になる。また、割り込みなどを利用して、このキャラクタ印字ルーチンを呼び出すようにすると、この印字がある場合と、ない場合で処理の流れが変わったり、所要時間が変わることによって、正しいトレースができないことも問題である。
【0018】
つまり、このスナップ・ショット手法は、プログラムの実行状況を実機に於けるセルフ環境でトレースできるという有効な手段であるが、リアル・タイム性の要求されるシステムでは有効に活用できないということになる。
【0019】
図12に、このスナップショット機能を用いる場合の装置の実行環境の様子を示す。同図に於いて、100はマイクロ・プロセッサを内蔵した制御装置の全体、200はこの制御装置100によって制御される制御対象、300は制御装置100のメインテナンス時に接続される、シリアル通信手段を有するコンソール・ターミナル装置である。
【0020】
制御装置100のうち、101はこの制御装置の制御プロセスを実行するマイクロ・プロセッサ、102はマイクロ・プロセッサの実行状態を記述したプログラムを格納したり、作業エリアとして利用するためのメモリ回路、103はマイクロ・プロセッサの出力するアドレスをデコードして、選択される資源(デバイス)を抽出するためのアドレス・デコーダ回路である。また、104は、この装置で制御される制御対象200のための制御インタフェースであって、外部入出力信号を有する。また、105はシリアル・インタフェースのためのシリアル・コントロール回路であって、パラレル/シリアル変換回路や非同期調歩同期式のシリアル制御回路などを搭載するコントローラ、106はシリアルー通信の外部入出力レベルを合わせるための物理インタフェース回路であって、ドライバ/レシーバ回路などが用いられる。107は、シリアル・インタフェース用の外部接続コネクタである。
【0021】
さて、今、図12に示すようなハードウェア環境に於いて、プログラムのデバッギングを行うことを考える。先ず、デバッギングの対象となるプログラム上の何箇所がに、「A」ポイントから「G」ポイントというような通過ポイントを定め、これらのポイントとなる個所に、「A」から「G」のキャラクタをメインテナンス・コンソール上に表示するプログラム(キャラクタのコードをセットして、シリアル・コンソール上にキャラクタを出力するサブルーチンをコールするなどのプログラム)を埋め込む。
【0022】
この後、メインテナンス・コンソール上から、この対象のプログラムを起動すると、プログラムの実行された順序に従って、「A」から「G」のキャラクタの内のいずれかがコンソール・ターミナル上に印字されていく。このキャラクタの印字順序が、プログラマの予想した通りであれば、プログラムに問題(バグ)はないのであるが、意図していない順序でキャラクタが印字された場合には、プログラム上のどこかにバグが存在することになる。
【0023】
さて、これが、スナップ・ショット手法の使用法であるが、この手法で、コンソール・ターミナルにキャラクタを印字する場合の処理の流れを「A」ポイント部分で表すと、図13の様になる。
【0024】
図13に示すステップS1〜S8に従って手順を説明する。まず、デバッグ対象となるプログラム列のポイントとなる個所毎に、S1、S2、S3、S8を埋め込む。S4〜S7のサブルーチンは、共通の場所に1箇所設ければよい。
【0025】
S1:サブルーチン・コールに備えて必要なレジスタを待避する。
【0026】
S2:ポイントを示すキャラクタ(ここでは「A」)を示すASCIIコード(ここでは「41H」)をレジスタにセットする。
【0027】
S3:キャラクタを印字するためのサブルーチンをコールする。
【0028】
S4:(ここからサブルーチン)シリアル・コントローラのステータス・レジスタをリードして、状態を読み込む。
【0029】
S5:送信のレディ・ビットをチェックして、キャラクタ・コードの送出が可能かどうかを判断する。送信レディでない場合には、S4に戻る。
【0030】
S6:送信レディであれば、S2でセットしたコードをシリアル・コントローラの送信バッファに書き込む。これによってシリアル・インタフェースから、キャラクタ・データがコンソール・ターミナルに対して送出される。
【0031】
S7:サブルーチンからリターンする。
【0032】
S8:待避していたレジスタを復帰して、元の処理に戻る。
という手順で、プログラム上のこのポイントを通過した場合には、メインテナンス・コンソール上に「A」のキャラクタが印字される。
【0033】
しかし、この手順を見ても分かる通り、シリアル・インタフェースにキャラクタを出力する処理は、プログラム上でも最低で8つのステップ(命令)を踏む必要があり、実際には、最低でも数マイクロ秒の時間を要する。印字キャラクタ数を増やして、送信バッファの容量を越える場合には、数十ミリ秒のオーダの時間を要することもある。
【0034】
プログラムが、その実行順序だけを遵守していれば、仕上がりの時間を気にしないようなアプリケーションであれば、この方式のスナップ・ショット手法で、十分なデバッギング効果が得られる。しかし、一般に制御装置では、できるだけ短時間で処理を完結することが求められており、通過ポイントの表示のために、大きな時間を費やすことは許されない場合が多い。特にリアルタイム制御を行う装置では、デバッグのために入れたスナップ・ショットの実行で、その時間管理が狂ってしまうことが懸念される。
【0035】
これが、従来のシリアル・インタフェースを用いたスナップ・ショットによるデバッギング環境の欠点であった。
【0036】
本発明の目的は、マイクロ・プロセッサを搭載した制御装置のプログラム・デバッグのためのセルフ環境に於いて、スナップ・ショット機能が持つ有効性を保持しつつ、リアル・タイム性の欠如を補って、リアル・タイム性を要求される装置に於いても、スナップ・ショット機能を使用できる制御装置を提供することにある。
【0037】
【課題を解決するための手段】
本発明は、前記の課題を解決するため、マイクロプロセッサとその実行プログラムによる制御装置において、実行プログラムのデバッギングを、スナップ・ショット方法でプログラムの実行状態をトレースするにおいて、トレース情報をパラレル・インタフェースを使用して取り出すようにしたもので、以下の構成を特徴とする。
【0038】
(1)マイクロ・プロセッサを中枢部として制御対象を制御し、スナップ・ショット方式で実行プログラムのデバッギングを行う制御装置において、
マイクロ・プロセッサ等にバス結合され、バス上の制御データを外部の測定器にパラレル・データとして出力できるパラレル・インタフェースを設け、
前記実行プログラムは、デバッギング時に、デバッグ対象となるトレース・ポイントにトレース用のデータ・コードを前記パラレル・インタフェースに出力する命令を書き込んでおき、
デバッギング時に前記パラレル・インタフェースから外部の測定器に得る前記データ・コードからプログラムの実行状況をトレースすることを特徴とする。
【0039】
(2)マイクロ・プロセッサを中枢部として制御対象を制御し、スナップ・ショット方式で実行プログラムのデバッギングを行う制御装置において、
マイクロ・プロセッサ等にバス結合され、バス上の制御データを外部にパラレル・データとして出力できるパラレル・インタフェースを設け、
前記パラレル・インタフェースから出力されるパラレル・データを蓄積記憶しておく外部メモリ回路を設け、
前記実行プログラムは、デバッギング時に、デバッグ対象となるトレース・ポイントにトレース用のデータ・コードを前記パラレル・インタフェースに出力する命令を書き込んでおき、
デバッギング時に前記パラレル・インタフェースから外部メモリ回路に蓄積記憶する前記データ・コードからプログラムの実行状況をトレースすることを特徴とする。
【0040】
(3)前記データ・コードのうち、前記パラレル・インタフェースにトレースする開始コードと終了コードを設定可能にし、前記データ・コードと前記開始コードおよび終了コードとの比較から事象の発生間隔の測定を行う測定回路を設けたことを特徴とする。
【0041】
(4)前記データ・コードのうち、前記パラレル・インタフェースにトレースする特定の事象コードを設定可能にし、前記データ・コードと事象コードの比較から事象の発生回数の測定を行う測定回路を設けたことを特徴とする。
【0042】
【発明の実施の形態】
本発明では、上述のシリアル・インタフェースを用いたスナップ・ショット手法による問題点を解決するために、極めて簡単な、パラレル・ポートを用いたデバッグ方法を提案するものであり、以下、実施形態を詳細に説明する。
【0043】
<実施形態1>
図1に本実施形態による、パラレル・ポート方式のメインテナンス(デバッグ)環境を示す。同図は、図12の環境に、簡易なパラレル・ポートを追加したものである。
【0044】
図1に於いて、100,101〜107,200,300は、全て、図12と同じである。同図において、110は、今回追加された簡易なパラレル・インタフェースであり、マイクロ・プロセッサ101等にバス結合され、デバッギング時にバス上の制御データをパラレル・データとして外部に出力するための、データ幅を持ったバッファ回路などで構成される。また、120は、110によって出力される信号を外部に引き出すための接続コネクタである。そして、400がこのパラレル・インタフェースに出力されるコードを記憶したり、表示したりすることのできるロジック・アナライザや、データ・アナライザなどの測定器である。この測定器は、ICEのような専用機である必要はなく、通常のH/Wの開発環境として準備される汎用の機器で構わない。
【0045】
さて、ここで、110のパラレル・インタフェース部分について考える。まず、最も簡便にプログラムの実行状況をパラレル・インタフェース出力することができるようにするために、図2のようなインタフェースの構成例を提案する。
【0046】
図2に於いて、110は、本発明によって装置に付加する簡易なパラレル・インタフェースの全体、111はnビットのデータを外部に出力するためのnビットのバッファ回路である。また、112は、外部にデータを出力する際の同期用信号を生成するためのインバーテッドNAND回路(OR回路)である。
【0047】
更に、同図に於いて、aは、図1の103部のアドレス・デコーダ回路によって生成される、このパラレル・インタフェースが選択されたことを示す「PORTSEL_L」信号、bは、マイクロプロセッサがこの周辺デバイスに対して、データを書き込むための制御信号で「WR_L」信号である。これらa,bの2信号を112でインバーテッドNANDをとった信号が、cの「PORTWR_L」信号であり、このパラレル・インタフェースに対する書き込みであることを示す信号になる。よって、このPORTWR_L信号を外部に対するデータ出力の同期信号に用いる。
【0048】
これらパラレル・インタフェースへの書き込み動作に関して、信号出力の時間関係の例を示したものが、図3である。n本のデータライン「DATA[n:1]_H」が有効である間にPORTWR_L信号の立ち上がりエッジが来るように設計されている。すなわち、外部の計測器(観測装置)に於いて、このPORTWR_L信号の立ち上がりエッジで、n本の出力信号をラッチして格納していけば、マイクロプロセッサが外部に知らせようとしたコードを蓄積して解析することができる。
【0049】
このような、パラレル・インタフェースを用いた場合の、デバッグ方式の場合のプログラム実行を考えると、実行プログラムに埋め込まれる各トレース・ポイントでの処理は、図4に示すように、各ポイントに於いて「パラレル・インタフェースに、該当するポイントに対応するコードを書き込む」という単一の操作だけになる。この処理S11は、プログラムのフェッチと、パラレル・インタフェースへの書き込みサイクルを考えても、50から500ナノ秒のオーダで完結できる。
【0050】
これにより、パラレル・インタフェースを用いたスナップ・ショット方式を用いれば、リアルタイム性が強く要求されるプログラムであっても、大きな影響を与えることなく、これをデバッグすることが可能になる。
【0051】
<実施形態2>
図5は、図2で示した、簡易的なパラレル・インタフェースに、リセット信号(e)を追加し、外部接続コネクタ120に電源を供給できるようにした例である。この例では、外部接続コネクタの外側に外部メモリ回路を接続することが可能になる。
【0052】
図6は、図5に示すパラレル・インタフェースに接続可能なトレース用メモリ回路の例を示す。図6に於いて、500はパラレル・インタフェースに接続可能なトレース用メモリ回路の全体、501は、メモリ素子であり、スタティックRAMや、FlashMemoryなどを使用できる。502は501のメモリに順次インクリメント(またはデクリメント)されるアドレスを生成するためのアドレス・カウンタ回路、503はPROTWR_L信号とPORTRD_L信号のインバーテッドNORをとるための回路である。fのPORTRD_L信号は、図5のインタフェースには表現されていないが、このメモリ回路を別な解析装置につないだ場合に、メモリ内の内容を読み出す際に使用される信号である。また、gは、PORTWR_L信号とPORTRD_L信号のインバーテッドNORをとった信号で、アドレス・カウンタをインクリメント(またはデクリメント)するカウント・パルス信号となる。
【0053】
メモリのデータ・ライン(nビット)は、110部のパラレル・インタフェースのデータライン「DATA[n:1]_H」に接続される。PORTWR_L信号は、メモリの書き込み信号(WE_L)端子に、PORTRD_L信号は、メモリの読み出し信号(OE_L)端子に接続される。RESET_L信号は、アドレス・カウンタをリセットするためにクリア端子に接続される。
【0054】
このトレース用メモリ回路を、図5に示すパラレル・インタフェースに接続して、パラレル・インタフェースを使用した、スナップ・ショット手法を用いると、図4のS11のようにプログラム・デバッグのために実行プログラム内に埋め込まれた、コードの書き込みルーチン部分で、このパラレル・ポートに出力されるデータ(デバッグ用コード)を、501のメモリ・デバイスの中に順次格納していくことができる。つまり、実施形態1の場合は、パラレル・インタフェースから出力されるコードは、順次外部の観測機器でトレースまたは格納していく必要があったが、このようなメモリ回路を外付けすると、このメモリ内に、トレース・コードを格納していくことができる。
【0055】
一定のトレースが完了した場合、このメモリ回路をデバッグの対象となる本体装置から取り外して、専用の解析装置に接続し直して解析することができる。この場合、解析装置側にはPORTRD_L信号をサポートした専用の読み出し回路を設けておく必要がある。
【0056】
501のメモリ素子として、FlashMemoryを使用する場合には、このトレース用メモリ回路は、本体から取り外しても、メモリ内容が揮発しないので、便利である。501のメモリ素子として、揮発性のスタティックRAMを使用する場合には、本体からの電源供給の他に電池などによるバックアップ電源の入力回路を付加することによって、本体からこの回路を取り外しても、メモリ内容を保持できるようにすることが可能である。
【0057】
<実施形態3>
前記までの実施形態では、マイクロ・プロセッサを搭載した装置のプログラム・デバッグのためセルフ環境に於いて、デバッグの対象となるマイクロプロセッサ搭載装置に簡易なパラレル・インタフェースを設け、これを従来のシリアル・インタフェースの代わりにスナップ・ショット機能の出力先にすることによって、プログラム実行時にトレース情報の出力のために発生する時間遅れを最小にしようとするものであった。
【0058】
さて、本実施形態では、デバッグ対象の装置に付加した簡易なパラレル・インタフェースを単に、スナップ・ショット情報の高速な出力インタフェースとして用いるだけでなく、これを更に活用して、セルフ環境でのデバッグ作業や、メインテナンス作業をより便利に行うための環境を提供する。
【0059】
まず、図5に示した、簡易なパラレル・インタフェースを装置に具備し、更に、外部に図7に示すような付加回路を用意することによって、プログラムのデバッグ時に有効な情報の1つである、事象の発生間隔の測定を簡便に行うことができるようにする。
【0060】
図7に於いて、600が、本実施形態による事象発生間隔測定回路全体である。同図に於いて、601は、時間計測を開始する部分で、スナップ・ショット機能により発生されるコード(開始コード)を予め設定する部分で、DIPスイッチなどを用いて可変にすることもできるし、書き換え可能なEEPROMのようなデバイスで半固定的にすることもできるし、完全に固定のコード(例えば「S」に相当する固定コードなど)にすることもできる。
【0061】
次に、602は、601で設定された開始コードと、パラレル・インタフェースから出力されるコードとを比較するためのコンパレータ回路Aである。この回路の出力は、一致時(マッチ時)に「L」レベルになるものとする。603は、コンパレータAの一致検出信号と、パラレル・インタフェースから出力される「PORTWR_L」信号のインバーテッドNAND条件をとるための回路である。コンパレータAから一致条件が出ている間にPORTWR_Lが与えられると、i部のSTART_L信号をアサートする。
【0062】
一方、同図に於いて、604は、時間計測を終了する部分で、スナップ・ショット機能により発生されるコード(終了コード)を予め設定する部分で、DIPスイッチなどを用いて可変にすることもできるし、書き換え可能なEEPROMのようなデバイスで半固定的にすることもできるし、完全に固定のコード(例えば「P」に相当する固定コードなど)にすることもできる。
【0063】
次に、605は、604で設定された終了コードと、パラレル・インタフェースから出力されるコードとを比較するためのコンパレータ回路Bである。この回路の出力は、一致時(マッチ時)に「L」レベルになるものとする。606は、コンパレータBの一致検出信号と、パラレル・インタフェースから出力される「PORTWR_L」信号のインバーテッドNAND条件をとるための回路である6コンパレータBから一致条件が出ている間にPORTWR_Lが与えられると、j部のSTOP_L信号をアサートする。
【0064】
更に、同図の607は、RS(SetReset)Flip−F1op回路である。i部のSTART_L信号がアサートされると、このフリップ・フロップの出力k(OUT_L)信号は「H」にセットされ、jのSTOP_L信号がアサートされると、このフリップ・フロップの出力k(OUT_L)信号は「L」にリセットされる。608は、OUT_L信号を外部に出力するためのコネクタである。
【0065】
このような外部回路を構成し、デバッグ対象となるプログラムのラインの中に計測を開始される「開始コード」と、計測を終了させるための「終了コード」を埋め込んでおいてから、プログラムを実行すれば、本回路の最終出力である「O∪T_L」信号のパルス幅を外部測定器で計測することによって、所望の事象発生間隔を測定することが可能である。
【0066】
この回路例の実際の動作をタイムチャートで示したものが図8である。
【0067】
<実施形態4>
更に、図5に示す簡易的なパラレル・インタフェースに対して、データの読み込み機能を付加してやると、このデバッグ用パラレル・インタフェースの活用方法が広がり、プログラムのセルフ開発(セルフ・デバッグ)環境が一段と使いやすいものになる。
【0068】
図9に、データの読み込み機能を付加した、パラレル・インタフェースの回路例を示す。同図に於いて、110,111,112,120は、図5と同じであるが、111のnビットのデータ・バッファは双方向バッファを用いている。113は追加になったインバーテッドNAND回路であって、aのPORTSEL_L信号と、lで示すプロセッサの読み込み信号(RD_L)とのインバーテッドNAND条件によってfのPORTRD_L信号をアサートする。このPORTRD_L信号は、このパラレル・インタフェース(ポート)に対する読み込み動作であることを示す。a〜e信号は図5と同じである。
【0069】
111のバッファ回路では、cのPORTWR_L信号がアサートされている間は、出力方向をイネーブルにし、PORTRD_Lがアサートされている間は、入力方向をイネーブルにする。
【0070】
デバッグ用のパラレル・インタフェースをこのように構成すると、装置のセルフ・デバッグ環境として、更に利用範囲が広がる。
【0071】
例えば、図10に示す回路は、その1つの例であって、これは、特定の事象(プログラム内の特定のポジションで、計数専用のコードを埋め込んでおく)が何回発生したかを計数するための回路例である。
【0072】
図10に於いて、700は発生事象を計数するための付加回路の全体、701は計数する事象のコードを設定する部分であって、DIPスイツチなどを用いて可変にすることもできるし、書き換え可能なEEPROMのようなデバイスで半固定的にすることもできるし、完全に固定のコード(例えば「N」に相当する固定コードなど)にすることもできる、
次に、702は、701で設定された計数コードと、パラレル・インタフェースから出力されるコードとを比較するためのコンパレータ回路Cである。703は、コンパレータCの一致検出信号と、パラレルーインタフェースから出力される「PORTWR_L」信号のインバーテッドNAND条件をとるための回路である。コンパレータCから一致条件が出ている間にPORTWR_Lが与えられるとm部のCOUNT_L信号をアサートする。
【0073】
704は、C0UNT_L信号のパルス数をカウントするためのアップ・カウンタであり、CLK端子に与えられるCOUNT_Lのパルス数を計数する。CLR端子には、RESET_L信号が与えられており、この信号がアサートされると、カウンタを初期化する。また、OE端子には、PORTRD_L信号が与えられており、この信号がアサートされると、計数結果をデータラインに出力してプロセッサ側でこれを読み込むことができる。
【0074】
このような回路を、図9のパラレル・インタフェースに接続すると、プログラムのデバッグの一環として、特定事象が、何回繰り返しているのかを計数する機能を持たせることができ、それをセルフ開発環境(オンライン・デバッグ環境)にてその装置自体のプロセッサが読み込んで処理することができるようになる。
【0075】
<実施形態5>
更に、図9に示す、パラレル・インタフェースを用いた場合には、図11に示すようなトレース用メモリ回路を外付けすることにより、スナップ・ショット機能によるプログラムの実行状況を、一旦メモリ回路上に蓄積した上で、トレース停止後に、そのままそれをセルフ開発環境(オンライン・デバッグ環境)にてその装置自体のプロセッサが読み込んで処理、解析することができるようになる。
【0076】
この例を示す図11は、前記の実施形態2にて提案した回路(図6)と全く同じであるが、本体側のパラレル・インタフェースを図9のように進化させることによって、セルフ開発環境で使用できることになり、この回路の活用範囲が大きく広がる。
【0077】
【発明の効果】
本発明の趣旨は、シリアル・インタフェースを用いた、プログラムのセルフ開発環境に於いて、プログラムの実行状況をトレースするための手法の1つであるスナップ・ショット機能に関して、実行プログラムに埋め込まれるトレース・コードの出力をシリアル・インタフェースに対して行うのではなく、装置上に、簡易なパラレル・インタフェースを設けた上で、そのパラレル・インタフェースに対して、出力するようにしたため、トレース・コードの出力を迅速に行うことができ、リアルタイム性の要求されるプログラムのデバッグについても、便利なスナップ・ショット機能を利用できる可能性が高くなった。
【0078】
実施形態1では、極めて簡易なパラレル・インタフェース回路を付加することによって、外部から、プログラムの実行状況を簡易にトレースできる環境を提供できる。
【0079】
実施形態2のトレース用メモリ回路機能は、本体装置に設けられる極めて簡易なスナップ・ショット監視用のパラレル・インタフェースに接続でき、本体に常設する必要がないため、本体の価格の上昇を抑えると共に、部品点数を増やさないことによって装置の省スペース化、高信頼性化に寄与しつつ、必要時にはデバッグに有効活用することができる。また、装置が設置された現場に解析装置を持ち込めないような場合には、実機のプログラム実行状況を現場でトレースして、それを離れた場所にある解析環境で解析するようなスタイルを運用可能にする。
【0080】
実施形態3では、装置内のプログラムの実行時間の計測のために、計測開始ポイント(開始コード)と計測終了ポイント(終了コード)をプログラムに埋め込むことによって、外部からは、1本の信号のパルス幅を測定するだけでよいという、簡便な事象発生間隔測定ができ、装置のデバッグ環境を一段と向上させることができる。
【0081】
実施形態4では、プログラムの処理回数を計数するために、計数したいポイントに計数コードを埋め込んでおくことによって、そのポイントの処理回数を外部で計数し、それを、デバッグ対象装置の本体から読み込めるようにしたため、より簡便で、実使用状態に近い環境での、装置デバッグ作業を提供できる。
【図面の簡単な説明】
【図1】本発明の実施形態1を示す制御装置のスナップ・ショット機能の実行環境。
【図2】実施形態1におけるパラレル・インタフェース部110の最も簡単な構成例。
【図3】実施形態1におけるパラレル・インタフェース部への書き込み動作波形。
【図4】実施形態1におけるパラレル・インタフェース部を外部通知に用いた場合のスナップ・ショット実行例。
【図5】本発明の実施形態2におけるパラレル・インタフェース部に電源とリセットを加えた例。
【図6】実施形態2における外部接続コネクタ部に接続可能なトレース用メモリ回路例。
【図7】本発明の実施形態3における事象発生間隔を測定するための付加回路例。
【図8】実施形態3における事象発生測定回路の動作波形。
【図9】本発明の実施形態4におけるパラレル・インタフェース部に読み込み機能を加えた例。
【図10】実施形態4における発生事象を計数するための付加回路例。
【図11】本発明の実施形態5における本体で読み込み可能なトレース用メモリ回路例。
【図12】従来の制御装置に於けるスナップ・ショット機能の実行環境。
【図13】従来の実行ポイントAに於けるスナップ・ショット動作時のプログラム実行例。
【符号の説明】
100…制御装置全体
200…制御対象
300…コンソール・ターミナル装置
101…マイクロ・プロセッサ
102…メモリ回路
103…アドレス・デコーダ回路
104…制御インタフェース
105…シリアル・コントロール回路
106…物理インタフェース回路
107…外部接続コネクタ
110…パラレル・インタフェース
120…接続コネクタ
400…測定器
111…バッファ回路
500…トレース用メモリ回路全体
501…メモリ
502…アドレス・カウンタ
600…事象発生間隔測定回路全体
601…開始コード設定部
602、605…コンパレータ
604…終了コード設定部
700…付加回路全体
701…計数コード設定部
702…コンパレータ
704…アップ・カウンタ
【発明の属する技術分野】
本発明は、マイクロ・プロセッサを搭載した制御装置のデバッグ機能に関わるものである。
【0002】
【従来の技術】
現在、一般産業分野のプロセス制御装置などの大型システムから、家庭電化製品のような小型の制御装置に至るまで、電子機器といわれる殆ど全ての制御装置には、その中枢部として、内部にマイクロ・プロセッサが使用されている。
【0003】
マイクロ・プロセッサを使用した制御装置には、必ずソフトウェア(S/W)またはファームウェア(F/W)と呼ばれる、プロセッサの実行プログラムが内蔵されるが、これらのプログラムの作成時には、誤り(バグと呼ばれる)を排斥するための、デバッグと言われる作業を必要とする。
【0004】
このデバッグ作業では、プログラムの実行状況を逐次監視しながら、そのプログラムが正しく実行をしているかどうかを確認していくことが必要になる。
【0005】
現在の技術では、最も詳細にこの作業を行う環境としては、ICE(In Circut Emulator)と呼ばれる開発装置が一般的である。この装置を使用すれば、プロセッサの内部レジスタ類の情報まで、トレースをしながら、ソフトウェアの実行状態を監視することができる。
【0006】
しかし、このICEの環境は、プロセッサに接続するためのアダプタを始めとして、外部に大掛かりな装置を接続することが必要となり、また、この装置を接続したまま、デバッグ対象の装置(ターゲットと呼ばれる)を実際の実行環境で動作させることは不可能である。
【0007】
そのため、ICE装置は、プログラム開発の初期段階で使用されることが多く、プログラム開発の終盤では、できるだけ、軽いデバッグ環境を用いて、実際の実行環境に近い(実機に組み込んだ形)でのデバッグを行うことが必要になってくる。
【0008】
この場合、実際に動作するマイクロ・プロセッサ環境の中に、デバッグ作業に必要なプログラム(オンライン・デバッガなど)を組み込み、このS/W(プログラム)によるセルフ開発環境を整えることが有効である。
【0009】
このセルフ開発環境に於ける、プログラムのデバッギングは、H/W的には、プロセッサに従属するシリアル・インタフェースを利用するのが一般的である。
このシリアル・インタフェースに、非常駐のコンソール(ターミナル)を接続するだけで、ターゲット装置上のセルフ環境で、ソフトウェアのデバッグ作業を行うことができる。特に、このシリアル・インタフェースを利用したプログラムのデバッギング手法としては、スナップ・ショットと呼ばれる方法が一般的である(特許文献1参照)。
【0010】
【特許文献1】
特開平10−283217号
【0011】
【発明が解決しようとする課題】
先述の通り、マイクロ・プロセッサを内蔵した制御装置に於いて行われるセルフ開発環境に於ける、プログラムのデバッギングには、H/W的には、プロセッサに従属するシリアル・インタフェースを利用するのが一般的である。このシリアル・インタフェースに、非常駐のコンソール(ターミナル)を接続するだけで、ターゲット装置上のセルフ環境で、ソフトウェアのデバッグ作業を行うことができる。
【0012】
このシリアル・インタフェースを用いた、デバッグ環境の1つに、スナップ・ショットと呼ばれる手法がある。これは、プログラム上、重要な複数のポイントに、シリアル・インタフェースからキャラクタ列を出力するための、命令を埋め込んでおき、シリアル・ターミナルからの操作で、プログラムを実行させると、実プログラムが動作した時に、この命令部分を実行すると、ターミナルにその旨の印字が行われるというものである。
【0013】
この機能を利用すると、ターミナルからプログラムの起動をかけた場合に、プログラムが実行され、処理される順序に従って、通過したプログラムの部分の情報が、ターミナル上に印字されることになり、プログラムの実行順序が極めて安直にトレースできる。
【0014】
この手法は、S/WやF/Wの開発時に頻繁に使用される、実用的かつ有効な手法である。
【0015】
しかし、この手法の場合、オペレータに対する情報の伝達のために、シリアル・インタフェースが用いられることから、その他の操作と同じターミナルを用いることができる点で極めて有効であるが、一方、シリアル・インタフェースの宿命である、印字に時間がかかるというスピード面での制約が問題になる場合が多かった。
【0016】
つまり、プログラムの中に、キャラクタを印字するための命令を埋め込む訳であるから、当然この命令の実行時間が必要なのは当然であるが、シリアル・インタフェースを相手にした場合、ビット列をシリアルに送出する関係から、かなり多くの時間を必要としていた。この時間は複数キャラクタを印字する場合には更に加算されて問題が大きくなる。
【0017】
この時間は、制御処理にリアルタイム性や、高速性が必要のない場合(つまり制御の順序だけが重要である場合)には全く問題にはならないが、処理を一定時間に済ませなければならないようなリアルタイム性を重要視する装置の場合は、致命的な問題になる。また、割り込みなどを利用して、このキャラクタ印字ルーチンを呼び出すようにすると、この印字がある場合と、ない場合で処理の流れが変わったり、所要時間が変わることによって、正しいトレースができないことも問題である。
【0018】
つまり、このスナップ・ショット手法は、プログラムの実行状況を実機に於けるセルフ環境でトレースできるという有効な手段であるが、リアル・タイム性の要求されるシステムでは有効に活用できないということになる。
【0019】
図12に、このスナップショット機能を用いる場合の装置の実行環境の様子を示す。同図に於いて、100はマイクロ・プロセッサを内蔵した制御装置の全体、200はこの制御装置100によって制御される制御対象、300は制御装置100のメインテナンス時に接続される、シリアル通信手段を有するコンソール・ターミナル装置である。
【0020】
制御装置100のうち、101はこの制御装置の制御プロセスを実行するマイクロ・プロセッサ、102はマイクロ・プロセッサの実行状態を記述したプログラムを格納したり、作業エリアとして利用するためのメモリ回路、103はマイクロ・プロセッサの出力するアドレスをデコードして、選択される資源(デバイス)を抽出するためのアドレス・デコーダ回路である。また、104は、この装置で制御される制御対象200のための制御インタフェースであって、外部入出力信号を有する。また、105はシリアル・インタフェースのためのシリアル・コントロール回路であって、パラレル/シリアル変換回路や非同期調歩同期式のシリアル制御回路などを搭載するコントローラ、106はシリアルー通信の外部入出力レベルを合わせるための物理インタフェース回路であって、ドライバ/レシーバ回路などが用いられる。107は、シリアル・インタフェース用の外部接続コネクタである。
【0021】
さて、今、図12に示すようなハードウェア環境に於いて、プログラムのデバッギングを行うことを考える。先ず、デバッギングの対象となるプログラム上の何箇所がに、「A」ポイントから「G」ポイントというような通過ポイントを定め、これらのポイントとなる個所に、「A」から「G」のキャラクタをメインテナンス・コンソール上に表示するプログラム(キャラクタのコードをセットして、シリアル・コンソール上にキャラクタを出力するサブルーチンをコールするなどのプログラム)を埋め込む。
【0022】
この後、メインテナンス・コンソール上から、この対象のプログラムを起動すると、プログラムの実行された順序に従って、「A」から「G」のキャラクタの内のいずれかがコンソール・ターミナル上に印字されていく。このキャラクタの印字順序が、プログラマの予想した通りであれば、プログラムに問題(バグ)はないのであるが、意図していない順序でキャラクタが印字された場合には、プログラム上のどこかにバグが存在することになる。
【0023】
さて、これが、スナップ・ショット手法の使用法であるが、この手法で、コンソール・ターミナルにキャラクタを印字する場合の処理の流れを「A」ポイント部分で表すと、図13の様になる。
【0024】
図13に示すステップS1〜S8に従って手順を説明する。まず、デバッグ対象となるプログラム列のポイントとなる個所毎に、S1、S2、S3、S8を埋め込む。S4〜S7のサブルーチンは、共通の場所に1箇所設ければよい。
【0025】
S1:サブルーチン・コールに備えて必要なレジスタを待避する。
【0026】
S2:ポイントを示すキャラクタ(ここでは「A」)を示すASCIIコード(ここでは「41H」)をレジスタにセットする。
【0027】
S3:キャラクタを印字するためのサブルーチンをコールする。
【0028】
S4:(ここからサブルーチン)シリアル・コントローラのステータス・レジスタをリードして、状態を読み込む。
【0029】
S5:送信のレディ・ビットをチェックして、キャラクタ・コードの送出が可能かどうかを判断する。送信レディでない場合には、S4に戻る。
【0030】
S6:送信レディであれば、S2でセットしたコードをシリアル・コントローラの送信バッファに書き込む。これによってシリアル・インタフェースから、キャラクタ・データがコンソール・ターミナルに対して送出される。
【0031】
S7:サブルーチンからリターンする。
【0032】
S8:待避していたレジスタを復帰して、元の処理に戻る。
という手順で、プログラム上のこのポイントを通過した場合には、メインテナンス・コンソール上に「A」のキャラクタが印字される。
【0033】
しかし、この手順を見ても分かる通り、シリアル・インタフェースにキャラクタを出力する処理は、プログラム上でも最低で8つのステップ(命令)を踏む必要があり、実際には、最低でも数マイクロ秒の時間を要する。印字キャラクタ数を増やして、送信バッファの容量を越える場合には、数十ミリ秒のオーダの時間を要することもある。
【0034】
プログラムが、その実行順序だけを遵守していれば、仕上がりの時間を気にしないようなアプリケーションであれば、この方式のスナップ・ショット手法で、十分なデバッギング効果が得られる。しかし、一般に制御装置では、できるだけ短時間で処理を完結することが求められており、通過ポイントの表示のために、大きな時間を費やすことは許されない場合が多い。特にリアルタイム制御を行う装置では、デバッグのために入れたスナップ・ショットの実行で、その時間管理が狂ってしまうことが懸念される。
【0035】
これが、従来のシリアル・インタフェースを用いたスナップ・ショットによるデバッギング環境の欠点であった。
【0036】
本発明の目的は、マイクロ・プロセッサを搭載した制御装置のプログラム・デバッグのためのセルフ環境に於いて、スナップ・ショット機能が持つ有効性を保持しつつ、リアル・タイム性の欠如を補って、リアル・タイム性を要求される装置に於いても、スナップ・ショット機能を使用できる制御装置を提供することにある。
【0037】
【課題を解決するための手段】
本発明は、前記の課題を解決するため、マイクロプロセッサとその実行プログラムによる制御装置において、実行プログラムのデバッギングを、スナップ・ショット方法でプログラムの実行状態をトレースするにおいて、トレース情報をパラレル・インタフェースを使用して取り出すようにしたもので、以下の構成を特徴とする。
【0038】
(1)マイクロ・プロセッサを中枢部として制御対象を制御し、スナップ・ショット方式で実行プログラムのデバッギングを行う制御装置において、
マイクロ・プロセッサ等にバス結合され、バス上の制御データを外部の測定器にパラレル・データとして出力できるパラレル・インタフェースを設け、
前記実行プログラムは、デバッギング時に、デバッグ対象となるトレース・ポイントにトレース用のデータ・コードを前記パラレル・インタフェースに出力する命令を書き込んでおき、
デバッギング時に前記パラレル・インタフェースから外部の測定器に得る前記データ・コードからプログラムの実行状況をトレースすることを特徴とする。
【0039】
(2)マイクロ・プロセッサを中枢部として制御対象を制御し、スナップ・ショット方式で実行プログラムのデバッギングを行う制御装置において、
マイクロ・プロセッサ等にバス結合され、バス上の制御データを外部にパラレル・データとして出力できるパラレル・インタフェースを設け、
前記パラレル・インタフェースから出力されるパラレル・データを蓄積記憶しておく外部メモリ回路を設け、
前記実行プログラムは、デバッギング時に、デバッグ対象となるトレース・ポイントにトレース用のデータ・コードを前記パラレル・インタフェースに出力する命令を書き込んでおき、
デバッギング時に前記パラレル・インタフェースから外部メモリ回路に蓄積記憶する前記データ・コードからプログラムの実行状況をトレースすることを特徴とする。
【0040】
(3)前記データ・コードのうち、前記パラレル・インタフェースにトレースする開始コードと終了コードを設定可能にし、前記データ・コードと前記開始コードおよび終了コードとの比較から事象の発生間隔の測定を行う測定回路を設けたことを特徴とする。
【0041】
(4)前記データ・コードのうち、前記パラレル・インタフェースにトレースする特定の事象コードを設定可能にし、前記データ・コードと事象コードの比較から事象の発生回数の測定を行う測定回路を設けたことを特徴とする。
【0042】
【発明の実施の形態】
本発明では、上述のシリアル・インタフェースを用いたスナップ・ショット手法による問題点を解決するために、極めて簡単な、パラレル・ポートを用いたデバッグ方法を提案するものであり、以下、実施形態を詳細に説明する。
【0043】
<実施形態1>
図1に本実施形態による、パラレル・ポート方式のメインテナンス(デバッグ)環境を示す。同図は、図12の環境に、簡易なパラレル・ポートを追加したものである。
【0044】
図1に於いて、100,101〜107,200,300は、全て、図12と同じである。同図において、110は、今回追加された簡易なパラレル・インタフェースであり、マイクロ・プロセッサ101等にバス結合され、デバッギング時にバス上の制御データをパラレル・データとして外部に出力するための、データ幅を持ったバッファ回路などで構成される。また、120は、110によって出力される信号を外部に引き出すための接続コネクタである。そして、400がこのパラレル・インタフェースに出力されるコードを記憶したり、表示したりすることのできるロジック・アナライザや、データ・アナライザなどの測定器である。この測定器は、ICEのような専用機である必要はなく、通常のH/Wの開発環境として準備される汎用の機器で構わない。
【0045】
さて、ここで、110のパラレル・インタフェース部分について考える。まず、最も簡便にプログラムの実行状況をパラレル・インタフェース出力することができるようにするために、図2のようなインタフェースの構成例を提案する。
【0046】
図2に於いて、110は、本発明によって装置に付加する簡易なパラレル・インタフェースの全体、111はnビットのデータを外部に出力するためのnビットのバッファ回路である。また、112は、外部にデータを出力する際の同期用信号を生成するためのインバーテッドNAND回路(OR回路)である。
【0047】
更に、同図に於いて、aは、図1の103部のアドレス・デコーダ回路によって生成される、このパラレル・インタフェースが選択されたことを示す「PORTSEL_L」信号、bは、マイクロプロセッサがこの周辺デバイスに対して、データを書き込むための制御信号で「WR_L」信号である。これらa,bの2信号を112でインバーテッドNANDをとった信号が、cの「PORTWR_L」信号であり、このパラレル・インタフェースに対する書き込みであることを示す信号になる。よって、このPORTWR_L信号を外部に対するデータ出力の同期信号に用いる。
【0048】
これらパラレル・インタフェースへの書き込み動作に関して、信号出力の時間関係の例を示したものが、図3である。n本のデータライン「DATA[n:1]_H」が有効である間にPORTWR_L信号の立ち上がりエッジが来るように設計されている。すなわち、外部の計測器(観測装置)に於いて、このPORTWR_L信号の立ち上がりエッジで、n本の出力信号をラッチして格納していけば、マイクロプロセッサが外部に知らせようとしたコードを蓄積して解析することができる。
【0049】
このような、パラレル・インタフェースを用いた場合の、デバッグ方式の場合のプログラム実行を考えると、実行プログラムに埋め込まれる各トレース・ポイントでの処理は、図4に示すように、各ポイントに於いて「パラレル・インタフェースに、該当するポイントに対応するコードを書き込む」という単一の操作だけになる。この処理S11は、プログラムのフェッチと、パラレル・インタフェースへの書き込みサイクルを考えても、50から500ナノ秒のオーダで完結できる。
【0050】
これにより、パラレル・インタフェースを用いたスナップ・ショット方式を用いれば、リアルタイム性が強く要求されるプログラムであっても、大きな影響を与えることなく、これをデバッグすることが可能になる。
【0051】
<実施形態2>
図5は、図2で示した、簡易的なパラレル・インタフェースに、リセット信号(e)を追加し、外部接続コネクタ120に電源を供給できるようにした例である。この例では、外部接続コネクタの外側に外部メモリ回路を接続することが可能になる。
【0052】
図6は、図5に示すパラレル・インタフェースに接続可能なトレース用メモリ回路の例を示す。図6に於いて、500はパラレル・インタフェースに接続可能なトレース用メモリ回路の全体、501は、メモリ素子であり、スタティックRAMや、FlashMemoryなどを使用できる。502は501のメモリに順次インクリメント(またはデクリメント)されるアドレスを生成するためのアドレス・カウンタ回路、503はPROTWR_L信号とPORTRD_L信号のインバーテッドNORをとるための回路である。fのPORTRD_L信号は、図5のインタフェースには表現されていないが、このメモリ回路を別な解析装置につないだ場合に、メモリ内の内容を読み出す際に使用される信号である。また、gは、PORTWR_L信号とPORTRD_L信号のインバーテッドNORをとった信号で、アドレス・カウンタをインクリメント(またはデクリメント)するカウント・パルス信号となる。
【0053】
メモリのデータ・ライン(nビット)は、110部のパラレル・インタフェースのデータライン「DATA[n:1]_H」に接続される。PORTWR_L信号は、メモリの書き込み信号(WE_L)端子に、PORTRD_L信号は、メモリの読み出し信号(OE_L)端子に接続される。RESET_L信号は、アドレス・カウンタをリセットするためにクリア端子に接続される。
【0054】
このトレース用メモリ回路を、図5に示すパラレル・インタフェースに接続して、パラレル・インタフェースを使用した、スナップ・ショット手法を用いると、図4のS11のようにプログラム・デバッグのために実行プログラム内に埋め込まれた、コードの書き込みルーチン部分で、このパラレル・ポートに出力されるデータ(デバッグ用コード)を、501のメモリ・デバイスの中に順次格納していくことができる。つまり、実施形態1の場合は、パラレル・インタフェースから出力されるコードは、順次外部の観測機器でトレースまたは格納していく必要があったが、このようなメモリ回路を外付けすると、このメモリ内に、トレース・コードを格納していくことができる。
【0055】
一定のトレースが完了した場合、このメモリ回路をデバッグの対象となる本体装置から取り外して、専用の解析装置に接続し直して解析することができる。この場合、解析装置側にはPORTRD_L信号をサポートした専用の読み出し回路を設けておく必要がある。
【0056】
501のメモリ素子として、FlashMemoryを使用する場合には、このトレース用メモリ回路は、本体から取り外しても、メモリ内容が揮発しないので、便利である。501のメモリ素子として、揮発性のスタティックRAMを使用する場合には、本体からの電源供給の他に電池などによるバックアップ電源の入力回路を付加することによって、本体からこの回路を取り外しても、メモリ内容を保持できるようにすることが可能である。
【0057】
<実施形態3>
前記までの実施形態では、マイクロ・プロセッサを搭載した装置のプログラム・デバッグのためセルフ環境に於いて、デバッグの対象となるマイクロプロセッサ搭載装置に簡易なパラレル・インタフェースを設け、これを従来のシリアル・インタフェースの代わりにスナップ・ショット機能の出力先にすることによって、プログラム実行時にトレース情報の出力のために発生する時間遅れを最小にしようとするものであった。
【0058】
さて、本実施形態では、デバッグ対象の装置に付加した簡易なパラレル・インタフェースを単に、スナップ・ショット情報の高速な出力インタフェースとして用いるだけでなく、これを更に活用して、セルフ環境でのデバッグ作業や、メインテナンス作業をより便利に行うための環境を提供する。
【0059】
まず、図5に示した、簡易なパラレル・インタフェースを装置に具備し、更に、外部に図7に示すような付加回路を用意することによって、プログラムのデバッグ時に有効な情報の1つである、事象の発生間隔の測定を簡便に行うことができるようにする。
【0060】
図7に於いて、600が、本実施形態による事象発生間隔測定回路全体である。同図に於いて、601は、時間計測を開始する部分で、スナップ・ショット機能により発生されるコード(開始コード)を予め設定する部分で、DIPスイッチなどを用いて可変にすることもできるし、書き換え可能なEEPROMのようなデバイスで半固定的にすることもできるし、完全に固定のコード(例えば「S」に相当する固定コードなど)にすることもできる。
【0061】
次に、602は、601で設定された開始コードと、パラレル・インタフェースから出力されるコードとを比較するためのコンパレータ回路Aである。この回路の出力は、一致時(マッチ時)に「L」レベルになるものとする。603は、コンパレータAの一致検出信号と、パラレル・インタフェースから出力される「PORTWR_L」信号のインバーテッドNAND条件をとるための回路である。コンパレータAから一致条件が出ている間にPORTWR_Lが与えられると、i部のSTART_L信号をアサートする。
【0062】
一方、同図に於いて、604は、時間計測を終了する部分で、スナップ・ショット機能により発生されるコード(終了コード)を予め設定する部分で、DIPスイッチなどを用いて可変にすることもできるし、書き換え可能なEEPROMのようなデバイスで半固定的にすることもできるし、完全に固定のコード(例えば「P」に相当する固定コードなど)にすることもできる。
【0063】
次に、605は、604で設定された終了コードと、パラレル・インタフェースから出力されるコードとを比較するためのコンパレータ回路Bである。この回路の出力は、一致時(マッチ時)に「L」レベルになるものとする。606は、コンパレータBの一致検出信号と、パラレル・インタフェースから出力される「PORTWR_L」信号のインバーテッドNAND条件をとるための回路である6コンパレータBから一致条件が出ている間にPORTWR_Lが与えられると、j部のSTOP_L信号をアサートする。
【0064】
更に、同図の607は、RS(SetReset)Flip−F1op回路である。i部のSTART_L信号がアサートされると、このフリップ・フロップの出力k(OUT_L)信号は「H」にセットされ、jのSTOP_L信号がアサートされると、このフリップ・フロップの出力k(OUT_L)信号は「L」にリセットされる。608は、OUT_L信号を外部に出力するためのコネクタである。
【0065】
このような外部回路を構成し、デバッグ対象となるプログラムのラインの中に計測を開始される「開始コード」と、計測を終了させるための「終了コード」を埋め込んでおいてから、プログラムを実行すれば、本回路の最終出力である「O∪T_L」信号のパルス幅を外部測定器で計測することによって、所望の事象発生間隔を測定することが可能である。
【0066】
この回路例の実際の動作をタイムチャートで示したものが図8である。
【0067】
<実施形態4>
更に、図5に示す簡易的なパラレル・インタフェースに対して、データの読み込み機能を付加してやると、このデバッグ用パラレル・インタフェースの活用方法が広がり、プログラムのセルフ開発(セルフ・デバッグ)環境が一段と使いやすいものになる。
【0068】
図9に、データの読み込み機能を付加した、パラレル・インタフェースの回路例を示す。同図に於いて、110,111,112,120は、図5と同じであるが、111のnビットのデータ・バッファは双方向バッファを用いている。113は追加になったインバーテッドNAND回路であって、aのPORTSEL_L信号と、lで示すプロセッサの読み込み信号(RD_L)とのインバーテッドNAND条件によってfのPORTRD_L信号をアサートする。このPORTRD_L信号は、このパラレル・インタフェース(ポート)に対する読み込み動作であることを示す。a〜e信号は図5と同じである。
【0069】
111のバッファ回路では、cのPORTWR_L信号がアサートされている間は、出力方向をイネーブルにし、PORTRD_Lがアサートされている間は、入力方向をイネーブルにする。
【0070】
デバッグ用のパラレル・インタフェースをこのように構成すると、装置のセルフ・デバッグ環境として、更に利用範囲が広がる。
【0071】
例えば、図10に示す回路は、その1つの例であって、これは、特定の事象(プログラム内の特定のポジションで、計数専用のコードを埋め込んでおく)が何回発生したかを計数するための回路例である。
【0072】
図10に於いて、700は発生事象を計数するための付加回路の全体、701は計数する事象のコードを設定する部分であって、DIPスイツチなどを用いて可変にすることもできるし、書き換え可能なEEPROMのようなデバイスで半固定的にすることもできるし、完全に固定のコード(例えば「N」に相当する固定コードなど)にすることもできる、
次に、702は、701で設定された計数コードと、パラレル・インタフェースから出力されるコードとを比較するためのコンパレータ回路Cである。703は、コンパレータCの一致検出信号と、パラレルーインタフェースから出力される「PORTWR_L」信号のインバーテッドNAND条件をとるための回路である。コンパレータCから一致条件が出ている間にPORTWR_Lが与えられるとm部のCOUNT_L信号をアサートする。
【0073】
704は、C0UNT_L信号のパルス数をカウントするためのアップ・カウンタであり、CLK端子に与えられるCOUNT_Lのパルス数を計数する。CLR端子には、RESET_L信号が与えられており、この信号がアサートされると、カウンタを初期化する。また、OE端子には、PORTRD_L信号が与えられており、この信号がアサートされると、計数結果をデータラインに出力してプロセッサ側でこれを読み込むことができる。
【0074】
このような回路を、図9のパラレル・インタフェースに接続すると、プログラムのデバッグの一環として、特定事象が、何回繰り返しているのかを計数する機能を持たせることができ、それをセルフ開発環境(オンライン・デバッグ環境)にてその装置自体のプロセッサが読み込んで処理することができるようになる。
【0075】
<実施形態5>
更に、図9に示す、パラレル・インタフェースを用いた場合には、図11に示すようなトレース用メモリ回路を外付けすることにより、スナップ・ショット機能によるプログラムの実行状況を、一旦メモリ回路上に蓄積した上で、トレース停止後に、そのままそれをセルフ開発環境(オンライン・デバッグ環境)にてその装置自体のプロセッサが読み込んで処理、解析することができるようになる。
【0076】
この例を示す図11は、前記の実施形態2にて提案した回路(図6)と全く同じであるが、本体側のパラレル・インタフェースを図9のように進化させることによって、セルフ開発環境で使用できることになり、この回路の活用範囲が大きく広がる。
【0077】
【発明の効果】
本発明の趣旨は、シリアル・インタフェースを用いた、プログラムのセルフ開発環境に於いて、プログラムの実行状況をトレースするための手法の1つであるスナップ・ショット機能に関して、実行プログラムに埋め込まれるトレース・コードの出力をシリアル・インタフェースに対して行うのではなく、装置上に、簡易なパラレル・インタフェースを設けた上で、そのパラレル・インタフェースに対して、出力するようにしたため、トレース・コードの出力を迅速に行うことができ、リアルタイム性の要求されるプログラムのデバッグについても、便利なスナップ・ショット機能を利用できる可能性が高くなった。
【0078】
実施形態1では、極めて簡易なパラレル・インタフェース回路を付加することによって、外部から、プログラムの実行状況を簡易にトレースできる環境を提供できる。
【0079】
実施形態2のトレース用メモリ回路機能は、本体装置に設けられる極めて簡易なスナップ・ショット監視用のパラレル・インタフェースに接続でき、本体に常設する必要がないため、本体の価格の上昇を抑えると共に、部品点数を増やさないことによって装置の省スペース化、高信頼性化に寄与しつつ、必要時にはデバッグに有効活用することができる。また、装置が設置された現場に解析装置を持ち込めないような場合には、実機のプログラム実行状況を現場でトレースして、それを離れた場所にある解析環境で解析するようなスタイルを運用可能にする。
【0080】
実施形態3では、装置内のプログラムの実行時間の計測のために、計測開始ポイント(開始コード)と計測終了ポイント(終了コード)をプログラムに埋め込むことによって、外部からは、1本の信号のパルス幅を測定するだけでよいという、簡便な事象発生間隔測定ができ、装置のデバッグ環境を一段と向上させることができる。
【0081】
実施形態4では、プログラムの処理回数を計数するために、計数したいポイントに計数コードを埋め込んでおくことによって、そのポイントの処理回数を外部で計数し、それを、デバッグ対象装置の本体から読み込めるようにしたため、より簡便で、実使用状態に近い環境での、装置デバッグ作業を提供できる。
【図面の簡単な説明】
【図1】本発明の実施形態1を示す制御装置のスナップ・ショット機能の実行環境。
【図2】実施形態1におけるパラレル・インタフェース部110の最も簡単な構成例。
【図3】実施形態1におけるパラレル・インタフェース部への書き込み動作波形。
【図4】実施形態1におけるパラレル・インタフェース部を外部通知に用いた場合のスナップ・ショット実行例。
【図5】本発明の実施形態2におけるパラレル・インタフェース部に電源とリセットを加えた例。
【図6】実施形態2における外部接続コネクタ部に接続可能なトレース用メモリ回路例。
【図7】本発明の実施形態3における事象発生間隔を測定するための付加回路例。
【図8】実施形態3における事象発生測定回路の動作波形。
【図9】本発明の実施形態4におけるパラレル・インタフェース部に読み込み機能を加えた例。
【図10】実施形態4における発生事象を計数するための付加回路例。
【図11】本発明の実施形態5における本体で読み込み可能なトレース用メモリ回路例。
【図12】従来の制御装置に於けるスナップ・ショット機能の実行環境。
【図13】従来の実行ポイントAに於けるスナップ・ショット動作時のプログラム実行例。
【符号の説明】
100…制御装置全体
200…制御対象
300…コンソール・ターミナル装置
101…マイクロ・プロセッサ
102…メモリ回路
103…アドレス・デコーダ回路
104…制御インタフェース
105…シリアル・コントロール回路
106…物理インタフェース回路
107…外部接続コネクタ
110…パラレル・インタフェース
120…接続コネクタ
400…測定器
111…バッファ回路
500…トレース用メモリ回路全体
501…メモリ
502…アドレス・カウンタ
600…事象発生間隔測定回路全体
601…開始コード設定部
602、605…コンパレータ
604…終了コード設定部
700…付加回路全体
701…計数コード設定部
702…コンパレータ
704…アップ・カウンタ
Claims (4)
- マイクロ・プロセッサを中枢部として制御対象を制御し、スナップ・ショット方式で実行プログラムのデバッギングを行う制御装置において、マイクロ・プロセッサ等にバス結合され、バス上の制御データを外部の測定器にパラレル・データとして出力できるパラレル・インタフェースを設け、
前記実行プログラムは、デバッギング時に、デバッグ対象となるトレース・ポイントにトレース用のデータ・コードを前記パラレル・インタフェースに出力する命令を書き込んでおき、
デバッギング時に前記パラレル・インタフェースから外部の測定器に得る前記データ・コードからプログラムの実行状況をトレースすることを特徴とするデバッギング装置。 - マイクロ・プロセッサを中枢部として制御対象を制御し、スナップ・ショット方式で実行プログラムのデバッギングを行う制御装置において、マイクロ・プロセッサ等にバス結合され、バス上の制御データを外部にパラレル・データとして出力できるパラレル・インタフェースを設け、
前記パラレル・インタフェースから出力されるパラレル・データを蓄積記憶しておく外部メモリ回路を設け、
前記実行プログラムは、デバッギング時に、デバッグ対象となるトレース・ポイントにトレース用のデータ・コードを前記パラレル・インタフェースに出力する命令を書き込んでおき、
デバッギング時に前記パラレル・インタフェースから外部メモリ回路に蓄積記憶する前記データ・コードからプログラムの実行状況をトレースすることを特徴とするデバッギング装置。 - 前記データ・コードのうち、前記パラレル・インタフェースにトレースする開始コードと終了コードを設定可能にし、前記データ・コードと前記開始コードおよび終了コードとの比較から事象の発生間隔の測定を行う測定回路を設けたことを特徴とする請求項1または2に記載のデバッギング装置。
- 前記データ・コードのうち、前記パラレル・インタフェースにトレースする特定の事象コードを設定可能にし、前記データ・コードと事象コードの比較から事象の発生回数の測定を行う測定回路を設けたことを特徴とする請求項1または2に記載のデバッギング装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003071162A JP2004280480A (ja) | 2003-03-17 | 2003-03-17 | デバッギング装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003071162A JP2004280480A (ja) | 2003-03-17 | 2003-03-17 | デバッギング装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004280480A true JP2004280480A (ja) | 2004-10-07 |
Family
ID=33287667
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003071162A Pending JP2004280480A (ja) | 2003-03-17 | 2003-03-17 | デバッギング装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004280480A (ja) |
-
2003
- 2003-03-17 JP JP2003071162A patent/JP2004280480A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4138021B2 (ja) | プロセッサベースのデバイス、ソフトウェア性能プロファイリング情報をもたらす方法およびソフトウェア性能プロファイリング情報を生成し分析するためのソフトウェア開発システム | |
US5630102A (en) | In-circuit-emulation event management system | |
US5889981A (en) | Apparatus and method for decoding instructions marked with breakpoint codes to select breakpoint action from plurality of breakpoint actions | |
US6598178B1 (en) | Peripheral breakpoint signaler | |
US7506205B2 (en) | Debugging system and method for use with software breakpoint | |
US6145122A (en) | Development interface for a data processor | |
US6877114B2 (en) | On-chip instrumentation | |
US6915416B2 (en) | Apparatus and method for microcontroller debugging | |
US6247146B1 (en) | Method for verifying branch trace history buffer information | |
US7562258B2 (en) | Generation of trace elements within a data processing apparatus | |
CN108549591A (zh) | 一种嵌入式系统的黑匣子装置及其实现方法 | |
KR20150008441A (ko) | 리셋 조건 트레이스 기능들을 갖춘 프로세서 디바이스 | |
US6331957B1 (en) | Integrated breakpoint detector and associated multi-level breakpoint techniques | |
EP2847683A1 (en) | Processor device with instruction trace capabilities | |
US7596725B2 (en) | Efficient trace triggering | |
JP2001236245A (ja) | 異なる命令セットフィールドに固有のハードウエアでの実行時にエミュレートされた命令セットのトレースを再生成するための方法および装置 | |
JP2007257441A (ja) | プロセッサおよびプロセッサ制御方法 | |
US6158023A (en) | Debug apparatus | |
EP1125199B1 (en) | Method of debugging a program thread | |
CN113127291A (zh) | 微控制器 | |
US8464098B2 (en) | Microcontroller device, microcontroller debugging device, method of debugging a microcontroller device, microcontroller kit | |
JP2004280480A (ja) | デバッギング装置 | |
US7051237B2 (en) | Program-controlled unit | |
US5991899A (en) | Method and apparatus for a real-time diagnostic tool using a non-intrusive trace technique | |
JP2006323726A (ja) | モニタプログラムおよびリアルタイムトレースシステム |