(57)【要約】【課題】  組み込みシステムにおいてマクロ定義が多用される場合でも、プログラム容量の増大化を防ぐ。【解決手段】  本発明のアセンブラは、マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロを呼び出すことによりプログラムを構築するとき、同一の引数をもってマクロ呼び出しを複数回行う場合、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化、関数化、またはライブラリ化して、プログラム容量を低減化する。【選択図】図１
2005122452.tif 000002
【特許請求の範囲】
【請求項１】
アセンブリ言語で書かれたソースファイルを機械語に翻訳してオブジェクトファイルを生成するアセンブラにおいて、
マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロを呼び出すことによりプログラムを構築するとき、同一の引数をもってマクロ呼び出しを複数回行う場合、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するアセンブラ。
【請求項２】
高級プログラミング言語で書かれたソースファイルを翻訳してアセンブリ言語ソースを生成する、または機械語に翻訳してオブジェクトファイルを生成するコンパイラにおいて、
マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロを呼び出すことによりプログラムを構築するとき、同一の引数をもってマクロ呼び出しを複数回行う場合、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するコンパイラ。
【請求項３】
複数のオブジェクトファイルを結合して、実行形式プログラムを生成するリンカにおいて、
請求項１に記載のアセンブラ、又は請求項２に記載のコンパイラによるオブジェクトファイルを結合するとき、同ファイル内または別ファイル内に、自動的に生成されたサブルーチン若しくは関数、またはライブラリを含めて結合処理を行うリンカ。
【請求項４】
請求項３に記載のリンカにおいて、
請求項１に記載のアセンブラによる一つのアセンブル単位、または請求項２に記載のコンパイラによる一つのコンパイル単位では、同じ引数を持つマクロ呼び出しが複数回行われていなくとも、
複数のアセンブル単位に渡って又は複数のコンパイル単位に渡っては、複数回行われている場合、それらのマクロの引数を含めたマクロ頻度情報を生成するリンカ。
【請求項５】
請求項１記載のアセンブラにおいて、
請求項４記載のリンカにて生成されたマクロ頻度情報を基に、そのマクロ処理をサブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するアセンブラ。
【請求項６】
請求項２記載のコンパイラにおいて、
請求項４記載のリンカにて生成されたマクロ頻度情報を基に、そのマクロ処理をサブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するコンパイラ。
【請求項７】
請求項１に記載のアセンブラ、請求項２に記載のコンパイラ、請求項３に記載のリンカ、請求項４に記載のリンカ、請求項５に記載のアセンブラ、若しくは、請求項６に記載のコンパイラのうち、少なくとも一つを含む、プログラム領域の占有量を低減化するプログラム開発支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラミング容量を低減化するアセンブラ、コンパイラ、リンカ、及びプログラム開発支援システムに関する。
【背景技術】
【０００２】
図２に示すように、従来技術におけるプログラム開発では、ホストコンピュータ２上でソースファイル４をコンパイルして、オブジェクトファイル１２’を生成し、そのオブジェクトファイル１２’からリンカ１４’により実行形式プログラム１６’を生成している。ここでのホストコンピュータ２は、例えばワークステーションやパーソナルコンピュータであり、特に制約はない。
【０００３】
このような従来技術では、共通する処理をプログラミングする場合、マクロ定義、関数定義等により、プログラム開発の効率化が行われる。ここで、一般的に、実行速度を優先される場合はマクロ定義が、またプログラム容量の低減化が優先される場合は関数定義が用いられる。逆に言えば、前者はプログラム容量の増大化を招き、また後者は実行速度の低速化を招いてしまう。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
プログラムの実行速度を優先するか、その容量の低減化を優先するかは、トレードオフの関係になるが、特に、組み込みシステムではプログラム容量の制限が厳しいことが多く、実行速度を多少犠牲にしてでも容量の低減化を行うことが必要になる場合がある。本発明は、組み込みシステムにおいてマクロ定義が多用される場合でも、プログラム容量の増大化を防ぐことを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、上記の目的を達成するためになされたものである。本発明に係る請求項１に記載のアセンブラは、
アセンブリ言語で書かれたソースファイルを機械語に翻訳してオブジェクトファイルを生成するアセンブラである。そのアセンブラにおいて、
マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロを呼び出すことによりプログラムを構築するとき、同一の引数をもってマクロ呼び出しを複数回行う場合、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化する。
【０００６】
本発明に係る請求項２に記載のコンパイラは、
高級プログラミング言語で書かれたソースファイルを翻訳してアセンブリ言語ソースを生成する、または機械語に翻訳してオブジェクトファイルを生成するコンパイラである。そのコンパイラにおいて、
マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロを呼び出すことによりプログラムを構築するとき、同一の引数をもってマクロ呼び出しを複数回行う場合、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するコンパイラ。
【０００７】
本発明に係る請求項３に記載のリンカは、
複数のオブジェクトファイルを結合して、実行形式プログラムを生成するリンカである。そのリンカにおいて、
請求項１に記載のアセンブラ、又は請求項２に記載のコンパイラによるオブジェクトファイルを結合するとき、同ファイル内または別ファイル内に、自動的に生成されたサブルーチン若しくは関数、またはライブラリを含めて結合処理を行う。
【０００８】
本発明に係る請求項４に記載のリンカは、
請求項３に記載のリンカにおいて、
請求項１に記載のアセンブラによる一つのアセンブル単位、または請求項２に記載のコンパイラによる一つのコンパイル単位では、同じ引数を持つマクロ呼び出しが複数回行われていなくとも、
複数のアセンブル単位に渡って又は複数のコンパイル単位に渡っては、複数回行われている場合、それらのマクロの引数を含めたマクロ頻度情報を生成するリンカである。
【０００９】
本発明に係る請求項５に記載のアセンブラは、
請求項１記載のアセンブラにおいて、
請求項４記載のリンカにて生成されたマクロ頻度情報を基に、そのマクロ処理をサブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するアセンブラである。
【００１０】
本発明に係る請求項６に記載のコンパイラは、
請求項２記載のコンパイラにおいて、
請求項４記載のリンカにて生成されたマクロ頻度情報を基に、そのマクロ処理をサブルーチン化若しくは関数化、またはライブラリ化して、プログラム容量を低減化するコンパイラである。
【００１１】
本発明に係る請求項７に記載のシステムは、
請求項１に記載のアセンブラ、請求項２に記載のコンパイラ、請求項３に記載のリンカ、請求項４に記載のリンカ、請求項５に記載のアセンブラ、若しくは、請求項６に記載のコンパイラのうち、少なくとも一つを含む、プログラム領域の占有量を低減化するプログラム開発支援システムである。
【発明の効果】
【００１２】
本発明を利用することにより、以下のような効果を得ることができる。
【００１３】
アセンブリ言語で書かれたソースファイルを機械語に翻訳してオブジェクトファイルを生成するアセンブラにおいて、マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロの呼び出しを利用するというプログラミングの内容に、全く同じ引数で以ってマクロ呼び出しを複数回行うという処理がある場合に、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化若しくは関数化、またはライブラリ化する。このことにより、プログラム容量を低減化することができる。
【００１４】
高級プログラミング言語で書かれたソースファイルを翻訳してアセンブリ言語ソースを生成する、又は機械語に翻訳してオブジェクトファイルを生成するコンパイラにおいて、マクロによる一連の処理内容をひとつのブロック内に定義し、そのマクロの呼び出しを利用するというプログラミングの内容に、全く同じ引数で以ってマクロ呼び出しを複数回行うという処理がある場合、その引数によるマクロ処理を、同ファイルまたは別ファイル内に、サブルーチン化若しくは関数化、またはライブラリ化する。このことにより、プログラム容量を低減化することができる。
【００１５】
更に、本発明に係るリンカによれば、容量を低減化した実行形式プログラムを生成できる。
【発明を実施するための最良の形態】
【００１６】
以下、図面を参照して本発明に係る好適な実施の形態を説明する。
【００１７】
図１は、本発明に係る好適な実施形態であるプログラム開発支援システムの概略のフロー図である。図１において、ホストコンピュータ２にて作成されたアセンブラソースプログラム群８は、アセンブラ１０によりオブジェクトファイル１２に翻訳される。また、高級言語ソースプログラム４は、コンパイラ６により夫々、アセンブラソース８、又はオブジェクトファイル１２に翻訳される。アセンブラソース８に変換される場合は、さらにアセンブラ１０を通じてオブジェクトファイル１２に翻訳される。それらオブジェクトファイル１２はリンカ１４により実行形式プログラム１６とされる。
【００１８】
≪第１の実施の形態≫
まず、第１の実施の形態に係るアセンブラ１０を説明する。このアセンブラは、例えば、画像処理用プロセッサのようなレジスタ数が非常に多いプロセッサ向けアセンブラである。
【００１９】
図３、及び図４で示すようなマクロ定義を用いたアセンブラソースプログラムを想定する。図３はマクロの定義部、図４はマクロの使用部である。図３のマクロは、多くのレジスタにデータが入っており、そのデータを用いて何らかの処理するような例である。このマクロを使用する図４において、（１）、（２）、（４）の処理部は、引数が異なるため、異なる処理を行うことになる。しかし、（１）、（３）、（５）の処理部は、同一の引数を含むため、同一の処理を行うことになる。
【００２０】
このように、一つのマクロが、複数の記述にて、同一の引数を含み拠って同一の処理を行うのであれば、以下に示す共通化を利用すると、メモリ容量の低減化に繋げることができる。一つのマクロが同一の引数を含み同一の処理を行う記述の、現出する頻度が多ければ多いほど、その効果は顕著である。
【００２１】
図１のアセンブラ１０は、マクロ使用の記述を読み取ると、そのマクロ名とその引数を示す図５に示すようなテーブルを作成する。そして、アセンブラ１０は、その中で共通のものを検索する。共通な部分が存在する場合、アセンブラ１０はその引数による展開コードをサブルーチン化する。
【００２２】
図３乃至図５の例において、そのサブルーチン化したマクロ部分の名称をＦＵＮＣ１とすると、図４で示すアセンブラソースＳ１は、図６で示すようなアセンブラソースＳ１’となる。なお、図５で示すマクロ情報テーブルは、個々のオブジェクトファイル１２内に埋め込まれる。このテーブルは、後で説明するように、リンカ１４で結合処理されるオブジェクトファイルの全体を通してのマクロ頻度情報ファイル１８生成に、利用される。
【００２３】
図６は、図４の（１）における引数を図３に従い展開し、その展開部分にサブルーチン名であるラベル（ＦＵＮＣ１）を付加し、またそのサブルーチンの最後に呼び出し元に戻るためのリターン処理（ｒｔｎ）を付加したものである。
【００２４】
また、図６のＦＵＮＣ１サブルーチン部分を、別のソースファイルにすることや、ライブラリオブジェクトとして生成させることもできる。別のソースファイルにする場合は、通常と同様に、サブルーチン名のラベル定義宣言を追加して、アセンブルを行い、オブジェクトファイルを生成する。同時に、呼び出し側ファイルでは外部ラベル宣言を付加する。図７に、別のソースファイルにした場合の定義部の例、また、図８に、呼び出し側ファイルの例であるソースファイルＳ１”を示す。ライブラリ化する（ライブラリオブジェクトとする）場合は、さらに、そのオブジェクトにした定義部を、その処理系のライブラリアンにてライブラリ化することになる。
【００２５】
このようにして、マクロ展開の共有化を行った各オブジェクトファイル、若しくは別のソースファイル化したオブジェクトファイル、又はライブラリを含めての結合処理を、リンカ１４にて行い、メモリ使用量を低減化した実行形式プログラムＰ１を生成する。
【００２６】
更に、マクロ呼び出しが、別々のソースファイルに渡って記述されていても、第１の実施の形態に係るリンカ１４を利用すれば、以下のように、実行形式プログラムの容量の低減を図れる。
【００２７】
即ち、図３で示すマクロ定義部分が複数のアセンブラソースファイルにインクルードされていて、図４の（１）〜（５）で示すようなマクロ呼び出しが、夫々、別のソースファイルで記述されていたとする。この場合、個別のソースファイルのみのアセンブル処理では、複数のソースファイルに渡って記述されている共通部分が共通部分であることが判断され得ない。
【００２８】
そこで、リンカ１４にて、各オブジェクトファイル１２の結合処理を行うときに、一旦実行形式プログラムＰ１を生成しつつ、同時に各オブジェクトファイル１２に埋め込まれたマクロ情報テーブルを基に、図９で示すようなソースファイル名付きのマクロ頻度情報ファイル１８を生成する。
【００２９】
この図９で示されるマクロ頻度情報ファイル１８を利用して、改めてアセンブラ１０は、各ソースファイル８をマクロ展開の共通化処理を伴ってアセンブルし、再度リンカ１４にて結合処理を行って、メモリ使用量を低減化した実行形式プログラムＰ２を生成する。
【００３０】
上記のリンカ１４が、各オブジェクトファイル１２に埋め込まれたマクロ情報テーブルを基に（図９で示すような）ソースファイル名付きのマクロ頻度情報ファイル１８を生成する処理を、行う手段を独立させてもよい。
【００３１】
≪第２の実施の形態≫
続いて、第２の実施の形態に係るコンパイラ６を説明する。このコンパイラ６は、高級言語ソースファイル向けのコンパイラであり、特に、画像処理用プロセッサのようにレジスタ数が非常に多いプロセッサ向けＣコンパイラであるとする。
【００３２】
図１０、及び図１１で示すようなマクロ定義に係る「＃ｄｅｆｉｎｅ」を用いたＣソースプログラムを想定する。図１０はマクロの定義部、図１１はマクロの使用部である。図１０のマクロも、多くのレジスタにデータが入っており、そのデータを用いて何らかの処理をするような例である。このマクロを使用する図１１において、（１）、（２）、（４）の処理部は、引数が異なるため、異なる処理を行うことになる。しかし、（１）、（３）、（５）の処理部は、同一の引数を含むため、同一の処理を行うことになる。
【００３３】
このように、一つのマクロが、複数の記述にて、同一の引数を含み拠って同一の処理を行うのであれば、以下に示す共通化を利用すると、メモリ容量の低減化に繋げることができる。一つのマクロが同一の引数を含み同一の処理を行う記述の、現出する頻度が多ければ多いほど、その効果は顕著である。
【００３４】
前に説明した第１の実施の形態に係るアセンブラ１０の場合と同様に、（図１の）コンパイラ６は、マクロ使用の記述を読み取ると、そのマクロ名とその引数を示す図１２に示すようなテーブルを作成する。そして、コンパイラ６は、その中で共通なものを検索する。共通な部分が存在する場合、コンパイラ６はその引数による展開コードを関数化する。
【００３５】
図１０乃至図１２の例において、その関数化したマクロ部分の名称をｆｕｎｃ２とすると、図１１で示すＣ言語ソースＳ２は、図１３で示すようなＣ言語ソースＳ２’となる。なお、図１２で示すマクロ情報テーブルも、個々のオブジェクトファイル１２内に埋め込まれる。このテーブルも、後で説明するように、リンカ１４で結合処理されるオブジェクトファイルの全体を通してのマクロ頻度情報ファイル１８生成に、利用される。
【００３６】
また、第１の実施の形態に係るアセンブラ１０と同様に、図１３の関数ｆｕｎｃ２の部分を、別のソースファイルにすることや、ライブラリオブジェクトとして生成させることもできる。別のソースファイルにする場合は、通常と同様に、コンパイル、及びアセンブル処理を行い、オブジェクトファイルを生成する。同時に、呼び出し側ファイルでその関数名の外部宣言を付加する。ライブラリ化する（ライブラリオブジェクトとする）場合は、さらに、そのオブジェクトファイルを、その処理系のライブラリアンにてライブラリ化することになる。
【００３７】
このようにして、マクロ展開の共有化を行った各オブジェクトファイル、若しくは別のソースファイル化したオブジェクトファイル、又はライブラリを含めての結合処理を、リンカ１４にて行い、メモリ使用量を低減化した実行形式プログラムＰ１を生成する。
【００３８】
更に、マクロ呼び出しが、別のソースファイルに渡って記述されていても、第２の実施の形態に係るリンカ１４を利用すれば、以下のように、実行形式プログラムの容量の低減化を図れる。
【００３９】
即ち、図１０で示すマクロ定義部分が複数のＣ言語ソースファイルにインクルードされていて、図１１の（１）〜（５）で示すようなマクロ呼び出しが、夫々、別のソースファイルで記述されていたとする。この場合、個別のソースファイルのみのコンパイル処理では、複数のソースファイルに渡って記述されている共通部分が共通部分であることが判断され得ない。
【００４０】
そこで、リンカ１４にて、各オブジェクトファイル１２の結合処理を行うときに、一旦実行形式プログラムＰ１を生成しつつ、同時に各オブジェクトファイル１２に埋め込まれたマクロ情報テーブルを基に、図９で示すようなソースファイル名付きのマクロ頻度情報ファイル１８を生成する。
【００４１】
この図９で示されるマクロ頻度情報ファイル１８を利用して、改めてコンパイラ６は、各ソースファイル８をマクロ展開の共通化処理を伴ってコンパイルし、再度リンカ１４にて結合処理を行って、メモリ使用量を低減化した実行形式プログラムＰ２を生成する。
【００４２】
上記のリンカ１４が、各オブジェクトファイル１２に埋め込まれたマクロ情報テーブルを基に（図９で示すような）ソースファイル名付きのマクロ頻度情報ファイル１８を生成する処理を、行う手段についても独立させてもよい。
【００４３】
≪その他の実施の形態≫
第１の実施の形態、及び第２の実施の形態に示されるような同一処理のサブルーチン化若しくは関数化は、例えば上流設計ツールにおいて、予め用意されている共通の処理、ライブラリ等を組み合わせて、自動的にソースコードを生成するようなシステムに用いることができる。
【産業上の利用可能性】
【００４４】
本発明は、ＣＰＵ／ＤＳＰなどのマイコン組み込み機器ソフトウエア開発に利用できる。
【図面の簡単な説明】
【００４５】
【図１】本発明に係る好適な実施形態であるプログラム開発支援システムの概略のフロー図である。
【図２】従来技術におけるプログラム開発支援システムの概略のフロー図である。
【図３】マクロ定義を用いたアセンブラソースプログラムの例であり、マクロの定義部の例である。
【図４】マクロ定義を用いたアセンブラソースプログラムの例であり、マクロの使用部の例である。
【図５】第１の実施の形態に係るアセンブラにより作成される、マクロ名とその引数を示すテーブルの例である。
【図６】図４で示すアセンブラソースを、第１の実施の形態に係るアセンブラが、作成し直したものである。
【図７】第１の実施の形態に係るアセンブリにより、別のソースファイルにされた定義部の例である。
【図８】図７の定義部を利用する場合の、呼び出し側ファイルであるソースファイルの記述内容である。
【図９】リンカが作成する、ソースファイル名付きのマクロ頻度情報ファイルの例である。
【図１０】「＃ｄｅｆｉｎｅ」を用いたＣソースプログラムの例であり、マクロの定義部の例である。
【図１１】「＃ｄｅｆｉｎｅ」を用いたＣソースプログラムの例であり、マクロの使用部の例である。
【図１２】第２の実施の形態に係るコンパイラにより作成される、マクロ名とその引数を示すテーブルの例である。
【図１３】図１１で示すアセンブラソースを、第２の実施の形態に係るコンパイラが、作成し直したものである。
【符号の説明】
【００４６】
２・・・ホストコンピュータ、６・・・コンパイラ、８・・・アセンブラソースファイル、１０・・・アセンブラ、１２・・・オブジェクトファイル、１４・・・リンカ、１６・・・実行形式ファイル、１８・・・マクロ頻度情報ファイル。
【図１】
2005122452.tif 000003
【図２】
2005122452.tif 000004
【図３】
2005122452.tif 000005
【図４】
2005122452.tif 000006
【図５】
2005122452.tif 000007
【図６】
2005122452.tif 000008
【図７】
2005122452.tif 000009
【図８】
2005122452.tif 000010
【図９】
2005122452.tif 000011
【図１０】
2005122452.tif 000012
【図１１】
2005122452.tif 000013
【図１２】
2005122452.tif 000014
【図１３】
2005122452.tif 000015