(57)【特許請求の範囲】
【請求項１】
プログラムを機械語オブジェクトに変換するコンパイラを有する支援装置を備え、該コンパイラは最適化機械語オブジェクトとデバッグ可能な機械語オブジェクトとを生成可能に構成され、通常時は前記最適化機械語オブジェクトのみをコンパイルしてターゲットにダウンロードし、当該ターゲットで最適化機械語オブジェクトを実行し、デバッグ時は前記コンパイラでデバッグ可能な機械語オブジェクトをコンパイルして前記ターゲットにダウンロードし、デバッグを実施するようにし、
前記ターゲットは、
前記最適化機械語オブジェクトを保持する第一の記憶領域と、
前記デバッグ可能な機械語オブジェクトを保持する第二の記憶領域と、
前記最適化機械語オブジェクトの先頭アドレスまたは前記デバッグ可能な機械語オブジェクトの先頭アドレスを登録するテーブルと、
このテーブルに登録されたいずれかの前記先頭アドレスを指定して前記最適化機械語オブジェクトまたは前記デバッグ可能な機械語オブジェクトを実行するプログラム実行部と、を有し、
前記支援装置からのデバッグ指示に基づき前記デバッグ可能な機械語オブジェクトが前記第二の記憶領域に保持されているかを判定し、
この判定にて前記デバッグ可能な機械語オブジェクトが前記第二の記憶領域に既に保持されていると判定されたとき、前記第二の記憶領域に保持されたデバッグ可能な機械語オブジェクトの先頭アドレスを前記テーブルに登録して前記プログラム実行部に前記デバッグ可能な機械語オブジェクトを実行させ、
前記判定にて前記デバッグ可能な機械語オブジェクトが前記第二の記憶領域に未保持と判定されたとき、前記支援装置から前記デバッグ可能な機械語オブジェクトを受信して前記第二の記憶領域に転送した後、該転送されたデバッグ可能な機械語オブジェクトの先頭アドレスを前記テーブルに登録して前記プログラム実行部に前記デバッグ可能な機械語オブジェクトを実行させる
ことを特徴とするデバッグ方法。
【請求項２】
請求項１に記載のデバッグ方法において、
前記ターゲットは前記支援装置からプログラムの実行の停止位置を示すブレーク位置情報を受信すると、該ブレーク位置情報に基づき前記デバッグ可能な機械語オブジェクトの所定箇所にプログラムの実行を停止するためのブレーク命令を挿入し、
前記プログラム実行部は前記ブレーク命令の実行に伴い前記デバッグ可能な機械語オブジェクトの実行を停止し、
この停止状態を前記支援装置に送信する
ことを特徴とするデバッグ方法。
【請求項３】
請求項１又は２に記載されたデバッグ方法において、
前記コンパイラは、ＩＥＣ言語で記述されたプログラムを機械語オブジェクトに変換するように構成され、前記ターゲットはプログラマブルコントローラで構成され、前記支援装置はプログラマブルコントローラのローダ機能を具備していることを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードを機械語オブジェクトに変換するコンパイラを備え、ソースコード上でデバッグを行なうデバッグ方法に関する。
【背景技術】
【０００２】
高速に処理を行なうために、プログラムのコンパイル時に最適化を行なう方法が提案されている。しかし、最適化機械語オブジェクトは、実行順序の変更、不明変数の削除等が行なわれている可能性があり、ソースコード上でデバックすることが困難になる。
そこで、従来、最適化オブジェクトファイルの内容を入力し、この最適化オブジェクトの内容に対応して逆コンパイラによりソースコードデバッグ用ソースコードを生成するとともに、最適化オブジェクトファイルの内容に基づき前記ソースコードデバッグ用ソースコードに対応するマシンコード部分およびシンボル情報部分から構成されたオブジェクトファイルを生成し、シンボル情報部分及びソースコードデバッグ用ソースコードを使用してソースコードデバッグを行なうようにしたソースコードレベルデバッグ装置が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−２４２９４２号公報（第１頁、図４）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１に記載の従来例にあっては、最適化オブジェクトから逆コンパイルすることによりデバッグ用のソースコードを生成するようにしているので、最適化オブジェクトを逆コンパイルしてデバッグ用のソースコードを正確に生成することが困難であるとともに時間がかかるという未解決の課題がある。
そこで、本発明は、上記従来例の未解決の課題に着目してなされたものであり、最適化オブジェクトを逆コンパイルすることなく、デバッグ時にソースコード上でデバッグできるとともに、コンパイル及びダウンロード時間を必要最小限とすることができるデバッグ方法を提供することを目的としている。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、請求項１に係るデバッグ方法は、プログラムを機械語オブジェクトに変換するコンパイラを有する支援装置を備え、該コンパイラは最適化機械語オブジェクトとデバッグ可能な機械語オブジェクトとを生成可能に構成され、通常時は前記最適化機械語オブジェクトのみをコンパイルしてターゲットにダウンロードし、当該ターゲットで最適化機械語オブジェクトを実行し、デバッグ時は前記コンパイラでデバッグ可能な機械語オブジェクトをコンパイルして前記ターゲットにダウンロードし、デバッグを実施するようにし、前記ターゲットは、前記最適化機械語オブジェクトを保持する第一の記憶領域と、前記デバッグ可能な機械語オブジェクトを保持する第二の記憶領域と、
前記最適化機械語オブジェクトの先頭アドレスまたは前記デバッグ可能な機械語オブジェクトの先頭アドレスを登録するテーブルと、このテーブルに登録されたいずれかの前記先頭アドレスを指定して前記最適化機械語オブジェクトまたは前記デバッグ可能な機械語オブジェクトを実行するプログラム実行部と、を有し、前記支援装置からのデバッグ指示に基づき前記デバッグ可能な機械語オブジェクトが前記第二の記憶領域に保持されているかを判定し、この判定にて前記デバッグ可能な機械語オブジェクトが前記第二の記憶領域に既に保持されていると判定されたとき、前記第二の記憶領域に保持されたデバッグ可能な機械語オブジェクトの先頭アドレスを前記テーブルに登録して前記プログラム実行部に前記デバッグ可能な機械語オブジェクトを実行させ、前記判定にて前記デバッグ可能な機械語オブジェクトが前記第二の記憶領域に未保持と判定されたとき、前記支援装置から前記デバッグ可能な機械語オブジェクトを受信して前記第二の記憶領域に転送した後、該転送されたデバッグ可能な機械語オブジェクトの先頭アドレスを前記テーブルに登録して前記プログラム実行部に前記デバッグ可能な機械語オブジェクトを実行させることを特徴としている。
【０００７】
また、請求項２に係るデバック方法は、請求項１に係る発明において、前記ターゲットは前記支援装置からプログラムの実行の停止位置を示すブレーク位置情報を受信すると、該ブレーク位置情報に基づき前記デバッグ可能な機械語オブジェクトの所定箇所にプログラムの実行を停止するためのブレーク命令を挿入し、前記プログラム実行部は前記ブレーク命令の実行に伴い前記デバッグ可能な機械語オブジェクトの実行を停止し、この停止状態を前記支援装置に送信することを特徴としている。
また、請求項３に係るデバック方法は、請求項１又は２に係る発明において、前記コンパイラは、ＩＥＣ言語で記述されたプログラムを機械語オブジェクトに変換するように構成され、前記ターゲットはプログラマブルコントローラで構成され、前記支援装置はプログラマブルコントローラのローダ機能を具備していることを特徴としている。
【発明の効果】
【０００８】
本発明によれば、コンパイラでプログラムを最適化機械語オブジェクトとデバッグ可能な機械語オブジェクトとを生成可能に構成し、通常時は最適化機械語オブジェクトだけをコンパイルしてターゲットにダウンロードすることにより、ターゲットで最適化機械語オブジェクトを実行し、デバッグ時にはデバッグ可能な機械語オブジェクトをコンパイルしてターゲットにダウンロードしデバッグを実施するので、逆コンパイル等の処理が不要であり、また、最初から最適化機械語オブジェクト及びデバッグ可能な機械語オブジェクトの双方をコンパイルし、両者をターゲットにダウンロードする場合に比較して、コンパイル時間及びターゲットに対するダウンロード時間を必要最小限とすることができ、ユーザの効率の良いソフトウェア開発を実施することができるという効果が得られる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態を示すブロック図である。
【図２】本発明の一実施形態を示すシステム構成図である。
【図３】支援装置の支援処理手順の一例を示すフローチャートである。
【図４】メニュー画面を示す説明図である。
【図５】プログラマブルコントローラのオブジェクト実行処理手順の一例を示すフローチャートである。
【図６】送信する機械語オブジェクトの構成を示す説明図である。
【図７】オブジェクト実行時のアドレステーブルの展開状態を示す説明図である。
【図８】デバッグ時に送信するデバッグ情報を示す説明図である。
【図９】デバッグ時のアドレステーブルの展開状態を示す説明図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を図面に基づいて説明する。
図１は、本発明の一実施形態を示すブロック図であり、図中、支援装置１は入力されるソースプーグラムを機械語オブジェクトに変換する例えばプログラムローダで構成され、この支援装置１から機械語オブジェクトがターゲット、例えばプログラマブルコントローラ２にダウンロードされる。支援装置１には、表示装置３、入力装置４（例えばキーボードやポインティングデバイス等）及び記憶装置５が内部バス６を介してＣＰＵ７に接続されている。
【００１１】
また、プログラマブルコントローラ２は、入出力モジュール等の制御対象機器との通信を行う際に、専用線であるバスの調停を行うバスコントローラ８、システムプログラムやユーザープログラムを電源遮断時も保存するために記憶するフラッシュメモリＭＦ、このフラッシュメモリＭＦからシステムプログラムやユーザープログラムを展開・実行するプログラムメモリＭＰ及びシステムプログラムやユーザープログラムがリード／ライトする情報を管理・保存するデータメモリＭＤを備え、これらが内部バス９を介してシステムプログラム及びユーザープログラムを実行するプログラム実行部としてのＣＰＵ１０に接続されている。
【００１２】
支援装置１は、図２に示すように、ユーザインタフェース部１１でＩＥＣ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｅｌｅｃｔｒｏｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｓｓｉｏｎ）言語によって記述されたプログラムを書いてソースコードを作成し、作成したソースコードをコンパイラ１２に供給し、このコンパイラ１２で、通常時はソースコードに対して最適化処理を行なって、ソースコードを最適化機械語オブジェクトに変換し、最適化機械語オブジェクト１３として記憶装置５に格納するとともに、この最適化機械語オブジェクト１３をＲＳ２３２Ｃ等のデータ通信部１４を介してプログラマブルコントローラ２にダウンロードする。一方、デバッグ時には、コンパイラでソースコードをデバッグ可能な機械語オブジェクトに変換し、デバッグ可能な機械語オブジェクト１５として記憶装置５に格納するとともに、このデバッグ可能な機械語オブジェクト１５を、データ通信部１４を介してプログラマブルコントローラ２にダウンロードする。
【００１３】
プログラマブルコントローラ２は、データ通信部２１を有し、このデータ通信部２１を通じて支援装置１から入力される最適化機械語オブジェクト１３をフラッシュメモリＭＦに格納し、この最適化機械語オブジェクト１３をプログラムメモリＭＰに最適化機械語オブジェクト２２として展開するとともに、データ通信部２１を通じて支援装置１から入力されるデバッグ可能な機械語オブジェクト１５をフラッシュメモリＭＦに格納し、このデバッグ可能な機械語オブジェクト１５をデバッグ可能な機械語オブジェクト２３としてプログラムメモリＭＰに展開する。そして、通常時はプログラムメモリＭＦに展開されている最適化機械語オブジェクト２２を実行する。このとき、機械語オブジェクトの先頭アドレスをアドレステーブル２４に展開し、このアドレステーブル２４のアドレスに基づいて最適化機械語オブジェクトを実行する。すなわち、プログラマブルコントローラ２はアドレステーブル２４を参照して、該アドレステーブル２４の情報を間接アドレス指定して、そのアドレス先に保持された機械語オブジェクトを実行する（プログラム実行部）。通常時、アドレステーブル２４には最適化機械語オブジェクト２２の先頭アドレスが保持されており、プログラマブルコントローラ２は最適化機械語オブジェクト２２を実行することで高速化が図られている。
【００１４】
また、デバッグ時は、プログラムメモリＭＰに展開されているデバッグ可能な機械語オブジェクト２３を実行するが、この機械語オブジェクトの先頭アドレスをアドレステーブル２４に展開し、このアドレステーブルを参照してデバッグを行い、デバッグの終了時にアドレステーブル２４を通常時の機械語オブジェクトの先頭アドレスに切換える。
ここで、支援装置１の具体的な処理の一例を説明する。図３は、支援装置の支援処理手順の一例を示している。この支援処理は、先ず、ステップＳ１で、処理メニューを表示する。この処理メニューとしては図４に示すように、コンパイル開始メニュー３１、デバッグ開始メニュー３２、終了ボタン３３が少なくとも設定されており、これらメニュー３１〜３３のうちの所望のメニュー上に例えばマウス、キーボード等の入力装置４によってカーソルを移動させ、この状態で例えばマウスをクリックすることにより、メニューを選択することができる。
【００１５】
次いで、ステップＳ２に移行して、コンパイル開始メニュー３１が選択されたか否かを判定し、コンパイル開始メニュー３１が選択されていないときには、後述するステップＳ７に移行し、コンパイル開始メニュー３１が選択されたときには、ステップＳ３に移行して、ソースコードを最適化コンパイルして最適化機械語オブジェクトに変換するとともに、このときのソースコードと識別番号との対応表を作成し、最適化機械語オブジェクト１３及びソースコード・識別番号対応表を記憶装置５の所定記憶領域に格納する。なお、識別番号については後述するが、コンパイル後の機械語オブジェクトを一意に識別する情報（番号）であって、その記述方法はどのような形式でも構わない。
【００１６】
次いで、記憶装置５の所定記憶領域に格納されている最適化機械語オブジェクト１３を、データ通信部１４を介してプログラマブルコントローラ２に送信するダウンロードを行なってからステップＳ６に移行する。
このステップＳ６では、デバッグ開始メニュー３２が選択されたか否かを判定し、デバッグ開始メニュー３２が選択されていないときにはステップＳ７に移行して、支援処理を終了するか否かを判定する。この判定は、処理メニューに表示されている終了ボタン３３が選択されているか否かを判定し、終了ボタン３３が選択されているときには、支援処理を終了し、終了ボタン３３が選択されていないときには前記ステップＳ１に戻る。
【００１７】
また、ステップＳ６の判定結果で、デバッグ開始メニュー３２が選択されているときには、ステップＳ８に移行して、デバッグ時に処理を停止させるブレークポイントを設定して後述するデバッグ情報を作成し、次いでステップＳ９に移行して、プログラマブルコントローラ２に対してデバッグ開始通知を送信する。なお、ブレークポイントについては後述するが、ソースコードにおける任意の位置に相当する箇所で、プログラム実行を中止させる為の一種のマーカー（識別子）であって、その実現方法はどのような形式でも構わない。以降の説明では、一例として、ブレーク命令としてのブレークポイント処理コードを挿入する方法を用いるものとする。
【００１８】
次いで、ステップＳ１０に移行して、プログラマブルコントローラ２からデバッグしたいオブジェクトのデバッグ可能な機械語オブジェクトの有無を表すオブジェクト有無通知を受信したか否かを判定し、オブジェクト有無通知を受信していないときにはオブジェクト有無通知を受信するまで待機し、オブジェクト有無通知を受信したときにはステップＳ１１に移行する。
このステップＳ１１では、オブジェクト有無通知の内容がデバッグ可能な機械語オブジェクトが存在するものであるか否かを判定し、デバッグ可能な機械語オブジェクトが存在する場合には後述するステップＳ１７に移行し、デバッグ可能な機械語オブジェクトが存在しない場合にはステップＳ１２に移行する。
【００１９】
このステップＳ１２では、ソースコードをコンパイルしてデバッグ可能な機械語オブジェクトを生成し、次いでステップＳ１３に移行して、生成したデバッグ可能な機械語オブジェクトについてのソースコードと機械語オブジェクトとの対応を表すソースコード・機械語オブジェクト対応表を作成し、次いでステップＳ１４に移行して、デバッグ可能な機械語オブジェクト１５及びソースコード・機械語オブジェクト対応表を記憶装置５の所定記憶領域に格納してからステップＳ１５に移行する。
このステップＳ１５では、記憶装置５の所定記憶領域に格納されたデバッグ可能な機械語オブジェクト１５、ソースコード・機械語オブジェクト対応表及びデバッグ情報を、データ通信部１４を介してプログラマブルコントローラ２に送信してダウンロードする。
【００２０】
次いで、ステップＳ１６に移行して、プログラマブルコントローラ２から、後述するブレークポイント処理コードの注入処理が完了した処理完了通知を受信したか否かを判定し、処理完了通知を受信していないときには処理完了通知を受信するまで待機し、処理完了通知を受信したときにはステップＳ１７に移行する。
このステップＳ１７では、デバッグ処理を実行し、次いで、ステップＳ１８に移行して、デバッグ処理が終了したか否かを判定し、デバッグ処理が終了していないときにはこれが終了するまで待機し、デバッグ処理が終了したときにはステップＳ１９に移行して、デバッグ終了通知を、データ通信部１４を介してプログラマブルコントローラ２に送信してから前記ステップＳ７に移行する。
【００２１】
ここで、プログラマブルコントローラ２の具体的な処理の一例を説明する。図５は、プログラマブルコントローラ２のオブジェクト実行処理手順の一例を示している。このオブジェクト実行処理は、先ず、ステップＳ３１で、支援装置１から最適化機械語オブジェクト１３及びソースコード・識別番号対応表を受信したか否かを判定し、最適化機械語オブジェクト１３及びソースコード・識別番号対応表を受信していないときにはステップＳ３２に移行して、プログラマブルコントローラ２のフラッシュメモリＭＦの第一の記憶領域に最適化機械語オブジェクト２２及びソースコード・識別番号対応表が格納されているか否かを判定し、最適化機械語オブジェクト２２及びソースコード・識別番号対応表が格納されているときには後述するステップＳ３５に移行し、最適化機械語オブジェクト２２及びソースコード・識別番号対応表が格納されていないときには前記ステップＳ３１に戻る。
【００２２】
また、前記ステップＳ３１の判定結果において、最適化オブジェクト１３及びソースコード・識別番号対応表を受信しているときには、ステップＳ３３に移行して、受信した最適化機械語オブジェクト１３をプログラムメモリＭＰの所定記憶領域等に最適化機械語オブジェクト２２として展開し、次いでステップＳ３４に移行して、ソースコード・識別番号対応表に基づいてアドレステーブル２４を最適化用アドレスに設定する。
【００２３】
次いで、ステップＳ３５に移行して、アドレステーブル２４の最適化用アドレスを参照して最適化機械語オブジェクト２２を実行する。
次いで、ステップＳ３６に移行して、最適化機械語オブジェクト２２の実行が終了したか否かを判定し、最適化機械語オブジェクト２２の実行が終了していないときには前記ステップＳ３５に戻り、最適化機械語オブジェクトの実行が終了したときにはステップＳ３７に移行して、支援装置１からデバッグ開始通知を受信したか否かを判定し、デバッグ開始通知を受信していないときには前記ステップＳ３７に戻りデバッグ開始通知を待つ。デバッグ開始通知を受信したときにはステップＳ３８に移行する。
【００２４】
このステップＳ３８では、フラッシュメモリＭＦの第二の記憶領域へのデバッグ可能な機械語オブジェクト２３の格納の有無を表すオブジェクト有無通知を作成し、次いでステップＳ３９に移行して、作成したオブジェクト有無通知を、データ通信部２１を介して支援装置１に送信してからステップＳ４０に移行する。
このステップＳ４０では、オブジェクト有無通知の内容がデバッグ可能な機械語オブジェクト２３がフラッシュメモリＭＦの第二の記憶領域に格納されているものであるか否かを判定し、デバッグ可能な機械語オブジェクト２３が格納されている場合には、ステップＳ４１に移行して、アドレステーブル２４のアドレスをデバッグ可能な機械語オブジェクト２３のソースコード・機械語オブジェクト対応表に基づくデバッグ用アドレスに切換えてから後述するステップＳ４８に移行し、デバッグ可能な機械語オブジェクト２３が格納されていない場合には、ステップＳ４２に移行する。
【００２５】
このステップＳ４２では、支援装置１からデバッグ可能な機械語オブジェクト１５、ソースコード・機械語オブジェクト対応表及びデバッグ情報を受信したか否かを判定し、これらを受信していないときには受信するまで待機し、デバッグ可能な機械語オブジェクト１５、ソースコード・機械語オブジェクト対応表及びデバッグ情報を受信したときにはステップＳ４３に移行する。
このステップＳ４３では、ソースコード・機械語対応表に基づいてアドレステーブルにデバッグ用アドレスを設定し、次いでステップＳ４４に移行して、アドレステーブルをデバッグ用アドレスに切換えてからステップＳ４５に移行する。
【００２６】
このステップＳ４５では、デバッグ情報に基づいてブレークポイントの位置を認識し、該当位置にブレークポイント処理コードを注入してからステップＳ４６に移行し、ブレークポイント処理コードの注入処理が全て終了したか否かを判定し、ブレークポイント処理コードの注入処理が終了していないときには前記ステップＳ４５に戻り、ブレークポイント処理コードの注入処理が全て終了したときにはステップＳ４７に移行して、処理完了通知を、データ通信部２１を介して支援装置１に送信してからステップＳ４８に移行する。
このステップＳ４８では、支援装置１からデバッグ完了通知を受信したか否かを判定し、デバッグ完了通知を受信していないときにはこれを受信するまで待機し、デバッグ完了通知を受信したときにはステップＳ４９に移行して、アドレステーブル２４を最適化用アドレスに切換えてから前記ステップＳ３１に戻る。
【００２７】
次に、上記実施形態の動作を説明する。
支援装置１を使用してプログラマブルコントローラ２に機械語オブジェクトをダウンロードするには、先ず、支援装置１のユーザインタフェース部１１でプログラムをＩＥＣ言語で記述したソースコードを作成する。このソースコードを作成した状態で、支援装置１で、表示装置３に表示された処理メニューからコンパイル開始メニュー３１を選択する。このコンパイル開始メニュー３１の選択によって、コンパイラ１２でソースコードを最適化コンパイルして最適化機械語オブジェクト１３を生成し、これを記憶装置５の所定記憶領域に格納する。この最適化コンパイルは、ソースコードの実行順序の変更、レジスタの有効活用等を行なうことにより、コードサイズを縮小する。ここで、最適化機械語オブジェクト１３は、ＰＯＵ（Ｐｒｏｇｒａｍ  Ｏｒｇａｎｉｚａｔｉｏｎ  Ｕｎｉｔ）毎に生成される。このＰＯＵとは、プログラム構成単位であり、プログラマブルコントローラ２の言語要素である。なお、ＰＯＵの種類には、プログラム、ファンクションブロック等がある。
【００２８】
そして、支援装置１は最適化コンパイルを行なう際に、生成された最適化機械語オブジェクト１３が何れのソースコードを変換したものであるかを対応付けるように、ソースコード・識別番号対応表に、ソースコードと機械語オブジェクトとを識別情報によって関連付ける情報を記録する。
そして、支援装置１は全ての最適化機械語オブジェクト１３の生成が完了すると、データ通信部１４を介してプログラマブルコントローラ２に送信して、プログラマブルコントローラ２にダウンロードする。
【００２９】
このとき、送信される各最適化機械語オブジェクト１３は、図６に示すように、実際のＰＯＵ単位の最適化機械語オブジェクトに対して識別番号４１及び最適化機械語オブジェクトであるかデバッグ可能な機械語オブジェクトであるかを表す判別情報４２を付加してプログラマブルコントローラ２にダウンロードされる。
プログラマブルコントローラ２では、支援装置１から図６の識別番号４１及び判別情報４２を付加した最適化機械語オブジェクト１３を受信すると、この最適化機械語オプジェクトをフラッシュメモリＭＦに格納し、これを最適化機械語オブジェクト２２としてプログラムメモリＭＰの第一の記憶領域に展開する。この最適化機械語オブジェクト２２の先頭アドレスは、図７に示すように、識別番号順にアドレステーブル２４に展開されて、このアドレステーブル２４に最適化用アドレスが設定される。
このため、このアドレステーブル２４の最適化用アドレスを参照することにより、最適化機械語オブジェクト２２が実行される。
【００３０】
このように、プログラマブルコントローラ２に最適化機械語オブジェクト１３をダウンロードする際には、支援装置１のコンパイラ１２で、ソースコードを最適化コンパイルして最適化機械語オブジェクト１３を生成するとともに、生成した最適化機械語オブジェクトとソースコードとを識別番号によって関連付けるソースコード・識別番号対応表を作成する。そして、生成した最適化機械語オブジェクト１３をプログラマブルコントローラ２にダウンロードする。支援装置１のコンパイラ１２で別途デバッグ可能な機械語オブジェクト１５を生成する必要がないので、最適化機械語オブジェクト１３のプログラマブルコントローラ２へのダウンロードを短時間で容易に行なうことができる。
また、プログラマブルコントローラ２側では、ダウンロードされた最適化機械語オブジェクト２２を実行することにより、アプリケーションを高速実行することができる。
【００３１】
一方、デバッグを行うには、支援装置１の表示装置３におけるメニュー画面で、デバッグ開始メニュー３２を選択することにより、デバッグ処理を開始する。このとき、ユーザは先ず、所望のソースコードを開き、開いたソースコードにブレークポイントを設定する。このとき、支援装置１は開かれているソースコードをもとにソースコード・識別番号対応表を参照してソースコードに対応する識別番号を獲得する。さらに、表示画面上で指定されたソースコードの行又は位置を認識する。そして、支援装置１はブレークポイントが設定されたＰＯＵ毎のソースコードをコンパイラ１２でコンパイルしてデバッグ可能な機械語オブジェクト１５に変換する。この際に、識別番号とブレークポイントを設定したソースコードの行を指定する図８に示すデバッグ情報を作成する。このようにして、ユーザは順次ブレークポイントを設定する所望のソースコードを開いてブレークポイントを設定し、支援装置１はブレークポイントが設定されたソースコードをＰＯＵ毎にコンパイラ１２でコンパイルしてデバッグ可能な機械語オブジェクト１５に変換するとともにデバッグ情報を作成する。
【００３２】
そして、デバッグ可能な機械語オブジェクト１５の変換及びデバッグ情報の作成が完了すると、支援装置１は、デバッグ可能な機械語オブジェクト１５、デバッグ情報及びソースコード・機械語オブジェクト対応表をプログラマブルコントローラ２にダウンロードする。
プログラマブルコントローラ２では、デバッグ可能な機械語オブジェクト１５、デバッグ情報及びソースコード・機械語オブジェクト対応表を受信すると、デバッグ可能な機械語オブジェクト１５、デバッグ情報及びソースコード・機械語オブジェと対応表をフラッシュメモリＭＦに記憶し、デバッグ可能な機械語オブジェクト１５をデバッグ可能なオブジェクト２３としてプログラムメモリＭＰの第二の記憶領域に展開し、さらにアドレステーブル２４の該当する識別番号の処理コードのアドレスを最適化機械語オブジェクト２２からデバッグ可能な機械語オブジェクト２３へ変更するデバッグ用アドレスを設定し、アドレステーブル２４を最適化用アドレスからデバッグ用アドレスに変更する。
【００３３】
さらに、デバッグ情報に基づいて、ブレークポイントをかける位置をソースコード機械語オブジェクト対応表から取り出し、デバッグ可能な機械語オブジェクト２３のその位置へブレークポイント処理コードを注入する。
このコード注入処理が終了すると、注入処理終了通知を支援装置１に送信し、ブレークポイント処理コードを実行した時点で、デバッグ可能な機械語オブジェクトの実行を停止して待機状態になる。そして、プログラムをブレークしたこと、およびプログラマブルコントローラ２の内部情報などを支援装置１に送信する。
【００３４】
支援装置１では注入処理終了通知を受信することにより、デバッグ処理を開始し、デバッグ処理を終了すると、デバッグ終了通知をプログラマブルコントローラ２に送信し、プログラマブルコントローラ２では、デバッグ終了通知を受信することにより、アドレステーブルをデバッグ用アドレスから最適化用アドレスに切換え、最適化機械語オブジェクト２２の実行を再開する。
【００３５】
また、デバッグ開始時にプログラマブルコントローラ２にデバック可能な機械語オブジェクト２３が格納されている場合には、支援装置１ではステップＳ１１からステップＳ１７に移行して（図３参照）、デバッグ処理を実行する。
このように、上記実施形態によると、支援装置１で機械語オブジェクトをコンパイルしてプログラマブルコントローラ２にダウンロードする際には、ユーザインタフェース部１１でＩＥＣ言語によりプログラムを記述してソースコードを作成する。このソースコードの作成が終了すると、コンパイラ１２でコンパイルを開始するが、この状態では、最適化コンパイルのみを行なって、最適化機械語オブジェクトをＰＯＵ毎に生成し、これと同時にソースコード・識別番号対応表を作成する。そして、生成した最適化機械語オブジェクトに図７に示すように識別番号４１及び判定情報４２を付加してデータ送信部１４からプログラマブルコントローラ２に送信してダウンロードを行なう。
【００３６】
このとき、コンパイラ１２で最適化コンパイルして最適化機械語オブジェクト１３のみを生成し、生成した最適化機械語オブジェクト１３をプログラマブルコントローラ２にダウンロードするので、ダウンロードに要する時間を必要最小限とすることができるとともに、プログラマブルコントローラ２でダウンロードされた最適化機械語オブジェクト２３を実行するので、アプリケーションの高速実行を行なうことができる。
【００３７】
一方、デバッグ時には、支援装置１でＰＯＵ毎に、デバッグ対象となる機械語オブジェクトのみをコンパイルしてデバッグ可能な機械語オブジェクトを生成し、これをデバッグ情報及びソースコード機械語オブジェクト対応表とともにプログラマブルコントローラ２にダウンロードするので、コンパイル及びダウンロード時間を必要最小限とすることができ、ユーザが効率良くソフトウェアの開発を実施できる。
【００３８】
なお、上記実施形態においては、ソースコードから最適化機械語オブジェクト１３への変換とソースコードからデバッグ可能な機械語オブジェクトへの変換とを個別に行なう場合について説明したが、ソースコードからの最適化機械語オブジェクトへの変換及びデバッグ可能な機械語オブジェクト１５への変換を連続して行い、生成した最適化機械語オブジェクト１３及びデバッグ可能な機械語オブジェクト１５をプログラマブルコントローラ２に連続してダウンロードするようにしてもよい。
【符号の説明】
【００３９】
１…支援装置、２…プログラマブルコントローラ、３…表示装置、４…入力装置、１１…ユーザインタフェース部、１２…コンパイラ、１３…最適化機械語オブジェクト、１４…データ通信部、１５…デバッグ可能な機械語オブジェクト、２１…データ通信部、２２…最適化機械語オブジェクト、２３…デバッグ可能な機械語オブジェクト、２４…アドレステーブル
【図１】
0005589670.tif 000002
【図２】
0005589670.tif 000003
【図３】
0005589670.tif 000004
【図４】
0005589670.tif 000005
【図５】
0005589670.tif 000006
【図６】
0005589670.tif 000007
【図７】
0005589670.tif 000008
【図８】
0005589670.tif 000009
【図９】
0005589670.tif 000010