(57)【要約】【課題】データフロー図から演算装置固有の拡張機能を利用するプログラムの実装コードを生成する。【解決手段】ライブラリ記憶手段１１は、演算装置固有の拡張機能を利用しない実装モジュールから成る演算装置独立ライブラリ１１ａと、演算装置固有の拡張機能を利用する実装モジュールから成る演算装置依存ライブラリ１１ｂとを記憶する。データフロー図記憶手段１２は、機能ブロック間のデータ受け渡し関係を記述したデータフロー図２を記憶する。設定情報取得手段１３は、データフロー図２の機能ブロックのうち演算装置固有の拡張機能を利用する機能ブロックを指定した設定情報４を取得する。実装コード生成手段１４は、設定情報４で指定された機能ブロックに対しては演算装置依存ライブラリ１１ｂを使用し、設定情報で指定されなかった機能ブロックに対しては演算装置独立ライブラリ１１ａを使用することでデータフロー図２に応じた実装コード５を生成する。【選択図】図１
2008003817.tif 000002
【特許請求の範囲】
【請求項１】
演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援装置において、
前記拡張機能を利用しない複数の実装モジュールから成る演算装置独立ライブラリと、前記拡張機能を利用する複数の前記実装モジュールから成る演算装置依存ライブラリとを記憶するライブラリ記憶手段と、
プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータ受け渡し関係とを記述したデータフロー図を記憶するデータフロー図記憶手段と、
ユーザによる操作入力を受け付け、前記データフロー図記憶手段に記憶された前記データフロー図の前記機能ブロックのうち、前記拡張機能を利用する前記機能ブロックを指定する情報を有する設定情報を取得する設定情報取得手段と、
前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段と前記ライブラリ記憶手段とを参照して、前記設定情報で指定された前記機能ブロックに対しては前記演算装置依存ライブラリ内の対応する前記実装モジュールをそれぞれ適用し、前記設定情報で指定されなかった前記機能ブロックに対しては前記演算装置独立ライブラリ内の対応する前記実装モジュールをそれぞれ適用して、前記データフロー図に応じた実装コードを生成する実装コード生成手段と、
を有することを特徴とするプログラム開発支援装置。
【請求項２】
前記データフロー図の前記機能ブロックには、前記機能ブロックによるデータ処理の内容を識別するブロック名がそれぞれ付加されており、
前記ライブラリ記憶手段に記憶された前記実装モジュールには、前記実装モジュールによるデータ処理の内容を識別するモジュール名がそれぞれ付加されており、
前記実装コード生成手段は、前記ブロック名と一致する前記モジュール名の前記実装モジュールを、それぞれの前記機能ブロックに適用すべき前記実装モジュールと決定する、
ことを特徴とする請求項１記載のプログラム開発支援装置。
【請求項３】
前記ライブラリ記憶手段は、前記拡張機能をもつ演算装置の種類ごとに、前記演算装置依存ライブラリを記憶し、
前記設定情報は、指定したそれぞれの前記機能ブロックと対応付けて、前記機能ブロックが利用する前記拡張機能をもつ演算装置の種類を特定する情報をさらに有し、
前記実装コード生成手段は、前記設定情報で指定された前記機能ブロックに対しては、前記設定情報で特定される演算装置の種類に対応する前記演算装置依存ライブラリ内の前記実装モジュールをそれぞれ適用する、
ことを特徴とする請求項１記載のプログラム開発支援装置。
【請求項４】
前記設定情報取得手段が前記設定情報を取得すると、前記設定情報で特定される演算装置の種類が、指定された全ての前記機能ブロックについて同一か否か判定し、同一でない場合にはエラー出力を行う設定情報検査手段をさらに有し、
前記実装コード生成手段は、前記設定情報検査手段が前記エラー出力を行ったときは前記実装コードの生成を行わない、
ことを特徴とする請求項３記載のプログラム開発支援装置。
【請求項５】
前記データフロー図記憶手段は、複数の前記データフロー図を記憶すると共に、プログラム実行単位ごとに前記データフロー図を分類するプログラム構造情報を記憶し、
前記設定情報は、前記データフロー図記憶手段に記憶された前記プログラム構造情報で示される前記プログラム実行単位のうち、前記拡張機能を利用する前記プログラム実行単位を指定する情報と、指定した前記プログラム実行単位が利用する前記拡張機能をもつ演算装置の種類を特定する情報とをさらに有し、
前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段を参照して、前記プログラム実行単位について前記設定情報で特定される演算装置の種類が、前記プログラム実行単位に属する前記データフロー図の前記機能ブロックについて前記設定情報で特定される演算装置の種類と同一か否か判定し、同一でない場合にはエラー出力を行う設定情報検査手段をさらに有し、
前記実装コード生成手段は、前記設定情報検査手段が前記エラー出力を行ったときは前記実装コードの生成を行わない、
ことを特徴とする請求項３記載のプログラム開発支援装置。
【請求項６】
演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援方法において、
設定情報取得手段が、ユーザによる操作入力を受け付け、データフロー図記憶手段に記憶された、プログラムによるデータ処理を表す機能ブロックと前記機能ブロック間のデータ受け渡し関係とを記述したデータフロー図の前記機能ブロックのうち、前記拡張機能を利用する前記機能ブロックを指定する情報を有する設定情報を取得し、
実装コード生成手段が、前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段と、前記拡張機能を利用しない複数の実装モジュールから成る演算装置独立ライブラリと前記拡張機能を利用する複数の前記実装モジュールから成る演算装置依存ライブラリとを記憶するライブラリ記憶手段とを参照して、
前記設定情報で指定された前記機能ブロックに対しては前記演算装置依存ライブラリ内の対応する前記実装モジュールをそれぞれ適用し、前記設定情報で指定されなかった前記機能ブロックに対しては前記演算装置独立ライブラリ内の対応する前記実装モジュールをそれぞれ適用して、前記データフロー図に応じた実装コードを生成する、
ことを特徴とするプログラム開発支援方法。
【請求項７】
演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援プログラムにおいて、
コンピュータを、
前記拡張機能を利用しない複数の実装モジュールから成る演算装置独立ライブラリと、前記拡張機能を利用する複数の前記実装モジュールから成る演算装置依存ライブラリとを記憶するライブラリ記憶手段、
プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータ受け渡し関係とを記述したデータフロー図を記憶するデータフロー図記憶手段、
ユーザによる操作入力を受け付け、前記データフロー図記憶手段に記憶された前記データフロー図の前記機能ブロックのうち、前記拡張機能を利用する前記機能ブロックを指定する情報を有する設定情報を取得する設定情報取得手段、
前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段と前記ライブラリ記憶手段とを参照して、前記設定情報で指定された前記機能ブロックに対しては前記演算装置依存ライブラリ内の対応する前記実装モジュールをそれぞれ適用し、前記設定情報で指定されなかった前記機能ブロックに対しては前記演算装置独立ライブラリ内の対応する前記実装モジュールをそれぞれ適用して、前記データフロー図に応じた実装コードを生成する実装コード生成手段、
として機能させることを特徴とするプログラム開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラムに関し、特に演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラムに関する。
【背景技術】
【０００２】
現在、自動車や家電機器、産業用機械装置など、さまざまな機器に電子制御のための演算装置が組み込まれている。このような組み込み向けの演算装置は、一般的なコンピュータ向けの演算装置と比べ、処理のリアルタイム性がより強く要求される。例えば、自動車の制御に用いられる演算装置は、走行の安全を確保するために、入力信号を受け取ってから応答するまでの時間をできる限り短くする必要がある。そのため、組み込み向けの演算装置には、処理効率を高めるための拡張機能が用意されている。このような拡張機能は、開発者が明示的に選択することで利用できる機能であり、それぞれの演算装置の種類ごとに異なる演算装置固有の機能である。
【０００３】
ここで、組み込み向け演算装置で実行するプログラムを開発するために、従来は、アセンブラなどの低級言語が用いられてきた。Ｃ言語などの高級言語で記述したソースコードを機械可読なオブジェクトコードに変換するコンパイラでは、演算装置固有の拡張機能を利用した処理を扱えなかったためである。このように、組み込み向けプログラムの開発では、高級言語と比べて記述量が多く可読性が低くなりやすい低級言語を使用しなければならず、一般的なコンピュータ向けプログラムの開発よりも多くの開発時間と労力が必要であった。また、演算装置固有の拡張機能を利用する処理のみ低級言語を用いて記述し、その他の処理は高級言語を用いて記述することも可能であるが、この場合には低級言語の記述と高級言語の記述とが混在し、ソースコードの可読性や保守の容易性が低下するという問題もあった。
【０００４】
そこで、近年は、既存の高級言語を拡張して、演算装置固有の拡張機能を利用する処理も高級言語で記述できるようにすることが行われている。例えば、組み込み向け演算装置の製造業者は、独自に拡張したＣ言語を定義し、拡張したＣ言語で記述したソースコードをコンパイルできるコンパイラを提供している。このようなコンパイラを利用することで、組み込み向けプログラムを高級言語のみを用いて開発することができ、プログラムの開発効率を大きく向上させることができる。また、拡張した高級言語で記述したソースコードを、従来のコンパイラでコンパイル可能なソースコード（例えば、低級言語の記述と高級言語の記述とが混在したソースコード）に変換する技術も知られている（例えば、特許文献１参照）。このような変換装置を用いても、上記と同様の効果を得られる。
【特許文献１】特開平５−１２７８８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、現在、一般的なコンピュータ向けプログラムの開発では、プログラムの自動生成技術が注目を集めている。プログラムの自動生成とは、データフロー図などの設計図から、ソースコードやオブジェクトコードなどの実装コードを生成することである。プログラム自動生成技術を用いることで、開発者が設計図とソースコードの２つを別個に記述する必要がなくなり、プログラムの開発効率をさらに向上させることができる。また、開発者はソースコードよりも理解容易な設計図を管理すればよいため、保守の容易性も向上する。
【０００６】
しかし、従来のプログラム自動生成技術を組み込み向けプログラムの開発に直接適用することができないという問題がある。すなわち、特許文献１記載の技術によれば拡張した高級言語で記述したソースコードをオブジェクトコードに変換可能であるが、従来のプログラム自動生成技術では、このような拡張した高級言語で記述したソースコードを生成できない。一般に、データフロー図などの設計図はハードウェアに関する情報を含まないため、生成されるソースコードは演算装置固有の拡張機能を利用しないものとなるからである。したがって、演算装置固有の拡張機能を利用する場合、開発者は生成したソースコードをその後に修正する必要があり、プログラム自動生成技術がもつ利点を十分に生かすことができない。
【０００７】
本発明はこのような点に鑑みてなされたものであり、設計図として代表的なデータフロー図から、演算装置固有の機能を利用するプログラムの実装コードを生成するプログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明では上記問題を解決するために、演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援装置において、前記拡張機能を利用しない複数の実装モジュールから成る演算装置独立ライブラリと、前記拡張機能を利用する複数の前記実装モジュールから成る演算装置依存ライブラリとを記憶するライブラリ記憶手段と、プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータ受け渡し関係とを記述したデータフロー図を記憶するデータフロー図記憶手段と、ユーザによる操作入力を受け付け、前記データフロー図記憶手段に記憶された前記データフロー図の前記機能ブロックのうち、前記拡張機能を利用する前記機能ブロックを指定する情報を有する設定情報を取得する設定情報取得手段と、前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段と前記ライブラリ記憶手段とを参照して、前記設定情報で指定された前記機能ブロックに対しては前記演算装置依存ライブラリ内の対応する前記実装モジュールをそれぞれ適用し、前記設定情報で指定されなかった前記機能ブロックに対しては前記演算装置独立ライブラリ内の対応する前記実装モジュールをそれぞれ適用して、前記データフロー図に応じた実装コードを生成する実装コード生成手段と、を有することを特徴とするプログラム開発支援装置が提供される。
【０００９】
このようなプログラム開発支援装置によれば、設定情報取得手段により、データフロー図の機能ブロックのうち演算装置固有の拡張機能を利用する機能ブロックを指定した設定情報が取得される。そして、実装コード生成手段により、設定情報で指定された機能ブロックに対しては演算装置依存ライブラリ内の対応する実装モジュールが適用され、設定情報で指定されなかった機能ブロックに対しては演算装置独立ライブラリ内の対応する実装モジュールが適用されて、データフロー図に応じた実装コードが生成される。
【００１０】
また、上記問題を解決するために、演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援方法において、設定情報取得手段が、ユーザによる操作入力を受け付け、データフロー図記憶手段に記憶された、プログラムによるデータ処理を表す機能ブロックと前記機能ブロック間のデータ受け渡し関係とを記述したデータフロー図の前記機能ブロックのうち、前記拡張機能を利用する前記機能ブロックを指定する情報を有する設定情報を取得し、実装コード生成手段が、前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段と、前記拡張機能を利用しない複数の実装モジュールから成る演算装置独立ライブラリと前記拡張機能を利用する複数の前記実装モジュールから成る演算装置依存ライブラリとを記憶するライブラリ記憶手段とを参照して、前記設定情報で指定された前記機能ブロックに対しては前記演算装置依存ライブラリ内の対応する前記実装モジュールをそれぞれ適用し、前記設定情報で指定されなかった前記機能ブロックに対しては前記演算装置独立ライブラリ内の対応する前記実装モジュールをそれぞれ適用して、前記データフロー図に応じた実装コードを生成する、ことを特徴とするプログラム開発支援方法が提供される。
【００１１】
このようなプログラム開発支援方法によれば、データフロー図の機能ブロックのうち演算装置固有の拡張機能を利用する機能ブロックを指定した設定情報が取得される。そして、設定情報で指定された機能ブロックに対しては演算装置依存ライブラリ内の対応する実装モジュールが適用され、設定情報で指定されなかった機能ブロックに対しては演算装置独立ライブラリ内の対応する実装モジュールが適用されて、データフロー図に応じた実装コードが生成される。
【００１２】
また、上記問題を解決するために、演算装置固有の拡張機能を利用するプログラムの開発を支援するプログラム開発支援プログラムにおいて、コンピュータを、前記拡張機能を利用しない複数の実装モジュールから成る演算装置独立ライブラリと、前記拡張機能を利用する複数の前記実装モジュールから成る演算装置依存ライブラリとを記憶するライブラリ記憶手段、プログラムによるデータ処理を表す機能ブロックと、前記機能ブロック間のデータ受け渡し関係とを記述したデータフロー図を記憶するデータフロー図記憶手段、ユーザによる操作入力を受け付け、前記データフロー図記憶手段に記憶された前記データフロー図の前記機能ブロックのうち、前記拡張機能を利用する前記機能ブロックを指定する情報を有する設定情報を取得する設定情報取得手段、前記設定情報取得手段が前記設定情報を取得すると、前記データフロー図記憶手段と前記ライブラリ記憶手段とを参照して、前記設定情報で指定された前記機能ブロックに対しては前記演算装置依存ライブラリ内の対応する前記実装モジュールをそれぞれ適用し、前記設定情報で指定されなかった前記機能ブロックに対しては前記演算装置独立ライブラリ内の対応する前記実装モジュールをそれぞれ適用して、前記データフロー図に応じた実装コードを生成する実装コード生成手段、として機能させることを特徴とするプログラム開発支援プログラムが提供される。
【００１３】
このようなプログラム開発支援プログラムを実行するコンピュータによれば、設定情報取得手段により、データフロー図の機能ブロックのうち演算装置固有の拡張機能を利用する機能ブロックを指定した設定情報が取得される。そして、実装コード生成手段により、設定情報で指定された機能ブロックに対しては演算装置依存ライブラリ内の対応する実装モジュールが適用され、設定情報で指定されなかった機能ブロックに対しては演算装置独立ライブラリ内の対応する実装モジュールが適用されて、データフロー図に応じた実装コードが生成される。
【発明の効果】
【００１４】
本発明では、設定情報で指定された機能ブロックに対しては演算装置依存ライブラリの実装モジュールを適用し、指定されなかった機能ブロックに対しては演算装置独立ライブラリの実装モジュールを適用して、データフロー図に応じた実装コードを生成することとした。これにより、開発者は、データフロー図から演算装置固有の拡張機能を利用した処理効率の高いプログラムの実装コードを直接かつ容易に生成することができる。したがって、演算装置固有の拡張機能を利用するプログラムの開発効率が大きく向上する。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面を参照して詳細に説明する。まず、本発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。
図１は、実施の形態に適用される発明の概念図である。図１に示されるプログラム開発支援装置は、データフロー図とデータフロー図に対する設定情報とから、演算装置固有の拡張機能を利用するプログラムの実装コードを生成するものである。プログラム開発支援装置１０は、ライブラリ記憶手段１１、データフロー図記憶手段１２、設定情報取得手段１３および実装コード生成手段１４を有する。
【００１６】
ライブラリ記憶手段１１は、演算装置独立ライブラリ１１ａおよび演算装置依存ライブラリ１１ｂを記憶する。演算装置独立ライブラリ１１ａおよび演算装置依存ライブラリ１１ｂは、それぞれ、複数の実装モジュールから構成される。実装モジュールは、一定のまとまったデータ処理を実現する実装コードの断片である。実装モジュールは、例えば、ソースコードやソースコードをコンパイルした機械可読なオブジェクトコードなどである。
【００１７】
演算装置独立ライブラリ１１ａは、演算装置の標準機能のみを利用した実装モジュールから構成される。例えば、Ｃ言語の標準化された記法のみを用いて記述したソースコードなどである。
【００１８】
演算装置依存ライブラリ１１ｂは、組み込み用演算装置などが有する演算装置固有の拡張機能を利用した実装モジュールから構成される。すなわち、標準機能に代えて拡張機能を利用して処理を実行することを明示的に指定したコードを含む実装モジュールから構成される。例えば、拡張したＣ言語の記法を用いて記述したソースコードであって、一般的なコンパイラではコンパイル不可能なソースコードなどである。演算装置依存ライブラリ１１ｂ内の実装モジュールは、演算装置独立ライブラリ１１ａ内の同一種類の処理を実行する実装モジュールよりも、実行時の処理効率が高い。
【００１９】
データフロー図記憶手段１２は、データフロー図２を記憶する。データフロー図２は、機能ブロック２ａ，２ｂ，２ｃと、機能ブロック２ａ，２ｂ，２ｃ間のデータ受け渡し関係とを記述する。機能ブロック２ａ，２ｂ，２ｃは、プログラムによる一定のまとまったデータ処理を表す。
【００２０】
設定情報取得手段１３は、ユーザの操作入力を受け付け、入力された設定情報４を取得する。設定情報４は、データフロー図記憶手段１２に記憶されたデータフロー図２の機能ブロック２ａ，２ｂ，２ｃのうち、演算装置固有の拡張機能を利用する機能ブロック２ａ，２ｂ，２ｃを指定する情報を有する。例えば、設定情報４は、機能ブロック２ｂが演算装置固有の拡張機能を利用する機能ブロックである旨の情報を有する。
【００２１】
実装コード生成手段１４は、設定情報取得手段１３が設定情報４を取得すると、データフロー図記憶手段１２からデータフロー図２を取得する。そして、実装コード生成手段１４は、設定情報４で指定された機能ブロック（例えば、機能ブロック２ｂ）に対応する実装モジュールを、演算装置依存ライブラリ１１ｂから取得する。また、実装コード生成手段１４は、設定情報４で指定されなかった機能ブロック（例えば、機能ブロック２ａ，２ｃ）に対応する実装モジュールを、演算装置独立ライブラリ１１ａから取得する。その後、実装コード生成手段１４は、データフロー図２の記述に従い取得した実装モジュールを組み合わせて実装コード５を生成する。
【００２２】
このようなプログラム開発支援装置１０によれば、設定情報取得手段１３により、データフロー図２の機能ブロック２ａ，２ｂ，２ｃのうち演算装置固有の拡張機能を利用する機能ブロックを指定する情報を有する設定情報４が取得される。そして、実装コード生成手段１４により、設定情報４で指定された機能ブロックに対しては演算装置依存ライブラリ１１ｂ内の対応する実装モジュールが適用され、設定情報４で指定されなかった機能ブロックに対しては演算装置独立ライブラリ１１ａ内の対応する実装モジュールが適用されて、実装コード５が生成される。
【００２３】
これにより、開発者は、データフロー図から演算装置固有の拡張機能を利用した処理効率の高いプログラムの実装コードを直接かつ容易に生成することができる。したがって、演算装置固有の拡張機能を利用するプログラムの開発効率が大きく向上する。特に、組み込み向けプログラムの開発効率が大きく向上する。また、データフロー図を用いて効率的にプログラムの保守・管理ができるなど、従来のプログラム自動生成技術の利点を生かすこともできる。
【００２４】
なお、本発明は、設定情報取得手段１３が設定情報４を取得した後、実装コード生成手段１４に設定情報４を直接渡す場合と、データフロー図記憶手段１２にデータフロー図２と対応付けて設定情報４を一旦記憶して使用する場合との両方を含んでいる。以下に説明する実施の形態では、設定情報４をデータフロー図２と対応付けて一旦記憶する場合について説明する。
【００２５】
以下、本発明の実施の形態を、図面を参照して詳細に説明する。本実施の形態は、１つのプログラム開発支援装置１００で構成される。開発者は、プログラム開発支援装置１００を用いてデータフロー図などを記述し、記述したデータフロー図などからプログラムのソースコードを生成することができる。
【００２６】
図２は、プログラム開発支援装置のハードウェア構成を示す図である。プログラム開発支援装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１０３、グラフィック処理装置１０４および入力インタフェース１０５が接続されている。
【００２７】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳプログラムやアプリケーションプログラムが格納される。
【００２８】
グラフィック処理装置１０４には、モニタ２０が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ２０の画面に表示させる。入力インタフェース１０５には、キーボード３１とマウス３２とが接続されている。入力インタフェース１０５は、キーボード３１やマウス３２から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００２９】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
次に、プログラム開発支援装置１００のモジュール構成について説明する。
【００３０】
図３は、プログラム開発支援装置の機能を示すブロック図である。プログラム開発支援装置１００は、ライブラリ記憶部１１０、設計モデル記憶部１２０、ソースファイル記憶部１３０、設計モデル作成部１４０、設定情報取得部１５０、設計モデル検査部１６０およびソースコード生成部１７０を有する。設計モデル作成部１４０、設定情報取得部１５０、設計モデル検査部１６０およびソースコード生成部１７０は、キーボード３１およびマウス３２を通じて開発者からの入力を受け付けることができる。また、設計モデル作成部１４０、設定情報取得部１５０、設計モデル検査部１６０およびソースコード生成部１７０は、モニタ２０の画面に処理結果を表示することができる。
【００３１】
ライブラリ記憶部１１０は、ＣＰＵ独立ライブラリ１１０ａ、ＣＰＵ−Ｘ依存ライブラリ１１０ｂおよびＣＰＵ−Ｙ依存ライブラリ１１０ｃを有する。ＣＰＵ独立ライブラリ１１０ａ、ＣＰＵ−Ｘ依存ライブラリ１１０ｂおよびＣＰＵ−Ｙ依存ライブラリ１１０ｃは、それぞれ、複数の実装モジュールから構成される。実装モジュールは、プログラムによる一定のまとまった処理を記述したソースコードの断片であり、１つ以上の関数で構成される。プログラムの実行時には、この関数が呼び出されることで、所定のデータ処理を実行する。
【００３２】
ＣＰＵ独立ライブラリ１１０ａ、ＣＰＵ−Ｘ依存ライブラリ１１０ｂおよびＣＰＵ−Ｙ依存ライブラリ１１０ｃ内の実装モジュールには、それぞれモジュール名が割り振られている。モジュール名は、その実装モジュールが実現するデータ処理の内容を識別する識別情報である。例えば、“絶対値”や“リミッタ”などのモジュール名が実装モジュールに割り振られる。
【００３３】
ＣＰＵ独立ライブラリ１１０ａは、演算装置固有の拡張機能を利用しない実装モジュールから構成される。例えば、標準化されたＣ言語の記法のみを用いて記述したソースコードなどである。一方、ＣＰＵ−Ｘ依存ライブラリ１１０ｂは、“ＣＰＵ−Ｘ”という種類の演算装置に固有の拡張機能を利用した実装モジュールから構成される。例えば、“ＣＰＵ−Ｘ”向けに拡張されたＣ言語の記法を用いて記述したソースコードなどである。同様に、ＣＰＵ−Ｙ依存ライブラリ１１０ｃは、“ＣＰＵ−Ｙ”という種類の演算装置に固有の拡張機能を利用した実装モジュールから構成される。
【００３４】
ＣＰＵ独立ライブラリ１１０ａは、プログラム開発支援装置１００が開発対象とするプログラムにおいて必要となる全てのデータ処理に対応する実装モジュールを有している。一方、ＣＰＵ−Ｘ依存ライブラリ１１０ｂおよびＣＰＵ−Ｙ依存ライブラリ１１０ｃは、ＣＰＵ独立ライブラリ１１０ａ内の実装モジュールの一部に対応する実装モジュールを有している。すなわち、演算装置固有の拡張機能を利用することで処理効率を向上させることができるデータ処理についての実装モジュールのみ有している。したがって、“ＣＰＵ−Ｘ”や“ＣＰＵ−Ｙ”向けのプログラムを開発する場合でも、演算装置固有の拡張機能を利用しないデータ処理については、ＣＰＵ独立ライブラリ１１０ａ内の実装モジュールを使用すればよい。
【００３５】
例えば、ＣＰＵ独立ライブラリ１１０ａは実装モジュール“絶対値”と実装モジュール“リミッタ”とを有し、ＣＰＵ−Ｘ依存ライブラリ１１０ｂは実装モジュール“リミッタ”を有し、ＣＰＵ−Ｙ依存ライブラリ１１０ｃは実装モジュール“絶対値”を有する。
【００３６】
なお、“ＣＰＵ−Ｘ”および“ＣＰＵ−Ｙ”以外の種類の演算装置を扱えるようにプログラム開発支援装置１００を拡張する場合、ライブラリ記憶部１１０にライブラリを追加すればよい。例えば、ライブラリ記憶部１１０に、“ＣＰＵ−Ｚ依存ライブラリ”を追加すればよい。
【００３７】
設計モデル記憶部１２０は、プログラム構造図およびデータフロー図を記述したファイルをそれぞれ記憶する。プログラム構造図は、プログラムの構成要素を階層的に記述した木構造グラフである。例えば、プログラム実行単位、ソースファイル、メイン関数、サブルーチンなどの構成要素を木構造で表現したものである。一方、データフロー図は、プログラムによるデータ処理を表す機能ブロックと、機能ブロック間のデータ受け渡し関係とを記述した有向グラフである。
【００３８】
ソースファイル記憶部１３０は、生成されたソースコードが記述されたソースファイルを格納する。
設計モデル作成部１４０は、開発者の操作入力に基づいてプログラム構造図とデータフロー図とを作成する。ここで、設計モデル作成部１４０は、開発者によるプログラム構造図およびデータフロー図の作図を視覚的に支援する。例えば、モニタ２０の画面に表示されたボタンを押すことで、描画領域に機能ブロックなどが配置されるようにする。そして、設計モデル作成部１４０は、作成したプログラム構造図とデータフロー図とを、それぞれファイルに保存し設計モデル記憶部１２０に格納する。
【００３９】
設定情報取得部１５０は、開発者の操作入力を受け付け、プログラム構造図およびデータフロー図に対する設定情報を取得する。設定情報は、演算装置固有の拡張機能を利用する機能ブロックまたはプログラム実行単位を指定する情報と、その拡張機能をもつ演算装置の種類を特定する情報とから構成される。ここで、設定情報取得部１５０は、設計モデル作成部１４０と同様、設定情報の入力を視覚的に支援する。そして、設定情報取得部１５０は、取得した設定情報をプログラム構造図およびデータフロー図と関連付けて、設計モデル記憶部１２０に格納する。
【００４０】
設計モデル検査部１６０は、開発者から検査開始の指示を受け取ると、設計モデル記憶部１２０に格納されたプログラム構造図とデータフロー図とに基づいて、設定情報の記述に矛盾がないか検査する。具体的には、それぞれのプログラム実行単位の中で、異なる種類の演算装置が指定されていないか調べる。そして、設計モデル検査部１６０は、検査結果をモニタ２０に表示する。また、設計モデル検査部１６０は、ソースコード生成部１７０から指示を受けた場合も、同様の検査を行う。
【００４１】
ソースコード生成部１７０は、開発者から生成開始の指示を受け取ると、まず設計モデル検査部１６０に設定情報の検査を指示する。ここで、設計モデル検査部１６０から検査失敗の結果を取得した場合、ソースコード生成部１７０はソースコードの生成を行わない。検査成功の結果を取得した場合、ソースコード生成部１７０は、設計モデル検査部１６０を介して設計モデル記憶部１２０に格納されたプログラム構造図とデータフロー図とを取得し、ソースコードを生成する。
【００４２】
具体的には、ソースコード生成部１７０は、データフロー図のそれぞれの機能ブロックに対応する実装モジュールをライブラリ記憶部１１０から取得し、取得した実装モジュールをデータフロー図に記述されたデータ受け渡し関係に従って組み合わせることで、ソースコードを生成する。そして、ソースコード生成部１７０は、生成したソースコードをファイルに保存してソースファイル記憶部１３０に格納する。また、ソースコード生成部１７０は、ソースコードの生成が完了した旨をモニタ２０に表示する。
【００４３】
開発者は、生成されたソースコードをコンパイルし他のオブジェクトコードとリンクすることで、実行可能な形式のロードモジュールを作成できる。ここで、生成されたソースコードをコンパイルするには、拡張された高級言語を理解可能なコンパイラを用いる必要がある。
【００４４】
なお、本実施の形態では、ライブラリ記憶部１１０が記憶する実装モジュールの形式をソースコードとしたが、予めコンパイルしたオブジェクトコードとしてもよい。この場合、プログラム開発支援装置１００は、ソースコードのファイルとオブジェクトコードのファイルの２種類のファイルを生成する。
【００４５】
図４は、ソースコードの生成に使用されるプログラム構造図の例である。プログラム構造図ファイル１２１は、設計モデル記憶部１２０に格納されている。プログラム構造図ファイル１２１には、プロジェクトノード１２１ａ、モジュールノード１２１ｂ，１２１ｇおよび関数ノード１２１ｃ，１２１ｄ，１２１ｅ，１２１ｆ，１２１ｈ，１２１ｉ，１２１ｊから成るプログラム構造図が記述されている。
【００４６】
プロジェクトノードは、プログラムの実行単位を表すノードである。プロジェクトノード以下のノードは、そのプログラムの構成要素を意味する。プロジェクトノードには、プログラムを識別するためのプロジェクト名が付加される。例えば、プロジェクトノード１２１ａのプロジェクト名は“インバータ制御”である。プロジェクトノードは、１つ以上のモジュールノードを子要素としてもつ。
【００４７】
モジュールノードは、１つのソースファイルに対応するノードである。モジュールノードには、ソースファイルを識別するためのモジュール名が付加される。例えば、モジュールノード１２１ｂのモジュール名は“入力制御”である。モジュールノードは、１つ以上の関数ノードを子要素としてもつ。
【００４８】
関数ノードは、１つの関数に対応するノードである。親要素であるモジュールノードに対応するソースファイル中にその関数が記述されることを意味する。関数ノードには、関数を識別するための関数名が付加される。例えば、関数ノード１２１ｃの関数名は“電流制御”である。関数ノードは、別の関数ノードを子要素としてもつ場合がある。これは、親要素に対応する関数が、処理の実行中に子要素に対応する関数を呼び出すことを意味する。
【００４９】
上記のプログラム構造図は、開発者の操作入力に基づいて設計モデル作成部１４０が作成する。このようなプログラム構造図を用いることで、開発者は、プログラムの全体構成を容易に理解することができる。例えば、図４に示したプログラム構造図は、プロジェクト“インバータ制御”がソースファイル“入力制御”とソースファイル“故障検出”とから構成され、ソースファイル“入力制御”には、関数“電流制御”と関数“直流電圧制御”とが記述されることを意味する。
【００５０】
図５は、ソースコードの生成に使用されるデータフロー図の例である。データフロー図ファイル１２２は、設計モデル記憶部１２０に格納されている。
データフロー図は、それぞれの関数で実行される処理の流れを記述したものである。１つのデータフロー図は、プログラム構造図における１つの関数ノードに対応する。図５に示したデータフロー図は、図４に示したプログラム構造図の関数ノード１２１ｃに対応するデータフロー図であり、“電流制御”の処理を記述したものである。
【００５１】
データフロー図ファイル１２２には、開始ブロック１２２ａ，１２２ｂ、通常ブロック１２２ｃ，１２２ｄ，１２２ｅ，１２２ｆ，１２２ｇ，１２２ｈ，１２２ｉおよび終端ブロック１２２ｊが記述されている。そして、矢印線によって、これら機能ブロック間のデータ入出力関係が記述されている。
【００５２】
開始ブロックは、処理の開始時に関数の外部から与えられる入力値を意味する。１つのデータフロー図につき、１つ以上の開始ブロックが記述される。図５に示したデータフロー図では、処理の開始時に２つの入力値（開始ブロック１２２ａおよび開始ブロック１２２ｂに対応する入力値）が与えられている。
【００５３】
通常ブロックは、一定のまとまったデータ処理を意味する。それぞれの通常ブロックでは、矢印線に沿って入力されるデータに基づいて、矢印線に沿って出力されるデータが計算される。例えば、通常ブロック１２２ｃでは、開始ブロック１２２ａで与えられる入力値に基づいて、通常ブロック１２２ｄに対して出力するデータが計算される。また、通常ブロック１２２ｇでは、通常ブロック１２２ｄから出力されるデータと通常ブロック１２２ｆから出力されるデータとに基づいて、通常ブロック１２２ｈに対して出力するデータが計算される。
【００５４】
それぞれの通常ブロックには、データ処理を識別するためのブロック名が付加される。例えば、通常ブロック１２２ｄのブロック名は“絶対値”である。なお、データフロー図が表す関数がさらに他の関数を呼び出す場合、呼び出される関数を１つの通常ブロックとして表現することができる。その場合、呼び出される関数に対応する通常ブロックには、呼び出される関数の関数名がブロック名として付加される。
【００５５】
終端ブロックは、処理の終了時に関数の外部へと出力される戻り値を意味する。１つのデータフロー図につき、１つ以上の終端ブロックが記述される。図５に示したデータフロー図では、通常ブロック１２２ｉが出力したデータが最終的な戻り値として出力されている。
【００５６】
上記のデータフロー図は、開発者の操作入力に基づいて設計モデル作成部１４０が作成する。このようなデータフロー図を用いることで、開発者は、関数の内部で実行される処理の流れを容易に理解することができる。
【００５７】
次に、設計モデル作成部１４０および設定情報取得部１５０がモニタ２０に表示する入力画面および設定画面について説明する。
図６は、プログラム構造図およびデータフロー図の入力画面例を示す第１の図である。入力画面２１は、描画領域２１ａ，２１ｂおよび選択ボタン２１ｃ，２１ｄ，２１ｅ，２１ｆ，２１ｇを有する。入力画面２１は、設計モデル作成部１４０によって表示される画面である。
【００５８】
描画領域２１ａは、プログラム構造図を記述するための描画領域である。プログラム開発を開始した時点では、１つのプロジェクトノードが描画領域２１ａに配置されている。ここで、開発者が選択ボタン２１ｃを押すと、新たなモジュールノードが描画領域２１ａに配置される。また、描画領域２１ａで１つのモジュールノードまたは関数ノードが選択されている状態で選択ボタン２１ｄを押すと、選択されているノードの子要素として新たな関数ノードが描画領域２１ａに配置される。このようにして、開発者はプログラム構造図を記述することができる。
【００５９】
描画領域２１ｂは、データフロー図を記述するための描画領域である。描画領域２１ａに配置された１つの関数ノードが選択されると、選択された関数ノードに対応するデータフロー図が描画領域２１ｂに表示される。ここで、開発者が選択ボタン２１ｅを押すと、新たな開始ブロックが描画領域２１ｂに配置される。同様に、開発者が選択ボタン２１ｆを押すと、新たな通常ブロックが描画領域２１ｂに配置される。開発者が選択ボタン２１ｇを押すと、新たな終端ブロックが描画領域２１ｂに配置される。このようにして、開発者はデータフロー図を記述することができる。
【００６０】
ここで、描画領域２１ａに配置されたプロジェクトノードが選択されると、プロジェクトノードについての設定画面が表示される。
図７は、プロジェクトノードに対する設定画面例を示す図である。設定画面２２は、入力領域２２ａ，２２ｂおよびボタン２２ｃ，２２ｄを有する。設定画面２２は、設定情報取得部１５０によって表示される画面である。
【００６１】
入力領域２２ａは、プロジェクト名を入力するための入力領域である。既にプロジェクト名を設定済みの場合には、設定されたプロジェクト名を編集することができる。
入力領域２２ｂは、演算装置の種類名を入力するための入力領域である。開発対象のプログラムが、ここで設定された種類の演算装置で実行される予定であることを意味する。なお、特定の種類の演算装置で実行する予定がない場合には、入力領域２２ｂを空欄にするか、“なし”と入力しておく。
【００６２】
ボタン２２ｃは、入力内容を確定するためのボタンである。ボタン２２ｃが押されると、設定情報取得部１５０は、入力領域２２ａ，２２ｂに入力された情報を設計モデル記憶部１２０に格納すると共に、モニタ２０に表示されているプログラム構造図にこれらの情報を反映させる。また、ボタン２２ｄは、入力領域２２ａ，２２ｂに入力された情報を破棄するためのボタンである。
【００６３】
プロジェクトノードと同様に、図６に示した入力画面２１の描画領域２１ｂに配置された通常ブロックが選択されると、通常ブロックについての設定画面が表示される。
図８は、機能ブロックに対する設定画面例を示す図である。設定画面２３は、入力領域２３ａ，２３ｂおよびボタン２３ｃ，２３ｄを有する。設定画面２３は、設定情報取得部１５０によって表示される画面である。
【００６４】
入力領域２３ａは、選択された通常ブロックのブロック名を入力するための入力領域である。既にブロック名を設定済みの場合には、設定されたブロック名を編集することができる。
【００６５】
入力領域２３ｂは、演算装置の種類名を入力するための入力領域である。選択された機能ブロックが、ここで設定された種類の演算装置の拡張機能を利用することを意味する。なお、演算装置固有の拡張機能を利用しない場合には、入力領域２３ｂを空欄にするか、“なし”と入力しておく。
【００６６】
ボタン２３ｃは、入力内容を確定するためのボタンである。ボタン２３ｃが押されると、設定情報取得部１５０は、入力領域２３ａ，２３ｂに入力された情報を設計モデル記憶部１２０に格納すると共に、モニタ２０に表示されているデータフロー図にこれらの情報を反映させる。また、ボタン２３ｄは、入力領域２３ａ，２３ｂに入力された情報を破棄するためのボタンである。
【００６７】
図９は、プログラム構造図およびデータフロー図の入力画面例を示す第２の図である。入力画面２４は、設定画面２２，２３により設定情報が入力された後に表示される画面であり、図６に示した入力画面２１のプログラム構造図とデータフロー図に設定情報が反映された状態の画面である。
【００６８】
プログラム構造図のプロジェクトノードには、プロジェクト名と共に、設定画面２２で入力された演算装置の種類名が付加される。例えば、プロジェクトノード２４ａは、“インバータ制御”というプログラムが“ＣＰＵ−Ｘ”という種類の演算装置で実行される予定であることを表している。このように、プログラム構造図と共に設定情報が表示されることで、開発者は、開発中のプログラムと演算装置との依存関係を直感的に理解することができる。
【００６９】
データフロー図の機能ブロックには、ブロック名と共に、設定画面２３で入力された演算装置の種類名が付加される。例えば、通常ブロック２４ｃは、“リミッタ”というデータ処理が“ＣＰＵ−Ｘ”という種類の演算装置の拡張機能を利用することを表している。一方、設定画面２３で演算装置の種類名が入力されなかった機能ブロックには、演算装置の種類名が表示されない。例えば、通常ブロック２４ｂは、“絶対値”というデータ処理が演算装置固有の拡張機能を利用しないことを表している。このように、データフロー図と共に設定情報が表示されることで、開発者は、一連のデータ処理の中で演算装置固有の拡張機能が利用される部分を的確かつ容易に把握することができる。
【００７０】
このようにして、開発者は、入力画面２１，２４および設定画面２２，２３を用いて、プログラム構造図とデータフロー図とを記述し、設定情報を入力することができる。なお、本実施の形態では入力画面２１，２４と設定画面２２，２３をそれぞれ別個の画面としたが、これらを１つの画面として構成してもよい。
【００７１】
また、本実施の形態では、データフロー図の機能ブロックに付加する演算装置の種類名は、設定画面２２，２３で入力した内容を用いることとしたが、ライブラリ記憶部１１０から取得した情報を用いてもよい。この場合、設定画面２２，２３では演算装置の種類を一意に識別する簡易的な識別情報を入力または選択するようにし、データフロー図の機能ブロックにはライブラリ記憶部１１０から取得した対応する正式名称を表示することも可能である。
【００７２】
次に、以上のような装置構成および入力データのもとで実行される処理の詳細を説明する。はじめに、プロジェクトノードおよび機能ブロックに対して設定された設定情報の検査処理について説明する。
【００７３】
図１０は、設定情報検査の処理手順を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
［ステップＳ１１］設計モデル検査部１６０は、検査処理の開始を指示する入力を受け取ると、設計モデル記憶部１２０に格納されたプログラム構造図、データフロー図および設定情報を取得する。
【００７４】
［ステップＳ１２］設計モデル検査部１６０は、ステップＳ１１で取得したプログラム構造図のプロジェクトノード対して、演算装置の種類名が設定されているか判断する。演算装置の種類名が設定されている場合には、処理がステップＳ１３へ進められる。演算装置の種類名が設定されていない場合には、処理がステップＳ１４へ進められる。
【００７５】
［ステップＳ１３］設計モデル検査部１６０は、プロジェクトノードに対して設定されている演算装置の種類名を、対象演算装置名に指定する。
［ステップＳ１４］設計モデル検査部１６０は、ステップＳ１１で取得したデータフロー図の通常ブロックのうち、未選択の通常ブロックを１つ選択する。
【００７６】
［ステップＳ１５］設計モデル検査部１６０は、ステップＳ１４で選択した通常ブロックに対して演算装置の種類名が設定されているか判断する。演算装置の種類名が設定されている場合には、処理がステップＳ１６へ進められる。演算装置の種類名が設定されていない場合には、処理がステップＳ１９へ進められる。
【００７７】
［ステップＳ１６］設計モデル検査部１６０は、この検査処理において、対象演算装置名が既に指定されているか判断する。対象演算装置名が指定されている場合には、処理がステップＳ１７へ進められる。対象演算装置名が指定されていない場合には、処理がステップＳ１８へ進められる。
【００７８】
［ステップＳ１７］設計モデル検査部１６０は、ステップＳ１４で選択した通常ブロックに対して設定されている演算装置の種類名が、対象演算装置名と同一か否か判断する。同一である場合には、処理がステップＳ１９へ進められる。同一でない場合には、処理がステップＳ２０へ進められる。
【００７９】
［ステップＳ１８］設計モデル検査部１６０は、ステップＳ１４で選択した通常ブロックに対して設定されている演算装置の種類名を、対象演算装置名に指定する。
［ステップＳ１９］設計モデル検査部１６０は、ステップＳ１１で取得したデータフロー図の通常ブロックのうち、ステップＳ１４で未選択の通常ブロックがあるか判断する。未選択の通常ブロックがある場合には、処理がステップＳ１４へ進められる。未選択の通常ブロックがない場合には、処理がステップＳ２１へ進められる。
【００８０】
［ステップＳ２０］設計モデル検査部１６０は、検査処理に失敗した旨のエラー出力を行う。
［ステップＳ２１］設計モデル検査部１６０は、検査処理に成功した旨の出力を行う。
【００８１】
このようにして、設計モデル検査部１６０は、検査処理の開始の指示があると、設定情報で指定された演算装置の種類が全て同一か検査する。具体的には、設計モデル検査部１６０は、プロジェクトノードに対して演算装置の種類名が設定されている場合には、プロジェクトノードとそれぞれの機能ブロックとの間で、演算装置の種類の一致を検査する。プロジェクトノードに対して演算装置の種類名が設定されていない場合には、機能ブロック間で、演算装置の種類の一致を検査する。
【００８２】
これにより、複数人の開発者でプログラム開発を行う場合などに発生しがちな設定情報の矛盾を、自動的に検出することができる。
なお、設計モデル検査部１６０は、開発者の明示の指示に基づいて上記の検査処理を行うときは、処理結果をモニタ２０に表示する。一方、設計モデル検査部１６０は、ソースコードの生成前にソースコード生成部１７０からの指示に基づいて上記の検査処理を行うときは、処理結果をモニタ２０に表示すると共に、ソースコード生成部１７０に処理結果を通知する。このとき、検査処理に成功した場合は、設計モデル記憶部１２０に格納されたプログラム構造図、データフロー図および設定情報を、処理結果の通知と併せてソースコード生成部１７０に渡す。
【００８３】
次に、プログラム構造図とデータフロー図とからソースコードを生成する処理について説明する。
図１１は、ソースコード生成の処理手順を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
【００８４】
［ステップＳ３１］ソースコード生成部１７０は、設計モデル検査部１６０から受け取ったプログラム構造図のモジュールノードのうち、未選択のモジュールノードを１選択する。そして、ソースコード生成部１７０は、選択したモジュールノードに対応するコード記憶領域を確保する。
【００８５】
［ステップＳ３２］ソースコード生成部１７０は、ステップＳ３１で選択したモジュールノードに属する関数ノードのうち、未選択の関数ノードを１つ選択する。そして、ソースコード生成部１７０は、選択した関数ノードに対応する関数宣言文を作成し、ステップＳ３１で確保したコード記憶領域に追加する。
【００８６】
［ステップＳ３３］ソースコード生成部１７０は、ステップＳ３２で選択した関数ノードに対応するデータフロー図の通常ブロックのうち、開始ノードから近い順に未選択の通常ブロックを１つ選択する。すなわち、必要な全ての入力データを計算するコードが既に生成されている通常ブロックを１つ選択する。
【００８７】
［ステップＳ３４］ソースコード生成部１７０は、ステップＳ３３で選択した機能ブロックが、プログラム構造図で定義された他の関数を呼び出す機能ブロックか判断する。他の関数を呼び出す機能ブロックでない場合には、処理がステップＳ３５へ進められる。他の関数を呼び出す機能ブロックである場合には、処理がステップＳ３６へ進められる。
【００８８】
［ステップＳ３５］ソースコード生成部１７０は、ステップＳ３３で選択した機能ブロックに対応する関数呼び出し文を作成し、ステップＳ３１で確保したコード記憶領域に追加する。ここで、関数呼び出し文の関数名には、選択した機能ブロックのブロック名を用いる。関数呼び出し文の引数には、データフロー図で他の機能ブロックから受け渡されるデータを用いる。
【００８９】
［ステップＳ３６］ソースコード生成部１７０は、ステップＳ３３で選択した機能ブロックに対応する関数呼び出し文を作成し、ステップＳ３１で確保したコード記憶領域に追加する。ここで、関数呼び出し文の関数名には、選択した機能ブロックが表す関数に対応する関数ノードの関数名を用いる。関数呼び出し文の引数には、データフロー図で他の機能ブロックから受け渡されるデータを用いる。
【００９０】
［ステップＳ３７］ソースコード生成部１７０は、ステップＳ３２で選択した関数ノードに対応するデータフロー図の通常ブロックのうち、ステップＳ３３で未選択の通常ブロックがあるか判断する。未選択の通常ブロックがある場合には、処理がステップＳ３３へ進められる。未選択の通常ブロックがない場合には、処理がステップＳ３８へ進められる。
【００９１】
［ステップＳ３８］ソースコード生成部１７０は、ステップＳ３２で選択した関数ノードに対応する関数の戻り値の出力文を作成し、ステップＳ３１で確保したコード記憶領域に追加する。ここで、関数の戻り値は、データフロー図の終端ブロックに隣接する通常ブロックからの出力データを用いる。
【００９２】
［ステップＳ３９］ソースコード生成部１７０は、ステップＳ３１で選択したモジュールノードに属する関数ノードのうち、ステップＳ３２で未選択の関数ノードがあるか判断する。未選択の関数ノードがある場合には、処理がステップＳ３２へ進められる。未選択の関数ノードがない場合には、処理がステップＳ４０へ進められる。
【００９３】
［ステップＳ４０］ソースコード生成部１７０は、ステップＳ３５で呼び出し文を作成した全ての関数に対応する実装モジュールをライブラリ記憶部１１０から取得し、取得した実装モジュールのコードをステップＳ３１で確保したコード記憶領域に追加する。ここで、対応する実装モジュールとは、ステップＳ３３で選択した機能ブロックのブロック名と同一のモジュール名を有する実装モジュールである。ただし、ソースコード生成部１７０は、選択した機能ブロックに演算装置の種類名が設定されていない場合には、ＣＰＵ独立ライブラリ１１０ａ内の実装モジュールを使用し、選択した機能ブロックに演算装置の種類名が設定されている場合には、その演算装置の種類に対応するライブラリ内の実装モジュールを使用する。
【００９４】
［ステップＳ４１］ソースコード生成部１７０は、ステップＳ３１で確保したコード記憶領域にあるコードをファイルに出力し、ソースファイル記憶部１３０に格納する。
［ステップＳ４２］ソースコード生成部１７０は、プログラム構造図のモジュールノードのうち、ステップＳ３１で未選択のモジュールノードがあるか判断する。未選択のモジュールノードがある場合には、処理がステップＳ３１に進められる。未選択のモジュールノードがない場合には、処理がソースコード生成処理を終了する。
【００９５】
このようにして、ソースコード生成部１７０は、プログラム構造図のモジュールノードごとにソースファイルを出力し、ソースファイル記憶部１３０に格納する。ここで、データフロー図の通常ブロックには、演算装置固有の拡張機能を利用するか否かに応じて、適切な実装モジュールが適用される。適用された実装モジュールのコードは、出力されるソースファイルに直接埋め込まれる。
【００９６】
次に、以上のような処理によって生成されるソースコードについて説明する。本実施の形態で生成されるソースコードは、拡張したＣ言語で記述されたものである。
図１２は、生成されるソースコード例を示す図である。ソースファイル１３１は、ソースファイル記憶部１３０に格納されている。ソースファイル１３１は、図４に示したプログラム構造図のモジュールノード１２１ｂに対応するソースファイルである。
【００９７】
関数宣言文１３１ａは、図４に示したプログラム構造図の関数ノード１２１ｃに対応する関数の宣言文である。関数宣言文１３１ａでは、図５に示したデータフロー図に記載の通り、２つの引数を有している。
【００９８】
関数呼び出し文１３１ｂは、図５に示したデータフロー図の通常ブロック１２２ｃに対応したものであり、引数の入力値“ｉｎ＿１”を関数に与えて出力データ“ｏｕｔ＿ａ”を取得する。また、関数呼び出し文１３１ｃは、通常ブロック１２２ｄに対応したものであり、入力データ“ｏｕｔ＿ａ”を関数に与えて出力データ“ｏｕｔ＿ｂ”を取得する。このように、関数の内部では、データフロー図に記述されたデータ受け渡し関係に従ってデータ処理が進められる。
【００９９】
同様に、関数呼び出し文１３１ｄは、通常ブロック１２２ｈに対応する関数呼び出し文である。ただし、図９の入力画面２４で示した通り、通常ブロック１２２ｈには演算装置の種類名“ＣＰＵ−Ｘ”が設定されているため、関数呼び出し文１３１ｄで呼び出される関数は、種類名“ＣＰＵ−Ｘ”の演算装置に固有の拡張機能を利用した処理を行う。なお、関数呼び出し文は、演算装置固有の拡張機能を利用する関数か否かによる差異はない。
【０１００】
関数１３１ｅは、関数呼び出し文１３１ｃで呼び出される関数であり、実装モジュールのコードがそのまま埋め込まれたものである。関数１３１ｅは、ＣＰＵ独立ライブラリ１１０ａ内の実行モジュールのコードである。
【０１０１】
同様に、関数１３１ｆは、関数呼び出し文１３１ｄで呼び出される関数であり、実装モジュールのコードがそのまま埋め込まれたものである。ただし、関数１３１ｆは、ＣＰＵ−Ｘ依存ライブラリ１１０ｂ内の実行モジュールのコードである。
【０１０２】
なお、本実施の形態では拡張したＣ言語で記述されたソースコードを生成したが、本実施の形態に係るプログラム開発支援装置は特定のプログラミング言語に特化したものではなく、他のプログラミング言語への応用も容易に行える。
【０１０３】
このようなプログラム開発支援装置を用いることで、開発者は、プログラム構造図とデータフロー図とから演算装置固有の拡張機能を利用した処理効率の高いプログラムのソースコードを直接かつ容易に生成することができる。したがって、演算装置固有の拡張機能を利用するプログラムの開発効率が大きく向上する。このようなプログラム開発支援装置は、特に、組み込み向けプログラムの開発に有用である。
【０１０４】
また、開発者は、ソースコードよりも理解容易なプログラム構造図とデータフロー図とを用いてプログラムの保守・管理ができるため、保守・管理の負担も大きく軽減される。特に、開発者は、プログラム全体の中で演算装置固有の拡張機能が利用されている部分を的確に把握できるため、設計モデルの修正も容易であり、既存の設計モデルを利用して他の演算装置向けのプログラムを開発することも容易である。
【０１０５】
さらに、ソースコードの生成前に設定情報に矛盾がないか検査が行われるため、異なる演算装置向けのライブラリを組み合わせることによるプログラムの不具合を未然に防止できる。このような検査機能は、特に、複数の開発者が分担して開発を行うような大規模プログラムの開発において有益である。
【０１０６】
以上、本発明のプログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラムを、図示の実施の形態に基づいて説明したが、本発明はこれに限定されるものではなく、各部の構成は、同様の機能を有する任意の構成のものに置換することができる。また、本発明に、他の任意の構成物や工程が付加されていてもよい。
【０１０７】
また、本発明は、前述した実施の形態のうちの、任意の２以上の構成（特徴）を組み合わせたものであってもよい。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、プログラム開発支援装置１００が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどが挙げられる。磁気記録装置としては、例えば、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどが挙げられる。光ディスクとしては、例えば、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などが挙げられる。光磁気記録媒体としては、例えば、ＭＯ（Magneto-Optical disk）などが挙げられる。
【０１０８】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１０９】
プログラム開発支援プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【図面の簡単な説明】
【０１１０】
【図１】実施の形態に適用される発明の概念図である。
【図２】プログラム開発支援装置のハードウェア構成を示す図である。
【図３】プログラム開発支援装置の機能を示すブロック図である。
【図４】ソースコードの生成に使用されるプログラム構造図の例である。
【図５】ソースコードの生成に使用されるデータフロー図の例である。
【図６】プログラム構造図およびデータフロー図の入力画面例を示す第１の図である。
【図７】プロジェクトノードに対する設定画面例を示す図である。
【図８】機能ブロックに対する設定画面例を示す図である。
【図９】プログラム構造図およびデータフロー図の入力画面例を示す第２の図である。
【図１０】設定情報検査の処理手順を示すフローチャートである。
【図１１】ソースコード生成の処理手順を示すフローチャートである。
【図１２】生成されるソースコード例を示す図である。
【符号の説明】
【０１１１】
２  データフロー図
２ａ，２ｂ，２ｃ  機能ブロック
４  設定情報
５  実装コード
１０  プログラム開発支援装置
１１  ライブラリ記憶手段
１１ａ  演算装置独立ライブラリ
１１ｂ  演算装置依存ライブラリ
１２  データフロー図記憶手段
１３  設定情報取得手段
１４  実装コード生成手段
【図１】
2008003817.tif 000003
【図２】
2008003817.tif 000004
【図３】
2008003817.tif 000005
【図４】
2008003817.tif 000006
【図５】
2008003817.tif 000007
【図６】
2008003817.tif 000008
【図７】
2008003817.tif 000009
【図８】
2008003817.tif 000010
【図９】
2008003817.tif 000011
【図１０】
2008003817.tif 000012
【図１１】
2008003817.tif 000013
【図１２】
2008003817.tif 000014