(57)【要約】【課題】ＲＴＯＳが搭載されたアプリケーション開発の効率を向上する。【解決手段】ＲＴＯＳのリソースをオブジェクトとして呼び出して利用するアプリケーションをターゲットデバイス上で実行するための実行可能コードを生成するコンパイラであって、システムコンフィギュレーション情報が入力されるＲＴＯＳ設定情報最適化部と、アプリケーションソースコードが入力されるコンパイル部とを有する。ＲＴＯＳ設定情報最適化部は、システムコンフィギュレーション情報に基づいて、使用可能なオブジェクトの属性情報を含むＲＴＯＳ資源生成情報を生成する。コンパイル部は、ＲＴＯＳ資源生成情報とアプリケーションソースコードの解析結果とから、実際に使用されるオブジェクトの一覧を含むＲＴＯＳ設定情報を生成し、ＲＴＯＳ設定情報最適化部は、システムコンフィギュレーション情報に基づいて、それを最適化する。【選択図】図４
2017091070.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイムオペレーティングシステムが組み込まれたアプリケーションをターゲットデバイス上で実行するための実行可能コードを、コンピュータで実行されることによって生成する、実行可能コード生成プログラムであって、
前記アプリケーションは、前記リアルタイムオペレーティングシステムのリソースをオブジェクトとして呼び出して利用可能であり、
前記実行可能コード生成プログラムは、システムコンフィギュレーション情報が入力されるリアルタイムオペレーティングシステム設定情報最適化部と、前記アプリケーションのアプリケーションソースコードが入力されるコンパイル部とを有し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、入力された前記システムコンフィギュレーション情報に基づいて、使用可能なオブジェクトの属性情報を含むリアルタイムオペレーティングシステム資源生成情報を生成して前記コンパイル部に供給し、
前記コンパイル部は、入力された前記アプリケーションソースコードを解析することによって、前記アプリケーションが呼び出すオブジェクトの一覧を含む第１のリアルタイムオペレーティングシステム設定情報を生成して前記リアルタイムオペレーティングシステム設定情報最適化部へ供給し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、前記第１のリアルタイムオペレーティングシステム設定情報と前記システムコンフィギュレーション情報とに基づいて、最適化されたリアルタイムオペレーティングシステム設定情報を生成し、前記最適化されたリアルタイムオペレーティングシステム設定情報を含むリアルタイムオペレーティングシステム設定情報ファイルを生成し、
前記実行可能コード生成プログラムは、前記リアルタイムオペレーティングシステム設定情報ファイルと前記アプリケーションソースコードと前記リアルタイムオペレーティングシステムとに基づいて、前記実行可能コードを生成する、
実行可能コード生成プログラム。
【請求項２】
請求項１において、前記実行可能コード生成プログラムは、前記アプリケーションソースコードのうちのアセンブリ言語で記述されたソースコードが入力されるアセンブル部をさらに有し、
前記アセンブル部は、前記アセンブリ言語で記述されたソースコードを解析することによって、前記アプリケーションが呼び出すオブジェクトの一覧を含む第２のリアルタイムオペレーティングシステム設定情報を生成して前記リアルタイムオペレーティングシステム設定情報最適化部へ供給し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、前記第１のリアルタイムオペレーティングシステム設定情報と前記システムコンフィギュレーション情報に加えてさらに、前記第２のリアルタイムオペレーティングシステム設定情報に基づいて、最適化されたリアルタイムオペレーティングシステム設定情報を生成する、
実行可能コード生成プログラム。
【請求項３】
請求項１において、
前記コンパイル部は、入力された前記アプリケーションソースコードを解析することによって、前記アプリケーションが呼び出すサブルーチンのサブルーチン情報を抽出して、前記第１のリアルタイムオペレーティングシステム設定情報にさらに含めて前記リアルタイムオペレーティングシステム設定情報最適化部へ供給し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、前記第１のリアルタイムオペレーティングシステム設定情報に含まれる前記サブルーチン情報に基づいて、前記第１のリアルタイムオペレーティングシステム設定情報に一覧として含まれるオブジェクトがタスクであって、前記サブルーチンを呼び出す処理を含むタスクについて、スタック容量を算出し、前記最適化されたリアルタイムオペレーティングシステム設定情報に含めて前記リアルタイムオペレーティングシステム設定情報ファイルを生成する、
実行可能コード生成プログラム。
【請求項４】
請求項３において、前記最適化されたリアルタイムオペレーティングシステム設定情報は、タスク情報と割り込みハンドラ情報とサブルーチン情報とを含み、
前記タスク情報は、タスクのシンボル名称と前記タスクから呼び出されるサブルーチンについてのサブルーチン情報を指し示すポインタと、前記タスクのスタック容量とを含み、
前記割り込みハンドラ情報は、当該割り込みハンドラのシンボル名称と当該割り込みハンドラの起動方法とを含み、
前記サブルーチン情報は、当該サブルーチンのシンボル名称と、当該サブルーチンが呼び出すさらに下位のサブルーチンがある場合の前記下位のサブルーチンのサブルーチン情報を指し示すポインタとを含む、
実行可能コード生成プログラム。
【請求項５】
請求項４において、
前記コンパイル部は、入力された前記アプリケーションソースコードを解析する場合に、前記アプリケーションソースコードを構成する複数の単位ソースコードのそれぞれについて、
前記単位ソースコードがタスクのシンボル名称を含むときは、前記リアルタイムオペレーティングシステム内の前記タスクに関するレジスタの退避処理と復帰処理のコードを除く、前記タスク用のコード展開を行い、
前記単位ソースコードが割り込みハンドラのシンボル名称を含むときは、前記アプリケーションソースコード内に前記割り込みハンドラ用の特殊命令が指定されているか否かを判断し、指定されている時には、当該割り込みハンドラの起動方法として、リアルタイムオペレーティングシステムを介さない直接起動を指定し、指定されていない時には、当該割り込みハンドラの起動方法として、リアルタイムオペレーティングシステムを介する起動を指定し、当該割り込みハンドラの起動方法を、生成する前記第１のリアルタイムオペレーティングシステム設定情報に包含し、
前記単位ソースコードがサブルーチンの呼び出し処理を含むときは、前記タスク情報において、呼び出されるサブルーチン情報を指し示すポインタを紐付け、当該タスク情報を、生成する前記第１のリアルタイムオペレーティングシステム設定情報に包含する、
実行可能コード生成プログラム。
【請求項６】
リアルタイムオペレーティングシステムが組み込まれたアプリケーションをターゲットデバイス上で実行するための実行可能コードを生成する、実行可能コード生成装置であって、
前記アプリケーションは、前記リアルタイムオペレーティングシステムのリソースをオブジェクトとして呼び出して利用可能であり、
前記実行可能コード生成装置は、システムコンフィギュレーション情報が入力されるリアルタイムオペレーティングシステム設定情報最適化部と、前記アプリケーションのアプリケーションソースコードが入力されるコンパイル部とを有し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、入力された前記システムコンフィギュレーション情報に基づいて、使用可能なオブジェクトの属性情報を含むリアルタイムオペレーティングシステム資源生成情報を生成して前記コンパイル部に供給し、
前記コンパイル部は、入力された前記アプリケーションソースコードを解析することによって、前記アプリケーションが呼び出すオブジェクトの一覧を含む第１のリアルタイムオペレーティングシステム設定情報を生成して前記リアルタイムオペレーティングシステム設定情報最適化部へ供給し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、前記第１のリアルタイムオペレーティングシステム設定情報と前記システムコンフィギュレーション情報とに基づいて、最適化されたリアルタイムオペレーティングシステム設定情報を生成し、前記最適化されたリアルタイムオペレーティングシステム設定情報を含むリアルタイムオペレーティングシステム設定情報ファイルを生成し、
前記実行可能コード生成装置は、前記リアルタイムオペレーティングシステム設定情報ファイルと前記アプリケーションソースコードと前記リアルタイムオペレーティングシステムとに基づいて、前記実行可能コードを生成する、
実行可能コード生成装置。
【請求項７】
請求項６において、前記実行可能コード生成装置は、前記アプリケーションソースコードのうちのアセンブリ言語で記述されたソースコードが入力されるアセンブル部をさらに有し、
前記アセンブル部は、前記アセンブリ言語で記述されたソースコードを解析することによって、前記アプリケーションが呼び出すオブジェクトの一覧を含む第２のリアルタイムオペレーティングシステム設定情報を生成して前記リアルタイムオペレーティングシステム設定情報最適化部へ供給し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、前記第１のリアルタイムオペレーティングシステム設定情報と前記システムコンフィギュレーション情報に加えてさらに、前記第２のリアルタイムオペレーティングシステム設定情報に基づいて、最適化されたリアルタイムオペレーティングシステム設定情報を生成する、
実行可能コード生成装置。
【請求項８】
請求項６において、
前記コンパイル部は、入力された前記アプリケーションソースコードを解析することによって、前記アプリケーションが呼び出すサブルーチンのサブルーチン情報を抽出して、前記第１のリアルタイムオペレーティングシステム設定情報にさらに含めて前記リアルタイムオペレーティングシステム設定情報最適化部へ供給し、
前記リアルタイムオペレーティングシステム設定情報最適化部は、前記第１のリアルタイムオペレーティングシステム設定情報に含まれる前記サブルーチン情報に基づいて、前記第１のリアルタイムオペレーティングシステム設定情報に一覧として含まれるオブジェクトがタスクであって、前記サブルーチンを呼び出す処理を含むタスクについて、スタック容量を算出し、前記最適化されたリアルタイムオペレーティングシステム設定情報に含めて前記リアルタイムオペレーティングシステム設定情報ファイルを生成する、
実行可能コード生成装置。
【請求項９】
請求項８において、前記最適化されたリアルタイムオペレーティングシステム設定情報は、タスク情報と割り込みハンドラ情報とサブルーチン情報とを含み、
前記タスク情報は、タスクのシンボル名称と前記タスクから呼び出されるサブルーチンについてのサブルーチン情報を指し示すポインタと、前記タスクのスタック容量とを含み、
前記割り込みハンドラ情報は、当該割り込みハンドラのシンボル名称と当該割り込みハンドラの起動方法とを含み、
前記サブルーチン情報は、当該サブルーチンのシンボル名称と、当該サブルーチンが呼び出すさらに下位のサブルーチンがある場合の前記下位のサブルーチンのサブルーチン情報を指し示すポインタとを含む、
実行可能コード生成装置。
【請求項１０】
請求項９において、
前記コンパイル部は、入力された前記アプリケーションソースコードを解析する場合に、前記アプリケーションソースコードを構成する複数の単位ソースコードのそれぞれについて、
前記単位ソースコードがタスクのシンボル名称を含むときは、前記リアルタイムオペレーティングシステム内の前記タスクに関するレジスタの退避処理と復帰処理のコードを除く、前記タスク用のコード展開を行い、
前記単位ソースコードが割り込みハンドラのシンボル名称を含むときは、前記アプリケーションソースコード内に前記割り込みハンドラ用の特殊命令が指定されているか否かを判断し、指定されている時には、当該割り込みハンドラの起動方法として、リアルタイムオペレーティングシステムを介さない直接起動を指定し、指定されていない時には、当該割り込みハンドラの起動方法として、リアルタイムオペレーティングシステムを介する起動を指定し、当該割り込みハンドラの起動方法を、生成する前記第１のリアルタイムオペレーティングシステム設定情報に包含し、
前記単位ソースコードがサブルーチンの呼び出し処理を含むときは、前記タスク情報において、呼び出されるサブルーチン情報を指し示すポインタを紐付け、当該タスク情報を、生成する前記第１のリアルタイムオペレーティングシステム設定情報に包含する、
実行可能コード生成装置。
【請求項１１】
コンピュータで実行されることによって、コンパイラとリアルタイムオペレーティングシステム設定情報テーブルとオプティマイザとデバッガとを含む実行可能コード生成装置として当該コンピュータを動作させ、リアルタイムオペレーティングシステムが組み込まれたアプリケーションをターゲットデバイス上で実行するための実行可能コードを生成させる、実行可能コード生成プログラムであって、
前記アプリケーションは、前記リアルタイムオペレーティングシステムのリソースをオブジェクトとして呼び出して利用可能であり、
前記リアルタイムオペレーティングシステム設定情報テーブルは、入力される条件設定情報によって初期化され、
前記コンパイラは、前記アプリケーションのアプリケーションソースコードと、前記リアルタイムオペレーティングシステムとが入力され、前記リアルタイムオペレーティングシステム設定情報テーブルに格納されるリアルタイムオペレーティングシステム設定情報と前記条件設定情報とに基づいて、前記アプリケーションソースコードをコンパイルし、前記リアルタイムオペレーティングシステムが組み込まれた当該アプリケーションの実行可能コードを出力する第１ステップを実行し、
前記デバッガは、前記実行可能コードを解析することによって、リアルタイムオペレーティングシステムトレース情報とプロファイル情報とを生成して、前記オプティマイザに供給する第２ステップを実行し、
前記オプティマイザは、前記リアルタイムオペレーティングシステムトレース情報と前記プロファイル情報と前記条件設定情報とに基づいて、前記前記リアルタイムオペレーティングシステム設定情報テーブルに格納される前記リアルタイムオペレーティングシステム設定情報を更新する第３ステップを実行し、
前記第１、第２及び第３ステップは繰り返し実行され、前記条件設定情報に規定される条件を満足したときに当該繰り返しが終了される、
実行可能コード生成プログラム。
【請求項１２】
請求項１１において、
前記条件設定情報には最適化条件が含まれ、
前記第３ステップにおいて前記オプティマイザは、前記リアルタイムオペレーティングシステムトレース情報と前記プロファイル情報を解析して、最適化条件を満足するか否かを判定し、満足しないときに、前記リアルタイムオペレーティングシステム設定情報テーブルに格納される前記リアルタイムオペレーティングシステム設定情報を更新し、満足したときには当該繰り返し処理が終了される、
実行可能コード生成プログラム。
【請求項１３】
請求項１２において、
前記最適化条件には、割り込みハンドラの許容可能な最悪応答時間の情報が含まれ、
前記リアルタイムオペレーティングシステム設定情報には当該割り込みハンドラの優先度を指定する情報が含まれ、
前記第３ステップにおいて前記オプティマイザは、前記リアルタイムオペレーティングシステムトレース情報を解析して、前記割り込みハンドラの応答時間を算出し、前記最悪応答時間以内であるという条件を満足するか否かを判定し、満足しないときに、前記リアルタイムオペレーティングシステム設定情報テーブルに格納される前記リアルタイムオペレーティングシステム設定情報における当該割り込みハンドラの前記優先度を上げる更新を行う、
実行可能コード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションソースから実行可能コードを生成する実行可能コード生成プログラム及び装置に関し、特にリアルタイムオペレーティングシステムを搭載したアプリケーションの構築に好適に利用できるものである。
【背景技術】
【０００２】
多くのアプリケーション、特に、組込み系のアプリケーションには、リアルタイムオペレーティングシステム（Real Time Operating System; 以下ＲＴＯＳと略記する）が組み込まれる。アプリケーションにＲＴＯＳを組み込む（「搭載する」ともいう）とは、アプリケーションプログラムから、ＲＴＯＳが管理する資源を呼び出して利用できるように構成することをいう。ＲＴＯＳを組み込んだアプリケーション開発を行う場合には、ＲＴＯＳが管理する資源の初期設定を行う必要がある。ＲＴＯＳが管理する資源には、例えばタスクや割り込みハンドラやデータの同期通信機能に使用するバッファなどがある。資源の初期設定の項目としては、例えばタスクの属性、タスクが使用するスタック容量、割り込みハンドラを起動する方法（ＲＴＯＳを介して起動するか、ＲＴＯＳを介さず直接起動するか）などが含まれる。アプリケーションプログラムから呼び出されるＲＴＯＳの資源は、オブジェクトと呼ばれ、上述のＲＴＯＳが管理する資源が呼び出される度に生成される。
【０００３】
ＲＴＯＳを搭載したアプリケーションの開発を行う者（以降、ユーザと称する）はＲＴＯＳの初期設定を行うために、アプリケーションソースとは別に、ＲＴＯＳ用の初期設定情報ファイルを作成する必要がある。ＲＴＯＳ用の初期設定情報ファイルは、システムコンフィギュレーションファイルと呼ばれる。アプリケーションソースは、コンパイラ、アセンブラ等により、オブジェクトコードに変換されるのと同様に、ＲＴＯＳ用の初期設定情報は、ＲＴＯＳコンフィギュレータによって、オブジェクトコードに変換される。ＲＴＯＳコンフィギュレータとは、システムコンフィギュレーションファイルが入力され、コンパイラのビルドの対象となるファイルに変換して出力するツールである。
【０００４】
特許文献１には、オブジェクト定義ファイルに定義されたオブジェクトの数を、アプリケーションプログラムの中で使用されるオブジェクトの数に合うように調整する、オブジェクト数調整装置が開示されている。オブジェクト定義ファイルにおけるオブジェクト数の定義は、アプリケーションプログラムを作成する前に想定された値であり、実際に使用されるオブジェクトの数との間で不整合が生じる場合があるとされる。不足した場合には、プログラムの実行ができなくなるなどのエラーが発生し、逆に過剰な場合には、必要以上のメモリ領域を消費する問題があるとされる（同文献の第０００７段落〜第０００９段落を参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−１４９１７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【０００７】
特許文献１に記載される技術は、アプリケーションソースプログラムとオブジェクト定義ファイルの間でオブジェクト数に過不足が生じた場合に、オブジェクト数を自動的に最適な値へ調整することによって、ＲＴＯＳを搭載したアプリケーションの構築を容易にしているが、最適化の対象としているのはオブジェクト数のみである。しかしながら、システムコンフィギュレーションファイルやオブジェクト定義ファイルに定義されるオブジェクトのコンフィギュレーション情報には、オブジェクト数の他に、割り込みハンドラの起動方法やタスクスタック容量など、多くの項目が存在している。そのため、オブジェクト数と同様に、他の項目についても、定義されたコンフィギュレーション情報と、実際にアプリケーションソースプログラムで使用されるオブジェクトとの間で不整合が生じる可能性があることがわかった。特に、ＲＴＯＳが搭載されたアプリケーションが有効である、組み込みシステムにおいては、その規模の拡大に伴って、オブジェクト数の調整のみでは効果が不十分となることがわかった。
【０００８】
そのため、システムコンフィギュレーションファイル等に定義されるオブジェクトのコンフィギュレーション情報を最適化するには、ユーザによる試行錯誤（トライアンドエラー）が必要であることがわかった。このような試行錯誤は、アプリケーションを構築する（開発する）上での設計の手戻りであり、開発効率を低下させる要因となっていることがわかった。
【０００９】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
一実施の形態によれば、下記の通りである。
【００１１】
すなわち、コンピュータで実行可能コード生成プログラムを実行することによって、ＲＴＯＳが組み込まれたアプリケーションをターゲットデバイス上で実行するための実行可能コードを生成する実行可能コード生成装置、またはその実行可能コード生成プログラムであって、以下のように構成される。
【００１２】
アプリケーションは、ＲＴＯＳのリソースをオブジェクトとして呼び出して利用可能である。実行可能コード生成装置は、システムコンフィギュレーション情報が入力されるＲＴＯＳ設定情報最適化部と、前記アプリケーションのアプリケーションソースコードが入力されるコンパイル部とを有する。ＲＴＯＳ設定情報最適化部は、入力されたシステムコンフィギュレーション情報に基づいて、使用可能なオブジェクトの属性情報を含むＲＴＯＳ資源生成情報を生成する。コンパイル部は、入力されたアプリケーションソースコードを解析することによって、そのアプリケーションが呼び出すオブジェクトの一覧を含むＲＴＯＳ設定情報を生成する。ＲＴＯＳ設定情報最適化部は、コンパイル部によって生成されたＲＴＯＳ設定情報とシステムコンフィギュレーション情報とに基づいて、最適化されたＲＴＯＳ設定情報を生成し、それを含むＲＴＯＳ設定情報ファイルを生成する。実行可能コード生成装置は、ＲＴＯＳ設定情報ファイルとアプリケーションソースコードとＲＴＯＳとに基づいて、前記アプリケーションの実行可能コードを生成する。
【発明の効果】
【００１３】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１４】
すなわち、対象のアプリケーションソースコードに基づいて、入力されるシステムコンフィギュレーション情報から最適化されたＲＴＯＳ設定情報が生成され、システムコンフィギュレーションファイルを適正化するための手戻りが不要となり、ＲＴＯＳが搭載されたアプリケーション開発の効率を向上することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施形態１の概要を示すブロック図である。
【図２】図２は、ターゲットデバイスの一構成例を示し、その中での実行可能コードの構成例を示す説明図である。
【図３】図３は、実施形態１のコンパイラの入出力を表す説明図である。
【図４】図４は、実施形態１のコンパイラの構成例を表す説明図である。
【図５】図５は、実施形態１のコンパイラの動作例を表すフローチャートである。
【図６】図６は、実施形態１のコンパイラが内部で管理するＲＴＯＳ設定情報テーブルの構成例を模式的に示す説明図である。
【図７】図７は、実施形態１のコンパイラによる構文解析の動作例を表すフローチャートである。
【図８】図８は、実施形態１のコンパイラによるタスクスタック容量の算出動作の一例を表すフローチャートである。
【図９】図９は、従来技術を適用した場合のアプリケーション構築の流れを模式的に示す説明図である。
【図１０】図１０は、実施形態１によるアプリケーション構築の流れを模式的に示す説明図である。
【図１１】図１１は、実施形態２の概要を示すブロック図である。
【図１２】図１２は、実施形態２の実行可能コード生成装置の動作例を表すフローチャートである。
【図１３】図１３は、実行可能コード生成プログラムがインストールされた実行可能コード生成装置の構成例を模式的に示す説明図である。
【発明を実施するための形態】
【００１６】
実施の形態について詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００１７】
〔実施形態１〕
図１は、実施形態１の概要を示すブロック図である。コンパイラ１は、実行可能コード生成装置の実施の一形態である。コンパイラ１は、アプリケーションソースコード２と、ＲＴＯＳのソースコード３と、オプション設定情報４と、システムコンフィギュレーションファイル５からＲＴＯＳ設定情報の初期値であるシステムコンフィギュレーション情報とを読み込み、ＲＴＯＳが搭載されたアプリケーションの実行可能コードを生成して、実行可能ファイル６に出力する。このとき、本実施形態１のコンパイラ１は、システムコンフィギュレーションファイル５から得られたＲＴＯＳ設定情報から、実行可能ファイル６に含まれるＲＴＯＳ設定情報の最適化を行う機構を有する。
【００１８】
ここで、実行可能コードとは、ターゲットデバイス上で所定のアプリケーションを機能させるために、インストールされ実行されるコードであり、命令コードとデータを含む。アプリケーションソースコード２は、このときのアプリケーションで実現される機能が、高級言語やアセンブリ言語等の中間言語または機械語（オブジェクトコード）或いはそれらの混在によって記述されたソースコードで、一般には複数のファイルに分けて記述されている。ＲＴＯＳ３は、アプリケーションに搭載されるＲＴＯＳのソースコードである。アプリケーションソースコード２と同様に、高級言語やアセンブリ言語等の中間言語または機械語（オブジェクトコード）或いはそれらの混在によって記述されたソースコードで、一般にはこれも複数のファイルに分けて記述されている。ここで、「搭載される」或いは「組み込まれる」とは、当該アプリケーションがＲＴＯＳの管理下で動作し、ＲＴＯＳが提供する種々の資源、例えば、タスクや割り込みハンドラなどを、サービスコールによって呼び出して利用することができるように構成することをいう。
【００１９】
図２は、ターゲットデバイス３０の一構成例を示し、その中での実行可能コードの構成例を示す説明図である。ターゲットデバイス３０は、ＲＴＯＳが搭載されたアプリケーションを実際に機能させる装置であって、例えば、システムＬＳＩ（Large Scale Integrated circuit）などの半導体装置である。ターゲットデバイス３０は、特に制限されないが例えば、加算器や乗算器が搭載され演算などを行うプロセッサ３１とメモリ３２と割り込みコントローラ３３を備え、それら互いにバス３４で接続される構成を採り、実行可能コードはメモリ３２に格納されている。図２は１個のプロセッサのみが搭載される簡略な構成例であるが、他の種々の機能モジュールをさらに備え、或いは、複数のプロセッサが混載され、キャッシュメモリをさらに備えてバスが階層化されるなどの複雑な構成を採ってもよい。メモリ３２は例えばフラッシュメモリなどの不揮発性メモリ、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）などの揮発性メモリ、或いはそれらの組合せで構成され、プロセッサ３１などと同一チップ上に実装されても、別チップに実装されても良い。
【００２０】
実行可能コードは、実行領域６１とデータ領域６２に格納されている。実行領域６１には、プロセッサ３１の命令コード列で構成される、アプリケーションコード６３とＲＴＯＳコード６４が含まれ、ＲＴＯＳコード６４はタスク管理部７０、割り込み管理部７１及び資源管理部７２等を含む。データ領域６２には、アプリケーションデータ６５とＲＴＯＳ設定情報６６が含まれる。アプリケーションデータ６５は、アプリケーションコード６３がプロセッサ３１で実行される際にアクセスされるデータであり、ＲＴＯＳ設定情報６６は、ＲＴＯＳコード６４がプロセッサ３１で実行される際に参照される情報である。ＲＴＯＳ設定情報６６には、タスクのシンボル名称とタスクのスタック容量などのタスク情報６７、割り込みハンドラのシンボル名称と割り込みの起動方法などの割り込み情報６８及び資源管理情報６９等が含まれる。タスク情報６７、割り込み情報６８及び資源管理情報６９は、それぞれ、タスク管理部７０、割り込み管理部７１及び資源管理部７２が、プロセッサ３１によって実行される際に参照される情報である。
【００２１】
本実施形態１によれば、ＲＴＯＳ設定情報６６が、コンパイラ１によって最適化される。ここで、ＲＴＯＳ設定情報の最適化とは、ＲＴＯＳ設定情報を、アプリケーションとＲＴＯＳの実際の動作に必要な資源に過不足なく調整することをいう。
【００２２】
コンパイラ１は、上述の通り、実行可能コード生成装置の実施の一形態である。ここでいう実行可能コード生成装置とは、ソースコードから実行可能コードを生成する装置であって、一般には、コンパイラとアセンブラとリンカを含んで構成される。コンパイラは高級言語で記述されたソースコードを解析して、アセンブリ言語に変換し、または直接オブジェクトコードを生成する。アセンブラはアセンブリ言語で記述されたソースコードからオブジェクトコード生成する。リンカは生成されたオブジェクトコードをまとめて、実行可能コードを生成する。本実施形態１では、実行可能コード生成装置全体をコンパイラ１と呼び、これに含まれる狭義のコンパイラをコンパイル部、アセンブラをアセンブル部、リンカをリンカ部と呼ぶ。コンパイラ１などの実行可能コード生成装置は、実行可能コード生成プログラムがインストールされたコンピュータによって実現される。
【００２３】
図１３は、実行可能コード生成プログラムがインストールされた実行可能コード生成装置の構成例を模式的に示す説明図である。実行可能コード生成装置４０として機能するコンピュータは、特に制限されないが例えば処理部４１と記憶部４２と入出力部４３とを備える。記憶部４２には、実行可能コード生成プログラム４４がインストールされており、これが実行されるに際してアクセスする、アプリケーションソースコード２、ＲＴＯＳ３、オプション設定情報４、システムコンフィギュレーション情報５も記憶部４２に格納され、生成された実行可能コード６も記憶部４２に格納される。記憶部４２は、ハードディスクドライブ（ＨＤＤ：Hard Disc Drive）や固体ドライブ（ＳＳＤ：Solid State Drive）で構成される。単一の記憶装置で構成される必要はなく、複数の記憶装置で構成されてもよい。複数の場合、それらが階層化されていても良い。実行可能コード生成プログラム４４は、記録媒体に格納されて提供される。記録媒体は、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc；登録商標）、ブルーレイディスク（Blue-Ray Disc；登録商標）、ＵＳＢ（Universal Serial Bus）メモリなどの有体物に限られず、インターネットなどのネットワーク上のパケットを含む、有線／無線を問わない通信媒体などの無体物であってもよい。
【００２４】
処理部４１は単数または複数のプロセッサを含んで構成され、インストールされた実行可能コード生成プログラム４４を実行する。実行に際して記憶部４２に格納される、アプリケーションソースコード２、ＲＴＯＳ３、オプション設定情報４、システムコンフィギュレーション情報５等にアクセスし、生成した実行可能コード６を記憶部４２に出力する。入出力部４３は、例えば、キーボード、マウスなどの入力デバイスと、ディスプレイやプリンタなどの出力デバイスの他、ネットワークポートなどの通信インターフェースや、ＣＤ、ＤＶＤなどの記憶媒体へのデータの書き込み・読み出しを行うドライブ装置などである。
【００２５】
実行可能コード生成装置４０として機能するコンピュータは、実行可能コード生成プログラム４４の他に、さらにシミュレータやデバッガ等がインストールされ、総合的なアプリケーション開発装置として機能するように構成されてもよい。
【００２６】
図３は、実施形態１のコンパイラ１の入出力を表す説明図である。コンパイラ１には、アプリケーションソースコード２と、ＲＴＯＳ３と、オプション設定情報４と、システムコンフィギュレーションファイル５とが入力され、生成された実行可能コードを含む実行可能ファイル６が出力される。システムコンフィギュレーションファイル５には、ＲＴＯＳ設定情報の初期値であるシステムコンフィギュレーション情報が含まれ、実行可能ファイル６には、アプリケーションコード６３、ＲＴＯＳコード６４、アプリケーションデータ６５、及び、最適化されたＲＴＯＳ設定情報６６が含まれる。
【００２７】
図４は、実施形態１のコンパイラ１の構成例を表す説明図である。オプション解析部１１、プリプロセス部１２、コンパイル部１３、アセンブル部１４、リンカ部１５、及び、ＲＴＯＳ設定情報最適化部１０から成る。
【００２８】
オプション解析部１１では、アプリケーション開発者（ユーザ）によって指定されたコンパイラのオプション設定情報４を入力として、コンパイラ１の最適化方針を決定する。決定した情報をプリプロセス部１２、コンパイル部１３、アセンブル部１４、リンカ部１５、及び、ＲＴＯＳ設定情報最適化部１０に対して出力する。
【００２９】
プリプロセス部１２では、ユーザによって直接指定されたアプリケーションソースコード２を対象として、マクロの置換処理を行う。置換処理が終わった後のアプリケーションソースコード２をコンパイル部１３またはアセンブル部１４に対して出力する。
【００３０】
コンパイル部１３では、プリプロセス部１２からの入力コード、および、アプリケーションソースコード２のうちユーザによって直接指定された高級言語（Ｃ言語等）で記述されたアプリケーションソースを対象として、オプション解析部１１から入力されたオプションの指定有無の情報とＲＴＯＳ設定情報の最適化部から入力されたＲＴＯＳ資源生成情報をもとにコンパイル処理を行う。ＲＴＯＳ生成資源情報には、アプリケーションソース内で指定可能なオブジェクトＩＤ値の一覧と、各オブジェクトの属性が含まれる。
【００３１】
コンパイル部１３は、アプリケーションソースのコンパイル中に、ＲＴＯＳ設定情報最適化部１０に対してＲＴＯＳ設定情報の最適化を行うために必要な情報を出力し、コンパイル処理の結果であるアセンブラ命令への変換が終了したアプリケーションソースはアセンブル部１４に対して出力する。
【００３２】
アセンブル部１４では、コンパイル部１３からの入力コード、およびプリプロセス部１２からの入力コード、および、アセンブラ言語で記述されたアプリケーションソースを対象として、オプション解析部１１から入力されたオプションの指定有無の情報とＲＴＯＳ設定情報最適化部１０から入力されたＲＴＯＳ資源生成情報をもとにアセンブル処理を行う。ＲＴＯＳ資源生成情報には、各オブジェクトの属性が含まれる。また、アセンブラ言語で記述されたアプリケーションソースは、アプリケーションソースコード２に含まれ、ユーザから直接指定されている。
【００３３】
アセンブル部１３はアプリケーションソースのアセンブル中に、ＲＴＯＳ設定情報最適化部１０に対してＲＴＯＳ設定情報の最適化を行うために必要な情報を出力する。オブジェクトコードへの変換が完了したアプリケーションソースは、リンカ部１５に対して出力する。
【００３４】
リンカ部１５では、アセンブル部１４から入力されたオブジェクトコード、およびユーザによって入力されたライブラリ形式のファイル（ＲＴＯＳが含まれる）を一つの実行可能コードに統合して、実行可能ファイル６に出力する。
【００３５】
ＲＴＯＳ設定情報最適化部１０では、ユーザによって入力されたシステムコンフィギュレーションファイル４の情報を基に、アプリケーションソース内で使用可能なオブジェクトＩＤ値の一覧、および各オブジェクトの属性情報を生成し、コンパイラ部１３およびアセンブラ部１４に対して出力する。また、コンパイル部１３およびアセンブル部１４から入力されたＲＴＯＳ設定情報の最適化を行うために必要な情報、およびオプション解析部１１から入力されたオプション指定有無の情報を基に、システムコンフィギュレーションファイル５に指定された初期のＲＴＯＳ設定情報を対象とする最適化を行う。ＲＴＯＳ設定情報には、割り込みハンドラの起動方法や、タスクと割り込みハンドラのシンボル名称、各タスクが使用するスタックの容量が含まれる。
【００３６】
ＲＴＯＳ設定情報最適化部１０は、ＲＴＯＳ設定情報の最適化を完了すると、最適化したＲＴＯＳ設定情報が記述されたソースコードを生成する。このファイルをＲＴＯＳ設定情報ファイルと呼ぶ。ＲＴＯＳ設定情報ファイルをコンパイルするために、コンパイル部１２及び／又はアセンブル部１３へ出力する。また、最適化済みのＲＴＯＳ設定情報をシステムコンフィギュレーションファイル５へ書き戻してもよい。システムコンフィギュレーションファイル５へ書き戻すことにより、ユーザは当該アプリケーションに最適なＲＴＯＳ設定情報を知ることができる。
【００３７】
図５は、実施形態１のコンパイラ１の動作例を表すフローチャートである。
【００３８】
ステップＳ５０１は、コンパイラのオプション解析部１１によって行われる処理である。ステップＳ５０１では、ユーザが指定したオプション（オプション設定情報４）を解析して、オプションの指定情報の有無を表すビットパターンを生成する。このビットパターンは、ステップＳ５０３においてはアプリケーションソースに対する最適化のオプションの指定有無を判別するために参照される。また、ステップＳ５０６ではＲＴＯＳ設定情報に関するオプションの指定有無を判別するために参照される。また、コンパイルの対象となるソースファイル名称もオプションにより指定される。コンパイルの対象となるアプリケーションソースファイル名称の一覧を生成し、ソースファイルテーブルとして保持する。
【００３９】
ステップＳ５０２は、ＲＴＯＳ設定情報最適化部１０によって行われる処理である。ステップＳ５０２では、システムコンフィギュレーションファイル５を読み込んで、ＲＴＯＳ設定情報テーブル（不図示）を生成する。システムコンフィギュレーションファイル５は特定の規格に沿って記述されるため、字句・構文解析を行って情報の抽出を行うことができる。
【００４０】
図６は、実施形態１のコンパイラ１が内部で管理するＲＴＯＳ設定情報テーブルＳ６００の構成例を模式的に示す説明図である。ＲＴＯＳ設定情報テーブルＳ６００はタスク情報Ｓ６０２と割り込みハンドラ情報Ｓ６０４へのポインタＳ６０１をもつ。タスク情報Ｓ６０２と割り込みハンドラ情報Ｓ６０４は構造体のテーブルとなる。ＲＴＯＳ設定情報テーブルＳ６００は、システムコンフィギュレーションファイル５に記述された初期値のＲＴＯＳ設定情報のうち、コンパイル時に必要な情報とコンパイル中に得られた情報で最適化が可能な情報のみが残されて保持される。つまり、システムコンフィギュレーションファイル５に冗長な情報が記述されている場合には、その冗長な情報は削除される。タスク情報Ｓ６０２としては、タスクのシンボル名称、タスクのスタック容量を取得して保持する。ＲＴＯＳが使用するスタックの容量は、システムコンフィギュレーションファイル５に指定されたタスクの属性より一意に決まる。このため、タスクのスタック容量には、ＲＴＯＳが使用する容量をあらかじめ格納しておく。また、サブルーチンのシンボル名称を保持したサブルーチン情報Ｓ６０３へのポインタを格納するための空間をもつ。また、割り込みハンドラの情報Ｓ６０４は、割り込みハンドラのシンボル名称と割り込みハンドラの起動方法を表すビットパターンを保持する空間を持つ。このＲＴＯＳ設定情報テーブルＳ６００は、図５のステップＳ５０３、ステップＳ５０６で用いられる。
【００４１】
図５についての説明に戻る。
【００４２】
ステップＳ５０３では、アプリケーションソースのコンパイルおよびアセンブルを行う。ステップＳ５０１で生成したソースファイルテーブルからファイル名称を取得し、コンパイルまたはアセンブルの対象とする。そして、アプリケーションソースのコンパイル時にステップＳ５０２で生成したＲＴＯＳ設定情報テーブルＳ６００を参照して、アプリケーションソースのエラー判定や、コード展開を行う。ＲＴＯＳが提供する機能（資源）は、一般的にはサービスコールと呼ばれるＡＰＩ（Application Programming Interface）を実行することによって、呼び出され利用される。サービスコールに指定されたオブジェクトのＩＤ値がＲＴＯＳ設定情報テーブルＳ６００に存在しない場合、アプリケーションソースとシステムコンフィギュレーションファイル間に不整合が生じているため、コンパイルエラーを出力してコンパイルを中断する。
【００４３】
ステップＳ５０３におけるコンパイラ１による構文解析について、さらに詳しく説明する。
【００４４】
図７は、コンパイラ１による構文解析の動作例を表すフローチャートである。
【００４５】
ステップＳ７００では、アプリケーションソースの構文解析を実施する。即ち、アプリケーションソースから、構文解析の単位ソースコードである、一般的には１行のソースコードを読み込む。ステップＳ７０１では関数のシンボル名称が定義されていた場合、ＲＴＯＳ設定情報テーブルＳ６００内のタスク情報にあるタスクのシンボル名称と一致しているものがないかを検索する。見つかった場合は、ステップＳ７０２へ進む。見つからなかった場合は、ステップＳ７０３へ進む。ステップＳ７０２では、ＲＴＯＳ内の処理と重複するレジスタの退避処理と復帰処理のコードを出力しないようにコード展開を行う。コード展開が完了すると、ステップＳ７００に戻る。
【００４６】
ステップＳ７０３では、読み込んだ単位ソースコード内に関数のシンボルが定義されていた場合に、ＲＴＯＳ設定情報テーブルＳ６００内の割り込みハンドラ情報にある割り込みハンドラのシンボル名称と一致しているものがないか検索する。見つかった場合はステップＳ７０４に進む。見つからなかった場合は、ステップＳ７０９へ進む。
【００４７】
ステップＳ７０４では、ステップＳ７０３で見つかった関数を割り込みハンドラとして定義するための特殊命令がアプリケーションソース内に記述されているかどうかを判定する。定義されていた場合はステップＳ７０５へ進む。定義されていなかった場合はステップＳ７０６へ進む。
【００４８】
ステップＳ７０５では、ＲＴＯＳ設定情報テーブルＳ６００内の割り込みハンドラ情報にある、割り込みの起動方法を「ＲＴＯＳを介して起動しない」に設定してステップＳ７０７へ進む。ステップＳ７０７では、コンパイラ１が、ＲＴＯＳを使用しない通常の割り込みハンドラに必要なコード展開を行う。
【００４９】
ステップＳ７０６では、ＲＴＯＳ設定情報テーブルＳ６００内の割り込みハンドラ情報にある、割り込みの起動方法を「ＲＴＯＳを介して起動する」に設定してステップＳ７０８へ進む。ステップＳ７０８では、コンパイラ１が、ＲＴＯＳ内の処理と重複するレジスタの退避/復帰処理などのコードを出力しないようにコード展開を行う。
【００５０】
ステップＳ７０９では、タスク処理内にサブルーチンの呼び出し処理があるか否かを判定する。コンパイラ１は、コンパイル時に内部状態を保持しており、タスクのシンボルをみつけた後、関数の終了処理をみつけるまでの間は、タスクのコンパイル中という状態を保持するようにしておく。構文解析の結果見つかったサブルーチン呼び出し処理がタスク処理内のものであるか否かはコンパイラ１の内部状態により判別する。タスク処理内のサブルーチン呼び出し処理であった場合はステップＳ７１０へ進む。そうでない場合はステップＳ７１１へ進む。
【００５１】
ステップＳ７１０では、見つかったタスク内のサブルーチンのシンボル情報を、ＲＴＯＳ設定情報テーブルＳ６００内のサブルーチン情報Ｓ６０３に登録する。そして、ＲＴＯＳ設定情報テーブルＳ６００内のタスク情報Ｓ６０２にあるサブルーチン情報のポインタがＮＵＬＬである場合は、サブルーチン情報へのポインタを、タスク情報Ｓ６０２のサブルーチン情報のポインタに対して登録する。タスク情報Ｓ６０２にサブルーチン情報のポインタが設定されている場合は、設定されているサブルーチン情報Ｓ６０３を取得する。取得したサブルーチン情報Ｓ６０３内にあるサブルーチン情報のポインタがＮＵＬＬである場合は、サブルーチン情報へのポインタをサブルーチン情報Ｓ６０３のポインタに対して登録する。サブルーチン情報Ｓ６０３に別のサブルーチン情報のポインタが設定されている場合は、設定されているサブルーチン情報Ｓ６０３を取得する。サブルーチンのシンボル名称を格納した新たなサブルーチン情報を登録できるまでこの処理を繰り返す。
【００５２】
ステップＳ７１１は、構文解析がファイルの終端（ＥＯＦ：End of File）まで完了したかどうかを判定する。終端まで完了した場合は、構文解析を終了する。そうでない場合は、次の行に進んでステップＳ７００に戻り、再度構文解析を行う。
【００５３】
図５についての説明に戻る。
【００５４】
ステップＳ５０３によって一つのファイルの構文解析が完了し、オブジェクトファイルへ変換し終わると、ステップＳ５０４へ進む。
【００５５】
ステップＳ５０４はコンパイラ１に入力されたアプリケーションソース２が全てアセンブルまで完了したか否かを判定する。ステップＳ５０１で生成したソースファイルテーブルをボトムまで参照したか否かで判定を行う。全て完了するまで繰り返しステップＳ５０３の処理を行う。
【００５６】
ステップＳ５０５は、ＲＴＯＳ設定情報テーブルＳ６００内にあるタスク情報Ｓ６０２を参照して、サブルーチン情報が存在するタスクのスタック容量を算出する。この動作について以下に詳しく説明する。
【００５７】
図８は、実施形態１のコンパイラ１によるタスクスタック容量の算出動作の一例を表すフローチャートである。
【００５８】
ステップＳ８００では、まずＲＴＯＳ設定情報テーブルＳ６００からタスク情報Ｓ６０２を取得する。ステップＳ８０１では、取得したタスク情報Ｓ６０２から、サブルーチンの呼び出し処理が存在するタスクが存在するか否かを、タスク情報の先頭から検索して判定する。サブルーチンの呼び出し処理が存在するか否かは、タスク情報Ｓ６０２のサブルーチン情報のポインタに有効なアドレス値が格納されているか否かで判定する。サブルーチンの呼び出し処理が存在するタスクが見つかった場合はステップＳ８０２へ進む。見つからなかった場合は、タスクスタックの算出処理を終了する。
【００５９】
ステップＳ８０２では、ＲＴＯＳ設定情報テーブルＳ６００からサブルーチンのシンボル名称を取得してステップＳ８０３へ進む。ステップＳ８０３では、全てのオブジェクトファイルを対象にして、サブルーチンのシンボル名称を検索する。ステップＳ８０４では全てのオブジェクトファイルを検索した結果、サブルーチンのシンボル名称が見つかったか否かを判定する。見つかった場合はステップＳ８０５へ進み、見つからなかった場合はステップＳ８００に戻る。
【００６０】
なお、全てのオブジェクトファイルを対象にして関数のシンボル名称が見つからない場合は、一般的なコンパイラと同様に、実行可能ファイルを生成する前にコンパイルエラーを出力して処理を中断する。ステップＳ８０５では、サブルーチンが見つかったオブジェクトファイル内のデバッグ情報を参照し、サブルーチンが使用するスタック容量を取得する。サブルーチンが使用するスタック容量は、オブジェクトファイルから取得したスタック容量を、コンパイラ１の内部で保持するスタック容量に累積的に加算して算出する。即ち、ステップＳ８０５で取得したサブルーチンが使用するスタック容量は、ステップＳ８０８が完了するまで一時的にコンパイラが内部で保持する。次にステップＳ８０６へ進む。
【００６１】
ステップＳ８０６では、サブルーチンが含まれるオブジェクトファイルを対象として、サブルーチン関数内にさらにサブルーチン呼び出しが存在するかを検索する。見つかった場合はステップＳ８０７へ進み、見つからなかった場合はステップＳ８０８へ進む。ステップＳ８０７では、ステップＳ８０６で見つかった新たなサブルーチンを検索対象として、全てのオブジェクトファイルを検索する。次にステップＳ８０４へ進む。
【００６２】
ステップＳ８０８では、タスク関数から呼び出されるサブルーチンが他に存在するかを判定する。ステップＳ８０２で取得したサブルーチン情報Ｓ６０３内にあるサブルーチン情報のポインタを取得し、有効なアドレス値が格納されているか否かで判定する。サブルーチン情報が存在する場合は、次の検索対象となるサブルーチンのシンボル名称を取得し、ステップＳ８０９へ進む。サブルーチン情報が存在しない場合はステップＳ８１０へ進む。
【００６３】
ステップＳ８０９では、ステップＳ８０８で取得したサブルーチンのシンボル名称に対して、再度全てのオブジェクトファイルを検索対象として、検索を開始する。次にステップＳ８０４へ進む。
【００６４】
ステップＳ８１０では、ＲＴＯＳ設定情報テーブルＳ６００内のタスク情報から、対象となるタスクのスタック容量を取得して、対象のタスクに登録されていたサブルーチン情報の中から、最大の使用するスタック容量をタスクのスタック容量に加算する。加算した値をＲＴＯＳ設定情報テーブルＳ６００内のタスクのスタック容量に格納する。これにより、ＲＴＯＳ設定情報テーブルＳ６００は更新される。
【００６５】
図５についての説明に戻る。
【００６６】
ステップＳ５０５のタスクのスタック容量を算出する処理が完了すると、ステップＳ５０６へ進む。ステップＳ５０６は、ステップＳ５０３からＳ５０５までで更新されたＲＴＯＳ設定情報テーブルＳ６００を基に、システムコンフィギュレーションファイル５の更新を行い、ＲＴＯＳ設定情報ファイルを生成する。ＲＴＯＳ設定情報ファイルは、システムコンフィギュレーションファイル５の情報をもとに、ＲＴＯＳが管理するデータの初期値を格納したファイルである。ＲＴＯＳ設定情報ファイルは中間ファイルであり、実行可能ファイルへと統合することが可能な形式に変換され出力される。
【００６７】
更新されたＲＴＯＳ設定情報データを基に、システムコンフィギュレーションファイル５の書き換えを行う。そして書き換えられたコンフィギュレーションファイル５を基にＲＴＯＳ設定情報ファイルに変換する。変換の実現方法としては、従来技術のＲＴＯＳ用コンフィギュレータをコンパイラ内部で起動することによって変換する方法や、ＲＴＯＳコンフィギュレータをコンパイラ内部に実装する方法がある。
【００６８】
ステップＳ５０７では、ステップＳ５０６で生成したＲＴＯＳ設定情報ファイルをコンパイルおよびアセンブルし、オブジェクトファイルへ置換する。
【００６９】
ステップＳ５０８では、ステップＳ５０３で生成したオブジェクトファイルと、ステップＳ５０７で生成したオブジェクトファイルを一つの実行可能コードに統合して実行可能ファイル６に出力する。
【００７０】
以上説明したように、本実施形態１の特徴は、コンパイラ１にＲＴＯＳ設定情報の最適化部１０を備える点である。コンパイラ１は、ＲＴＯＳ設定情報の最適化部１０により、システムコンフィギュレーションファイル５に記述されたＲＴＯＳ設定情報を読み込んで、アプリケーションソース２に記述されたタスクおよび割り込みハンドラのコンパイル時に不要なコードの出力を抑制する。また、コンパイラ１は、ＲＴＯＳ設定情報の最適化部１０により、アプリケーションソース２のコンパイルおよびアセンブル中に得られた情報を基にシステムコンフィギュレーションファイル５に記述されたＲＴＯＳ設定情報を最適化する。
【００７１】
これにより得られる効果を、図９、図１０を用いて説明する
図９は、従来技術を適用した場合のアプリケーション構築の流れを模式的に示す説明図である。
【００７２】
図９では、まずアプリケーションソース２とシステムコンフィギュレーションファイル５をユーザが作成する。システムコンフィギュレーションファイル５をＲＴＯＳコンフィギュレータ９０へ入力し、ＲＴＯＳ設定情報ファイル９１を生成する。ＲＴＯＳ設定情報ファイル９１とアプリケーションソース２をオブジェクト数調整装置９２に入力することによって、調整済みＲＴＯＳ設定情報ファイル９３を生成する。調整済みＲＴＯＳ設定情報ファイル９３とアプリケーションソース２とＲＴＯＳ３をコンパイラ９４に入力して、実行可能ファイル６を生成する。
【００７３】
従来技術は、システムコンフィギュレーションファイル５からＲＴＯＳ設定情報ファイル９１を生成する手段と、アプリケーションソース２から実行可能ファイル６を生成する手段とが互いに独立しているため、システムコンフィギュレーションファイル５内の設定項目がコンパイラ９４のコード展開に影響を与える場合であっても、アプリケーションソース２にも同じ設定が必要となる。このため、アプリケーションソース２とシステムコンフィギュレーションファイル５との間で設定が重複してしまう。また、アプリケーションソース２のコンパイルおよびアセンブル結果により得られる最適値を、ユーザが手動で設定しなければならない。
【００７４】
例えば、アプリケーションソース２とＲＴＯＳ３とシステムコンフィギュレーションファイル５から、オブジェクト数が調整された実行可能ファイル６を生成する、実効可能コード生成装置を、図中の破線で囲まれた領域に含まれる装置で構成したとする。このような場合に、例えばタスクが使用するスタック容量は、コンパイラ９４が実行可能ファイル６を出力するときに合せて出力されるマップファイル９５から取得することができる。しかしながら、ユーザはマップファイル９５を参照して、システムコンフィギュレーションファイル５に再設定を行わなければならない（図中の破線矢印）。オブジェクト数調整装置９２によるオブジェクト数の調整だけでは十分ではないからである。
【００７５】
図１０は、実施形態１によるアプリケーション構築の流れを模式的に示す説明図である。
【００７６】
アプリケーションソース２とシステムコンフィギュレーションファイル５をユーザが作成し、ＲＴＯＳ３とともに、コンパイラ１に入力する。コンパイラ１は、上述したように、コンパイル部１３とアセンブル部１４に加えてＲＴＯＳ情報最適化部１０を備える。コンパイル部１３とアセンブル部１４は、アプリケーションソース２からオブジェクトファイル７を生成するとともに、ＲＴＯＳ情報最適化部１０により最適化済みＲＴＯＳ設定情報ファイル８を生成する。オブジェクトファイル７と最適化済みＲＴＯＳ設定情報ファイル８とＲＴＯＳ３をリンカ部１５に入力し、実行可能ファイル６を生成する。
【００７７】
以上のように本実施形態１によれば、対象のアプリケーションソースコードに基づいて、入力されるシステムコンフィギュレーション情報から最適化されたＲＴＯＳ設定情報が生成され、システムコンフィギュレーションファイル５を適正化するための手戻りが不要となり、ＲＴＯＳが搭載されたアプリケーション開発の効率を向上することができる。
【００７８】
また、アセンブル部１４からも、アプリケーションによって実際に使用されるオブジェクトの情報が抽出されＲＴＯＳ設定情報を最適化するために必要な情報としてＲＴＯＳ設定情報最適化部１０に供給されるので、システムコンフィギュレーション情報に基づいたＲＴＯＳ設定情報が、より適切に最適化され、それに基づく実行可能コードが生成される。
【００７９】
さらに、図８を引用して説明したように、タスクスタックのサイズについても、アプリケーションによって実際に使用されるオブジェクトに基づいて適切な値が算出され、それに基づく実行可能コードが生成される。
【００８０】
本実施形態１では、システムコンフィギュレーションファイル５からＲＴＯＳ設定情報ファイル８を生成する手段と、アプリケーションソース２から実行可能ファイル６を生成する手段とを統合しているため、コンパイラ１はシステムコンフィギュレーションファイル５に記述されたＲＴＯＳ設定情報を参照してコード展開を行う。また、コンパイル結果より得られた情報をもとにＲＴＯＳ設定情報ファイルの最適化を行う。このためアプリケーションソース２とシステムコンフィギュレーションファイル５の間で重複していた設定項目を一か所にまとめることができる。
【００８１】
また、アプリケーションソース２のコンパイルおよびアセンブル結果より得られた情報と、システムコンフィギュレーションファイル５から得られたＲＴＯＳ設定情報を組み合わせることによって、ＲＴＯＳ設定情報ファイルの最適化を行うことが可能となる。このため、ユーザがコンパイル結果およびアセンブル結果を参照して、ＲＴＯＳ設定情報を見直して、システムコンフィギュレーションファイル５の設定を調整する手間（図９の破線矢印に相当）を省くことができる。
【００８２】
〔実施形態２〕
実施形態１では、静的な情報のみに基づいてＲＴＯＳ設定情報ファイルの最適化を行ったが、ＲＴＯＳ設定情報には、静的な情報だけでは十分に最適化されない項目が含まれている。例えば、タスクの優先度、割り込みハンドラの優先度、データの同期通信に使用するバッファのサイズなどがそれにあたる。これらの設定項目は、ユーザが開発したアプリケーションを開発環境で動作させてデバッグ情報を入手し、入手したデバッグ情報をもとに、改めてシステムコンフィギュレーションファイル５の設定を調整するような、試行錯誤を繰り返すことによって最適化される。このため、静的な情報だけでは十分に最適化されない項目が多い場合には、ＲＴＯＳが搭載されたアプリケーション開発の効率が十分に向上することができない恐れがある。
【００８３】
なお、静的な情報だけでは最適解が決められないのは、コンパイラの最適化オプションの組み合わせも同様である。従来技術では、アプリケーションを動かしてみて、動作結果の情報を収集し、収集した情報を基に、コンパイラの最適化オプションを決める、「プロファイルに基づく最適化」と呼ばれる最適化技術が知られている。この「プロファイルに基づく最適化」は速度やサイズ、消費電力といった観点で行われている。しかし、この従来の「プロファイルに基づく最適化」では、コンパイルオプションの最適化に留まり、ＲＴＯＳ設定情報を最適化することはできない。そこで、以下に説明する実施形態２では、動的な項目についてもＲＴＯＳ用の設定情報を最適化することにより、ＲＴＯＳを搭載したアプリケーションの開発効率をさらに向上することを目的とする。
【００８４】
図１１は、実施形態２の概要を示すブロック図である。実行可能コード生成装置１は、アプリケーションソースコード２と、ＲＴＯＳのソースコード３と、条件設定ファイル２６に格納されている条件設定情報を入力として、ＲＴＯＳが搭載されたアプリケーションの実行可能コードを生成して、実行可能ファイル６に出力する。また、システムコンフィギュレーションファイル５が合わせて出力されても良い。
【００８５】
実施形態１の実行可能コード生成装置の実施の一形態としてのコンパイラと同様に、図１３に示されるようなコンピュータ４０に、実行可能コード生成プログラムがインストールされ、そのプログラムを実行することによってコンピュータ４０を実行可能コード生成装置１として機能させることができる。そのようなコンピュータ４０の構成と動作は、図１３を引用して説明した実施形態１と同様であるので、説明を省略する。
【００８６】
アプリケーションソースコード２とＲＴＯＳのソースコード３は、実施形態１のアプリケーションソースコード２とＲＴＯＳのソースコード３と同様である。条件設定ファイル２６には、実施形態１ではシステムコンフィギュレーションファイル５に格納されていたＲＴＯＳ設定情報の初期値と、オプション設定情報４とが含まれ、さらに、オプティマイザ５に供給される、ＲＴＯＳ設定情報テーブルを最適化するために必要な前提条件が含まれる。ＲＴＯＳ設定情報テーブルを最適化するために必要な前提条件には、例えば、タスクや割り込みハンドラといったオブジェクトの数や、割り込みハンドラの許容可能な最悪応答時間の情報が含まれる。
【００８７】
実行可能コード生成装置１は、コンパイラ２１とＲＴＯＳ設定情報テーブル９とオプティマイザ２５とデバッガ２２とを備える。
【００８８】
コンパイラ２１は、実施形態１におけるコンパイラ１とは異なり、ＲＴＯＳ設定情報最適化部１０を含まず、例えば、オプション解析部１１、プリプロセス部１２、コンパイル部１３、アセンブル部１４及びリンカ部１５を備える。ＲＴＯＳ設定情報テーブル９は、実施形態１のＲＴＯＳ設定情報テーブルと同様である。コンパイラ２１には、アプリケーションソースコード２と、ＲＴＯＳ３とが入力される。コンパイラ２１は、ＲＴＯＳ設定情報テーブル９に格納されるＲＴＯＳ設定情報と条件設定ファイル２６に条件設定情報として格納されるオプション設定情報とに基づいて、アプリケーションソースコード２をコンパイルし、ＲＴＯＳが組み込まれた当該アプリケーションの実行可能コードを生成して、実行可能ファイル６に出力する。
【００８９】
実行可能コード生成装置１は、生成された実行可能コードをデバッガ２２に入力して、デバッガ２２によって解析することにより、プロファイル情報２３とＲＴＯＳトレース情報２４とを得る。得られたプロファイル情報２３とＲＴＯＳトレース情報２４とがオプティマイザ２５に入力され、オプティマイザ２５は、条件設定情報のうち、ＲＴＯＳ設定情報テーブルを最適化するために必要な前提条件を参照して、ＲＴＯＳ設定情報テーブル９に格納されるＲＴＯＳ設定情報を更新する。
【００９０】
実行可能コード生成装置１は、初めに、条件設定ファイル２６に含まれるＲＴＯＳ設定情報の初期値を、ＲＴＯＳ設定情報テーブル９に設定する。その後、コンパイラ２１による実行可能コードの生成、デバッガ２２によるプロファイル情報２３とＲＴＯＳトレース情報２４の生成、及び、オプティマイザ２５によるＲＴＯＳ設定情報の更新を行う。さらに、更新されたＲＴＯＳ設定情報を参照して、次の、コンパイラ２１による実行可能コードの生成以下の上記処理を繰り返し、条件設定ファイル２６に規定される条件を満足したときに当該繰り返しが終了される。
【００９１】
条件設定ファイル２６に規定される条件が満足されたときには、実行可能ファイル６は実施形態１の図３に示したのと同様に、最適化されたＲＴＯＳ設定情報６６を含む。このときのＲＴＯＳ設定情報６６は、実施形態１と同様の静的な解析によって最適化されるのに加えて、実際の動作に応じた動的な条件についても最適化される。また、このときのＲＴＯＳ設定情報テーブル９に格納されている、最適化されたＲＴＯＳ設定情報は、システムコンフィギュレーションファイル５に出力されても良い。
【００９２】
これにより、静的な解析だけでは不十分な条件に関しても、ＲＴＯＳ設定情報を最適化することができ、ユーザが試行錯誤によって最適化する必要がなくなり、ＲＴＯＳが搭載されたアプリケーション開発の効率を向上することができる。
【００９３】
図１１では、実行可能ファイル６は実行可能コード生成装置１に含まれ、システムコンフィギュレーションファイル５は実行可能コード生成装置１から出力される形態を例示したが、これは一例に過ぎない。後述の繰り返しの期間には、実行可能ファイル６はコンパイラ２１からデバッガ２２に受け渡される、内部情報であるので、実行可能コード生成装置１に含まれる形態としたが、一旦、実行可能コード生成装置１から出力されて、デバッガ２２に再入力されても良い。システムコンフィギュレーションファイル５についても同様である。ＲＴＯＳ設定情報テーブル９を実行可能コード生成装置１に保持される内部情報として記載したが、システムコンフィギュレーションファイル５に格納され、更新されるデータとして実装してもよい。ＲＴＯＳトレース情報２４とプロファイル情報２３についても同様である。これらもデバッガ２２から出力され、オプティマイザ２５に再入力されてもよい。
【００９４】
実行可能コード生成装置１の動作について説明する。実使用状態において、ＲＴＯＳは、ＲＴＯＳが管理する処理単位や資源に変化があったとき、事象と、発生したタイミングの情報を含むトレース・データをトレース用のバッファに格納する。ＲＴＯＳトレース情報２４は、実行可能コードをデバッガ２２に入力して得られる、バッファから取り出したトレース・データから構成される。ＲＴＯＳトレース情報２４を解析することにより、タスクの実行時間や割り込みハンドラの応答時間を算出することができる。また、ＲＴＯＳが管理しない処理関数や割り込みについては、プロファイル情報２３から実行時間および応答時間を算出することができる。
【００９５】
図１２は、実施形態２の実行可能コード生成装置１の動作例を表すフローチャートである。
【００９６】
ステップＳ１２００では、ユーザが条件設定ファイル２６に設定した、最適化の条件と終了条件を、実行可能コード生成装置１に入力する。ステップＳ１２０１では、入力された条件設定ファイル２６に基づいて、ＲＴＯＳ設定条件テーブル９を初期化する。
【００９７】
ステップＳ１２０２では、コンパイラ２１がアプリケーションソース２のコンパイルを実行し、実行可能ファイル６を生成する。このとき、条件設定ファイル２６からは、コンパイル等のオプション設定情報が入力され、また、ＲＴＯＳ設定条件テーブル９のＲＴＯＳ設定条件が参照されてＲＴＯＳ３が組み込まれる。即ち、生成される実行可能ファイル６には、図３に示したのと同様に、ＲＴＯＳコードとアプリケーションコードとアプリケーションデータとＲＴＯＳ設定情報が含まれる。ただし、この時点におけるＲＴＯＳ設定情報は初期状態であって、最適化はされていない。
【００９８】
ステップＳ１２０３では、デバッガ２２で実行可能ファイル６を解析し、ＲＴＯＳトレース情報２４とプロファイル情報２３を生成する。デバッガ２２は、図２に例示されるようなターゲットデバイス３０を対象とした、シミュレータまたは実デバイスに、内部状態を監視するモニタ機能を付加することによって実現される。
【００９９】
ステップＳ１２０４ではオプティマイザ２５がＲＴＯＳトレース情報２４とプロファイル情報２３を解析する。オプティマイザ２５は、条件設定ファイル２６から最適化の条件を読み込む。最適化の条件として、割り込みハンドラの最悪応答時間や、タスクの許容可能なｒｅａｄｙ−ｔｏ−ｒｕｎ時間などがある。ＲＴＯＳトレース情報２４とプロファイル情報２３の解析が完了すると、ステップＳ１２０５へ進む。
【０１００】
ステップＳ１２０５では、ＲＴＯＳトレース情報２４とプロファイル情報２３から算出したタスクのｒｅａｄｙ−ｔｏ−ｒｕｎ時間および割り込みハンドラの応答時間が、最適化の条件に収まっているか否かを判定する。最適化の条件に収まっている場合は、実行可能ファイル６の生成処理を完了する。最適化の条件に収まっていない場合は、ステップＳ１２０６へ進む。
【０１０１】
ステップＳ１２０６では、条件設定ファイル２６に指定された終了条件を満たすか否かを判定する。終了条件としては、例えばステップＳ１２０２から、ステップＳ１２０７までのループを繰り返した回数などが指定される。終了条件を満たした場合は、実行可能ファイル６の生成処理を完了する。満たさない場合は、ステップＳ１２０７へ進む。
【０１０２】
ステップＳ１２０７では、ＲＴＯＳ設定情報テーブル９の更新を行う。例えば、ある特定の割り込みハンドラが最適化の条件として指定された最悪応答時間を満たさない場合、その割り込みハンドラの優先度を引き上げる。オプティマイザ２５によって最適化のために更新したＲＴＯＳ設定情報（ＲＴＯＳ設定情報テーブル９）を、コンパイラ２１に対して出力してステップＳ１２０２へ戻る。
【０１０３】
これにより、ＲＴＯＳ設定情報テーブル９に格納されるＲＴＯＳ設定情報は、条件設定ファイル２６に指定された最適化の条件を満足するまで、更新を繰り返されることとなり、繰り返しのループ処理が完了したときには、最適化されたＲＴＯＳ設定情報（ＲＴＯＳ設定情報テーブル９）に基づいて生成された実行可能コードが生成されており、実行可能ファイル６に出力される。ステップＳ１２０６は、最適化に失敗したときの救済である。例えば所定回数の繰り返しを経ても条件設定ファイル２６に指定された最適化の条件を満足することができない場合に、繰り返しを強制的に中止するための判断を行っている。このような場合には、ＲＴＯＳトレース情報２４とプロファイル情報２３を出力して、ユーザによる解析に供することができる。
【０１０４】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【符号の説明】
【０１０５】
１  コンパイラ（実行可能コード生成装置）
２  アプリケーションソースコード
３  リアルタイムオペレーティングシステム（ＲＴＯＳ）
４  オプション設定情報
５  システムコンフィギュレーションファイル
６  実行可能ファイル
７  オブジェクトファイル
８  最適化済みＲＴＯＳ設定情報ファイル
９  ＲＴＯＳ設定情報テーブル
１０  ＲＴＯＳ設定情報最適化部
１１  オプション解析部
１２  プリプロセス部
１３  コンパイル部
１４  アセンブル部
１５  リンカ部
２１  コンパイラ
２２  デバッガ
２３  プロファイル情報
２４  ＲＴＯＳトレース情報
２５  オプティマイザ
２６  条件設定ファイル
３０  ターゲットデバイス
３１  プロセッサ
３２  メモリ
３３  割り込みコントローラ
３４  バス
４０  実行可能コード生成装置
４１  処理部
４２  記憶部
４３  入出力部
４４  コンパイラ実行コード
６０  実行可能コード
６１  実行領域
６２  データ領域
６３  アプリケーションコード
６４  ＲＴＯＳコード
６５  アプリケーションデータ
６６  最適化済みＲＴＯＳ設定情報
６７  タスク情報
６８  割り込み情報
６９  資源管理情報
７０  タスク管理部
７１  割り込み管理部
７２  資源管理部
９０  ＲＴＯＳコンフィギュレータ
９１  ＲＴＯＳ設定情報ファイル
９２  オブジェクト数調整装置
９３  調整済みＲＴＯＳ設定情報ファイル
９４  コンパイラ
９５  マップファイル
【図１】
2017091070.tif 000003
【図２】
2017091070.tif 000004
【図３】
2017091070.tif 000005
【図４】
2017091070.tif 000006
【図５】
2017091070.tif 000007
【図６】
2017091070.tif 000008
【図７】
2017091070.tif 000009
【図８】
2017091070.tif 000010
【図９】
2017091070.tif 000011
【図１０】
2017091070.tif 000012
【図１１】
2017091070.tif 000013
【図１２】
2017091070.tif 000014
【図１３】
2017091070.tif 000015