(57)【要約】      （修正有）【課題】関数ポインタやＯＳの使用するコンテキストのサイズを含むスタックサイズの計算をすること。【解決手段】ＯＳ動作環境設定記憶装置１０１、マイコン動作環境設定を記憶するマイコン動作環境設定記憶装置１０２、プログラム記憶手段１，１０３、プログラム記憶手段２，１０４、入力解析部１０５、動作環境解析部１０６、プログラム解析部１０７、プログラム生成部１０８を備え、ソースプログラム内の関数定義行及び、関数呼出し行を字句解析し、定義内容から、関数呼出しおよびＯＳ実行に必要なサイズの引数を付与するか又は実態を持つ関数に置き換えることにより、スタックサイズ計算用のプログラムを自動生成することにより関数ポインタを含むプログラムのスタックサイズが計算可能となる。【選択図】図１
2005250555.tif 000002
【特許請求の範囲】
【請求項１】
チェック対象プログラムをスタック計算に適したソースプログラムに変換するシステムであって、
前記ソースプログラムを動作させるＯＳ動作環境設定情報を記憶するＯＳ動作環境記憶手段と、
前記ソースプログラムを動作させるマイコンの設定情報を記憶するマイコン動作環境設定記憶手段と、
前記ＯＳ動作環境設定情報と前記マイコン動作環境設定情報から使用スタックサイズ情報を作成する動作環境解析手段と、
前記動作環境解析手段から抽出した使用スタックサイズ情報と第１プログラム記憶手段から取り出したソースプログラムの構文を解析し関数に関する付加情報を作成するプログラム解析手段と、
前記プログラム解析手段で作成した関数付加情報からスタック計算用プログラムを生成するプログラム生成手段と、
前記プログラム生成手段により作成されたプログラムを記憶する第２プログラム記憶手段と、を備えたシステム。
【請求項２】
前記動作環境解析手段はＯＳ動作環境設定情報からタスク呼出し時のコンテキストのスタックサイズを計算し、スタック計算用プログラムソース自動生成手段によりタスクの先頭で呼出される関数にコンテキストスタックサイズ分の引数を追加する機能を備えた請求項１記載のシステム。
【請求項３】
前記動作環境解析手段はマイコン動作環境設定情報から関数呼出し時のスタックフレームサイズを計算し、スタック計算用プログラムソース自動生成手段により呼出された関数にスタックフレームサイズ分の引数を追加する機能を備えた請求項１記載のシステム。
【請求項４】
前記プログラム解析手段は、第１プログラム記憶手段に記憶されたソースプログラムを構文解析し、関数ポインタ及び関数ポインタ配列の呼出し行の内容から関数定義部を検索し、関数定義情報からプログラム生成手段により元のプログラム内容に直接関数呼出しのプログラムを追加する機能を備えた請求項１記載のシステム。
【請求項５】
前記プログラム解析手段は、第１プログラム記憶手段に記憶されたソースプログラムを構文解析し、関数ポインタ配列の呼出し行の内容から関数定義部を検索し、配列で定義された複数の呼出し関数を全ての関数定義情報から、プログラム生成手段により、元のプログラムに配列で使用される全ての関数を呼出すプログラムを追加する機能を備えた請求項１記載のシステム。
【請求項６】
前記プログラム生成手段は、元のプログラムに対する修正個所と修正結果を表示する機能を備えた請求項１記載のシステム。
【請求項７】
プログラムから関数毎の使用スタックサイズ集計システムに入力するためのスタック計算用プログラムを生成する方法であって、
ＯＳの動作環境設定情報を記憶するＯＳ動作環境記憶ステップと、
マイコン設定情報を記憶するマイコン動作環境設定記憶ステップと、
記憶された前記動作環境設定情報と前記マイコン設定情報から使用スタックサイズ情報を作成する動作環境解析ステップと、
前記動作環境解析手段から抽出した使用スタックサイズ情報と第１プログラム記憶手段から取り出したソースプログラムの構文を解析し関数に関する付加情報を作成するプログラム解析ステップと、
前記プログラム解析ステップで作成した関数付加情報からスタック計算用プログラムを生成するプログラム生成ステップと、
前記プログラム生成ステップにより作成されたプログラムを記憶する第２プログラム記憶ステップと、を備えた方法。
【請求項８】
プログラムから関数毎の使用スタックサイズ集計システムに入力するためのスタック計算用プログラムを生成する方法を実現するためのプログラムを格納する記録媒体であって、
ＯＳ動作環境設定情報とマイコン動作環境設定情報から使用スタックサイズ情報を作成する動作環境解析手段と、
前記動作環境解析手段から抽出した使用スタックサイズ情報とソースプログラムの構文を解析し関数に関する付加情報を作成するプログラム解析手段と、
前記プログラム解析手段で作成した関数付加情報からスタック計算用プログラムを生成するプログラム生成手段と、を備えた記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発環境においてプログラムの最大使用ＲＡＭサイズを実行前に予測し動作をチェックする技術に関するものである。
【背景技術】
【０００２】
ＭＤプレーヤや携帯電話のような家電製品に搭載されるマイコンソフトの開発において、機器に搭載される組込みマイコンのＲＡＭ容量は固定サイズであり、コストを押さえるため容量に余裕がない場合が多い。前記ＲＡＭ上に確保されるスタックは、プログラムの動作状況によって使用サイズが変化するため、動作前に使用サイズを予測してサイズを決定する。しかし、その使用量が設計時の設定サイズを超えると、復旧不可能な不具合が発生するため、きちんとした動作前の使用量予測が必要である。
【０００３】
従来の動作前にスタックサイズの計算を行なう技術としては、ソースプログラムをアセンブルした結果を解析し、関数呼出し関係構造テーブルを作成し、関数内で更に関数を呼出す毎に関数の呼出しに必要なスタックサイズを加算し集計しておき、同じ階層レベルの関数の内で最も多くのスタックサイズを使用する関数を集計することにより、最大のスタックサイズを計算するものがあった（例えば、特許文献１参照）。図１２は、前記特許文献１に記載された従来のスタックサイズを計算する処理フローを示すものである。
【０００４】
図１１は、従来のスタックサイズ計算に用いる関数呼出し関係構造のテーブルである。図１２のステップＳ１において、図１１に示すような関数の相関関係を求め、ステップＳ２以降で前記関数の相関関係から関数毎のスタック使用量の大小関係を比較し、最大となるものを計算していた。
【特許文献１】特開平７−１５２５７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、前記従来の構成では、関数の呼出し関係構造を元にした関数引数情報のみからのスタックサイズ計算を行なうため、Ｃ言語等で作成されたプログラム内での関数ポインタを用いた間接参照による関数の呼出しやプログラム実行時にＯＳで使用されるスタックサイズが計算できなかった。このため、従来のやり方では厳密に計算しようとすると手作業による計算のし直しや実際のプログラムの動作確認が必要であるという課題があった。
【０００６】
本発明は、前記従来の課題を解決するもので、動的に確定する関数ポインタやプログラム実行時にＯＳで使用されるスタックサイズなどをプログラムを実際に動作させる前に確認するためのより厳密な計算を自動的に行なう方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
前記従来の課題を解決するために、本発明によるシステムは、チェック対象プログラムをスタック計算に適したソースプログラムに変換するシステムであって、前記ソースプログラムを動作させるＯＳの動作環境設定情報を記憶するＯＳ動作環境記憶手段と、前記ソースプログラムを動作させるマイコンの設定情報を記憶するマイコン動作環境設定記憶手段と、前記動作環境設定情報と前記マイコン動作環境設定情報から使用スタックサイズ情報を作成する動作環境解析手段と、前記動作環境解析手段から抽出した使用スタックサイズ情報と第１プログラム記憶手段から取り出したソースプログラムの構文を解析し関数に関する付加情報を作成するプログラム解析手段と、前記プログラム解析手段で作成した関数付加情報からスタック計算用プログラムを生成するプログラム生成手段と、前記プログラム生成手段により作成されたプログラムを記憶する第２プログラム記憶手段と、を備えている。
【０００８】
前記動作環境解析手段はＯＳ動作環境設定情報からタスク呼出し時のコンテキストのスタックサイズを計算し、スタック計算用プログラムソース自動生成手段によりタスクの先頭で呼出される関数にコンテキストスタックサイズ分の引数を追加する機能を備えていてもより。また、前記動作環境解析手段はＯＳ動作環境設定情報からタスク呼出し時のコンテキストのスタックサイズを計算し、スタック計算用プログラムソース自動生成手段によりタスクの先頭で呼出される関数にコンテキストスタックサイズ分の引数を追加する機能を備えていてもより。
【０００９】
また、前記プログラム解析手段は、第１プログラム記憶手段に記憶されたソースプログラムを構文解析し、関数ポインタ及び関数ポインタ配列の呼出し行の内容から関数定義部を検索し、関数定義情報からプログラム生成手段により元のプログラム内容に直接関数呼出しのプログラムを追加する機能を備えていてもよい。また、前記プログラム解析手段は、第１プログラム記憶手段に記憶されたソースプログラムを構文解析し、関数ポインタ配列の呼出し行の内容から関数定義部を検索し、配列で定義された複数の呼出し関数を全ての関数定義情報から、プログラム生成手段により、元のプログラムに配列で使用される全ての関数を呼出すプログラムを追加する機能を備えていてもよい。また、前記プログラム生成手段は、元のプログラムに対する修正個所と修正結果を表示する機能を備えていてもよい。
【００１０】
また、本発明による方法は、プログラムから関数毎の使用スタックサイズ集計システムに入力するためのスタック計算用プログラムを生成する方法であって、ＯＳの動作環境設定情報を記憶するＯＳ動作環境記憶ステップと、マイコン設定情報を記憶するマイコン動作環境設定記憶ステップと、記憶された前記動作環境設定情報と前記マイコン設定情報から使用スタックサイズ情報を作成する動作環境解析ステップと、前記動作環境解析手段から抽出した使用スタックサイズ情報と第１プログラム記憶手段から取り出したソースプログラムの構文を解析し関数に関する付加情報を作成するプログラム解析ステップと、前記プログラム解析ステップで作成した関数付加情報からスタック計算用プログラムを生成するプログラム生成ステップと、前記プログラム生成ステップにより作成されたプログラムを記憶する第２プログラム記憶ステップと、を備えている。
【００１１】
また、本発明による記録媒体は、プログラムから関数毎の使用スタックサイズ集計システムに入力するためのスタック計算用プログラムを生成する方法を実現するためのプログラムを格納する記録媒体であって、ＯＳ動作環境設定情報とマイコン動作環境設定情報から使用スタックサイズ情報を作成する動作環境解析手段と、前記動作環境解析手段から抽出した使用スタックサイズ情報とソースプログラムの構文を解析し関数に関する付加情報を作成するプログラム解析手段と、前記プログラム解析手段で作成した関数付加情報からスタック計算用プログラムを生成するプログラム生成手段と、を備えている。
【００１２】
本発明のスタックサイズ計算システム、方法、ならびに記録手段によれば、使用するマイコン及び使用するリアルタイムＯＳの設定情報を記憶する動作環境設定記憶手段と記憶された動作環境設定内容から関数以外で使用するスタックサイズの計算手段と、関数以外で使用するスタックサイズを記憶する手段と、記憶された関数が使用するスタックサイズ記憶手段と関数以外が使用するスタックサイズ記憶手段から取得されたスタックサイズデータを合計し、総スタックサイズを集計する手段と前記総スタックサイズを記憶する手段とを有し、元のソースプログラム中の関数の引数部分に、関数ポインタやＯＳによって使用されるデータと同じサイズを引数として追加し、の形で追加したソースファイルを自動生成する。
【００１３】
本構成によって従来スタックサイズの計算には含まれなかった関数ポインタのデータサイズやＯＳが使用するコンテキストのデータサイズを含むスタックサイズを計算することができる。
【発明の効果】
【００１４】
本発明のスタックサイズ用のプログラム自動生成手段によれば、従来スタックサイズ計算には含まれなかった関数ポインタのデータサイズやＯＳが使用するコンテキストのデータサイズを含むスタックサイズをプログラムを実行する前に計算することができる。
【発明を実施するための最良の形態】
【００１５】
以下本発明の実施の形態について、図面を参照しながら説明する。なお、本発明はこの図面によって限定されるものではない。
【００１６】
（実施の形態１）
図１は、本発明の実施の形態１におけるスタックサイズ計算用プログラム自動生成システムの一実施形態の構成の概略を表す図である。
【００１７】
図１において、１０は入力用のキーボード、１１は結果表示用のディスプレイ、１０１はＯＳ動作環境設定記憶装置（ＲＴＯＳ動作環境設定記憶装置とも呼ぶ）、１０２はマイコン動作環境設定記憶装置、１０３は解析の対象となるプログラムを格納するプログラム記憶装置１、１０４はスタック計算用に生成されたプログラムを格納するプログラム記憶装置２、１０５はキーボードから入力されたコマンドを解釈する入力解析部、１０６はマイコン動作環境設定記憶装置とＯＳ動作環境設定記憶装置からスタック情報を解析する動作環境解析部、１０７は解析対象となるプログラムを読み込みスタック情報と関数情報を付加するプログラム解析部、１０８は関数付加情報からスタック計算用のプログラムを生成するプログラム生成部である。
【００１８】
図２は動作環境解析部のブロック図である。２０１はＯＳ動作環境設定記憶手段に格納されたＯＳ動作環境設定からタスクの先頭関数名を抽出する。２０２はＯＳ動作環境設定記憶手段に格納されたＯＳ動作環境設定からＯＳがスタックとして使用するコンテキストのサイズ計算する。２０３はマイコン動作環境設定記憶手段に格納されたマイコン動作環境よりスタックフレームサイズを計算する。２０４はスタックサイズの計算のためにスタック、コンテキストを引き数として追加するための定義に必要な情報を付加する。
【００１９】
図３の（ａ）はＯＳ動作環境設定記憶装置に格納されるＯＳ動作環境設定はＯＳがタスク毎に使用するコンテキストのサイズと各タスクの先頭関数情報テーブルを表す。図３の（ｂ）はマイコン動作環境設定記憶装置に格納されるマイコン動作環境設定はＰＣ（プログラムカウンタ）サイズを持つ。図３の（ｃ）はＯＳ動作環境設定とマイコン動作環境設定から作成されるプログラム生成のためのプログラム上に付加されるシステム情報を表す図である。
【００２０】
図４プログラムの解析を行なうプログラム解析部で解析対象ソースプログラムから関数定義部を抽出するメイン処理のフローチャートである。４０１で解析対象ソースプログラムを１行読み出し、４０２関数定義の判定を行い、関数定義コードの場合は４０３の関数定義情報の解析、関数定義でない場合は４０４関数呼出し情報の解析を行なう。
【００２１】
図５は、プログラムの解析を行なうプログラム解析部の関数呼出し情報の解析処理のフローチャートである。
【００２２】
５０１でプログラム記憶手段１から解析対象のプログラムを１行読み出し、５０２で関数呼出し行かどうかを調べ５０３で関数呼出し行の場合はプログラム生成のための情報を付加する。５０４では読み込んだ行が関数ポインタの実行行かを判定し関数ポインタ呼出しの場合は５０５で解析対象プログラムの中から関数ポインタの宣言部を検索しプログラム生成のための情報を付加する。５０６では読み込んだ行が関数ポインタ配列かどうかを判定し、関数ポインタ配列の場合は５０７で解析対象プログラムの中から関数ポインタ配列の宣言部分を検索し、プログラム生成のための情報を付加する。
【００２３】
図６は、解析されたプログラムを基にスタック計算に適したソースプログラムを作成するプログラム生成部のフローチャートである。
【００２４】
６０１でプログラム解析部の解析結果のプログラムを１行読み出し、６０２で読み出しプログラムに付加情報があるかをどうかを判定し、付加情報がある場合は６０３でスタック計算用の行を付加する。６０４では作成したスタック計算用ソースプログラムを１０４プログラム記憶手段２に出力し、６０５で解析結果のプログラムの終了を判定し、解析結果プログラムの読み込みが終了するまで繰り返す。全ての行の出力が終了した後、６０６で表示指定があるかを判定し、表示指定がある場合は６０７で作成したスタック計算用ソースプログラムを１１ディスプレイに表示する。
【００２５】
図７は、図６の６０３付加情報からプログラムを生成する処理のフローチャートである。
【００２６】
７０１、７０２、７０３で付加情報の種類は判別し、７０４、７０５、７０６で種類毎にそれぞれの付加情報の種類に対応したコードを作成する。
【００２７】
図８は解析対象のプログラムの例である。図１の１０７プログラム解析部は解析対象プログラム中から８０１、８０２関数定義部と８０３、８０４の関数呼出し部を抽出する。
【００２８】
図９は解析対象結果プログラムに９０１〜９０９付加情報行を追加したプログラムの例である。
【００２９】
図１０は図１の１０８プログラム生成部によって出力されたスタック計算用プログラム例である。
【００３０】
かかる構成によれば、動作環境解析手段とプログラムソース解析手段からＯＳの使用スタックサイズ及び関数ポインタに対応する関数情報を得ることにより、スタック計算用プログラム生成手段により前記情報をプログラムに置き換えたスタック計算用プログラムを作成することとなり、既存のスタックサイズ計算手段で、スタックサイズを計算することができる。
【産業上の利用可能性】
【００３１】
本発明にかかるスタックサイズ計算用プログラム自動生成手段は、プログラム解析部と、プログラム自動生成部分を有し、マイコン上でのプログラム開発における静的なスタックサイズ計算方法等として有用である。またマイコン以外のソフトウェアの開発におけるスタックサイズの事前確認等の用途にも応用できる。
【図面の簡単な説明】
【００３２】
【図１】本発明の実施の形態１におけるスタックサイズ計算用プログラム自動生成手段の構成の概略図
【図２】本発明の実施の形態１における動作解析部のブロック図
【図３】本発明の実施の形態１におけるＯＳ環境情報とマイコン環境情報の図
【図４】解析対象となるプログラムの例１を表す図
【図５】本発明の実施の形態１におけるプログラム解析部のブロック図
【図６】本発明の実施の形態１におけるプログラム生成部のブロック図
【図７】本発明の実施の形態１における付加情報からプログラムを生成する処理のブロック図
【図８】解析対象となるプログラム例を表す図
【図９】プログラム例からプログラム解析部により付加情報が追加されたプログラム例を表す図
【図１０】プログラム例からプログラム生成部により生成されたプログラムの例を表す図
【図１１】従来技術の関数呼出し構造テーブルを表す図
【図１２】従来技術のスタックサイズ計算アルゴリズムを表す図
【符号の説明】
【００３３】
１０    キーボード
１１    ディスプレイ
１０１    ＯＳ動作環境設定記憶手段
１０２    マイコン動作環境設定記憶手段
１０３    プログラム記憶手段１
１０４    プログラム記憶手段２
１０５    入力解析部
１０６    動作環境解析部
１０７    プログラム解析部
１０８    プログラム生成部
【図１】
2005250555.tif 000003
【図２】
2005250555.tif 000004
【図３】
2005250555.tif 000005
【図４】
2005250555.tif 000006
【図５】
2005250555.tif 000007
【図６】
2005250555.tif 000008
【図７】
2005250555.tif 000009
【図８】
2005250555.tif 000010
【図９】
2005250555.tif 000011
【図１０】
2005250555.tif 000012
【図１１】
2005250555.tif 000013
【図１２】
2005250555.tif 000014