(57)【要約】【課題】プログラムに基づく制御装置による制御を実際に行なっている間でも、前記プログラムに基づくメモリアクセスの順序の整合性についてプログラム実行中に判断させることを可能とするプログラム作成装置、プログラム作成方法、及びコンピュータプログラムを提供する。【解決手段】プログラム作成装置１の制御部１０は自動的に、プログラムのソースコード３０の入力と、ソースコード３０に対応する検出対象コードの順序情報及び位置情報を含むテーブル３１を受け付け、テーブル３１に基づきソースコード３０から検出対象コードを検出し、前又は後に特定のコードを挿入し、挿入後のソースコード４０及び判定用情報を含むテーブル４１を出力する。【選択図】図１
2013210916.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのソースコードの入力を受け付けるソース受付手段と、受け付けたソースコードに、特定のコードが実行されたことを出力させるコードを挿入する挿入手段と、該挿入手段によるコード挿入後のソースコードを出力する手段とを備えるプログラム作成装置において、
受け付けるソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力を受け付けるテーブル受付手段と、
該テーブル受付手段が受け付けたテーブルに基づき、受け付けたソースコードから対象コードを検出する検出手段とを備え、
前記挿入手段は、前記検出手段が検出した対象コードの前又は後に、実行された場合に前記対象コードの識別情報を出力させるコードを挿入するようにしてあること
を特徴とするプログラム作成装置。
【請求項２】
前記テーブルには、前記対象コードのプログラム中の位置を特定する位置情報が含まれており、
前記検出手段は、前記テーブル受付手段が受け付けた前記テーブル中の前記位置情報に基づき対象コードを検出するようにしてあること
を特徴とする請求項１に記載のプログラム作成装置。
【請求項３】
挿入したコード及び対象コードを含むコード列の前に、割り込み禁止処理に対応するコードを挿入し、前記コード列の後ろに割り込み許可処理に対応するコードを更に挿入する手段を更に備えること
を特徴とする請求項１又は２に記載のプログラム作成装置。
【請求項４】
前記挿入手段が挿入したコードが出力する識別情報の順序を含む判定用情報を出力する手段を更に備えること
を特徴とする請求項１乃至３のいずれかに記載のプログラム作成装置。
【請求項５】
プログラムのソースコードを入出力する機能を有するコンピュータが、入力されたソースコードに、特定のコードが実行されたことを出力させるコードを挿入し、挿入後のソースコードを出力するプログラム作成方法において、
入力されたソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力を受け付け、
入力されたテーブルに基づき、入力されたソースコードから対象コードを検出し、
検出した対象コードの前又は後に、実行された場合に前記対象コードの識別情報を出力させる特定のコードを挿入する
ことを特徴とするプログラム作成方法。
【請求項６】
プログラムのソースコードを入出力するコンピュータに、入力されたソースコードに、特定のコードが実行されたことを出力させるコードを挿入させ、挿入後のソースコードを出力させるコンピュータプログラムにおいて、
前記コンピュータに、
入力されたソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力を受け付けるステップと、
入力されたテーブルに基づき、入力されたソースコードから対象コードを検出するステップと、
検出された対象コードの前又は後に、実行された場合に前記対象コードの識別情報を出力させるコードを挿入するステップと
を実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行されるプログラム中に監視コードを挿入しておき、実行中に実行順序の正誤を判定装置に判定させることを可能とするプログラムを作成するプログラム作成装置に関する。特に、メモリアクセスの順序の正誤を判定させることを可能とするプログラム作成装置、プログラム作成方法、及び前記プログラム作成装置を実現するコンピュータプログラムに関する。
【背景技術】
【０００２】
マイクロプロセッサに読み込ませるコンピュータプログラムに監視コードを予め挿入しておき、監視コードに基づく処理が行なわれた順序を監視することにより、組込機器にて実行される処理の順序が正しいか否かを判断する監視機能が実現されている。
【０００３】
なお、監視コードは、作業者により手作業で挿入されることが一般的であったが、特許文献１には、監視対象のコンピュータプログラムを入力し、自動的に、プログラムから監視対象のモジュールを検出し、モジュールに対する監視用コードを生成して挿入して出力するプログラミング装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１５９１１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
組込機器にて、正誤を判定すべきものとして、メモリへの書き込み及び読み出しの順序、即ちメモリアクセスの順序がある。メモリアクセスの実行順序に関しては、例えば、何も書き込まれていない状態で読み出しがされたり、読み出されるべき情報が読み出される前に他の情報で上書きされたりなどの事態を回避すべきという制約が特に存在する。
【０００６】
特許文献１に開示されているプログラミング装置では、メモリアクセス単位での実行順序の監視は考慮しておらず、モジュール単位で、順序の正しさを監視している。メモリアクセスを含む複数の処理からなるモジュール単位の実行順位は正しい（つまり、プログラム設計者側の意図通り）場合であっても、メモリアクセスの実行順序は、誤っている（つまりプログラム設計者側の意図と反する）ときもあり得る。
【０００７】
割り込み処理が発生するようなプログラムでは、割り込み処理に基づくメモリアクセスの順序は更に整合性が求められるから、どの時点でいずれのメモリアクセスが実行されたかを特定できるようにプログラムを作成することが求められる。
【０００８】
本発明は、斯かる事情に鑑みてなされたものであり、プログラムに基づく制御装置による制御を実際に行なっている間でも、前記プログラムに基づくメモリアクセスの順序の整合性についてプログラム実行中に判断させることを可能とするプログラム作成装置、プログラム作成方法、及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係るプログラム作成装置は、プログラムのソースコードの入力を受け付けるソース受付手段と、受け付けたソースコードに、特定のコードが実行されたことを出力させるコードを挿入する挿入手段と、該挿入手段によるコード挿入後のソースコードを出力する手段とを備えるプログラム作成装置において、受け付けるソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力を受け付けるテーブル受付手段と、該テーブル受付手段が受け付けたテーブルに基づき、受け付けたソースコードから対象コードを検出する検出手段とを備え、前記挿入手段は、前記検出手段が検出した対象コードの前又は後に、実行された場合に前記対象コードの識別情報を出力させるコードを挿入するようにしてあることを特徴とする。
【００１０】
本発明に係るプログラム作成装置は、前記テーブルには、前記対象コードのプログラム中の位置を特定する位置情報が含まれており、前記検出手段は、前記テーブル受付手段が受け付けた前記テーブル中の前記位置情報に基づき対象コードを検出するようにしてあることを特徴とする。
【００１１】
本発明に係るプログラム作成装置は、挿入したコード及び対象コードを含むコード列の前に、割り込み禁止処理に対応するコードを挿入し、前記コード列の後ろに割り込み許可処理に対応するコードを更に挿入する手段を更に備えることを特徴とする。
【００１２】
本発明に係るプログラム作成装置は、前記挿入手段が挿入したコードが出力する識別情報の順序を含む判定用情報を出力する手段を更に備えることを特徴とする。
【００１３】
本発明に係るプログラム作成方法は、プログラムのソースコードを入出力する機能を有するコンピュータが、入力されたソースコードに、特定のコードが実行されたことを出力させるコードを挿入し、挿入後のソースコードを出力するプログラム作成方法において、入力されたソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力を受け付け、入力されたテーブルに基づき、入力されたソースコードから対象コードを検出し、検出した対象コードの前又は後に、実行された場合に前記対象コードの識別情報を出力させる特定のコードを挿入することを特徴とする。
【００１４】
本発明に係るコンピュータプログラムは、プログラムのソースコードを入出力するコンピュータに、入力されたソースコードに、特定のコードが実行されたことを出力させるコードを挿入させ、挿入後のソースコードを出力させるコンピュータプログラムにおいて、前記コンピュータに、入力されたソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力を受け付けるステップと、入力されたテーブルに基づき、入力されたソースコードから対象コードを検出するステップと、検出された対象コードの前又は後に、実行された場合に前記対象コードの識別情報を出力させるコードを挿入するステップとを実行させることを特徴とする。
【００１５】
本発明では、実行順序の正誤の判定対象となるプログラムのソースコードが入力された場合、該ソースコード中から検出されるべきメモリアクセスに関する対象コードの識別情報を含むテーブルの入力が受け付けられる。当該テーブルに基づき、入力されたソースコードから、検出対象である対象コードが検出され、検出された対象コードの前又は後に、実行された場合に対象コードの識別情報が出力されるコードが挿入される。
【００１６】
本発明では、プログラムのソースコードに対応して入力されるテーブルには、検出すべきメモリアクセスに関する対象コードの位置情報が含まれている。これにより、対象コードを容易に検出することが可能となる。
【００１７】
本発明では、挿入したコードと検出対象のコードとの間での割り込みが禁止される。これにより、対象コードの識別情報が出力されるタイミングと、実際に検出対象のコードが実行されるタイミングとの間に他のメモリアクセスに関する処理が行なわれることを防止することが可能となる。
【００１８】
本発明では、挿入したコードが出力する識別情報に基づき、順序の正誤の判定を行なうための判定用情報が、挿入後のソースコードと共に出力される。
【発明の効果】
【００１９】
本発明による場合、プログラム作成装置により作成されたプログラムを実行した場合、検出対象の対象コードが実行される都度、当該対象コードの前後に挿入されている検出対象コードの識別情報が出力される。正誤の判定装置にて、識別情報が出力される順序が正しいか否かにより、実行順序の判定を行なうことが可能である。作業者は、対象となるプログラムに対応するテーブルを用意して対象プログラムのソースコードと同様に、当該テーブルを入力することにより自動的に、監視機能を有するソースコードを得ることができる。
【図面の簡単な説明】
【００２０】
【図１】実施の形態１におけるプログラム作成装置の構成を示すブロック図である。
【図２】実施の形態１におけるプログラム作成装置による検出処理の手順の一例を示すフローチャートである。
【図３】実施の形態１におけるプログラム作成処理の手順の一例を示すフローチャートである。
【図４】入力されるソースコードの内容例の一部を示す説明図である。
【図５】入力されるテーブルの内容例を示す説明図である。
【図６】図４に示した各コードに対して規定された順序を模式的に示す模式図である。
【図７】出力されるソースコードの内容例の一部を示す説明図である。
【図８】出力されるテーブルの内容例を示す説明図である。
【図９】順序の正誤判定を行なう制御装置３の構成を示すブロック図である。
【図１０】制御装置で実行される順序正誤判定の処理手順の一例を示すフローチャートである。
【図１１】入力される他のソースコードの内容例の一部を示す説明図である。
【図１２】図１１のソースコードに対応して入力されるテーブルの内容例を示す説明図である。
【図１３】図１１に示した各コードに対して規定された順序を模式的に示す模式図である。
【図１４】図１１に示したソースコードに対応して出力されるソースコードの内容例の一部を示す説明図である。
【図１５】図１２に示したテーブルに対応して出力されるテーブルの一部を示す説明図である。
【図１６】入力される他のソースコードの内容例の一部を示す説明図である。
【図１７】図１６のソースコードに対応して入力されるテーブルの内容例を示す説明図である。
【図１８】図１６に示した各コードに対して規定された順序を模式的に示す模式図である。
【図１９】入力される他のソースコードの内容例の一部を示す説明図である。
【図２０】図１９のソースコードに対応して入力されるテーブルの内容例を示す説明図である。
【図２１】出力されるソースコードの内容例の一部を示す説明図である。
【図２２】実施の形態２におけるプログラム作成装置による検出処理の手順の一例を示すフローチャートである。
【図２３】実施の形態２におけるプログラム作成処理の手順の一例を示すフローチャートである。
【図２４】実施の形態２におけるソースコードに対応して入力されるテーブルの内容例を示す説明図である。
【図２５】実施の形態２にて出力されるソースコードの内容例を示す説明図である。
【発明を実施するための形態】
【００２１】
以下、本発明をその実施の形態を示す図面に基づき具体的に説明する。
【００２２】
（実施の形態１）
図１は、実施の形態１におけるプログラム作成装置１の構成を示すブロック図である。プログラム作成装置１は、例えばパーソナルコンピュータであり、制御部１０、記憶部１１、一時記憶部１２、入出力部１３を備えている。
【００２３】
制御部１０は、ＣＰＵ（Central Processing Unit ）を用いる。制御部１０は、記憶部１１に記憶されているプログラム作成用プログラム１Ｐを読み出し、後述する各処理を実行することにより、パーソナルコンピュータをプログラム作成装置１として機能させる。
【００２４】
記憶部１１は、ハードディスク又はＳＳＤ（Solid State Drive ）を用いる。記憶部１１には、プログラム作成用プログラム１Ｐが予め記憶されてある。なおプログラム作成用プログラム１Ｐは、可搬型の記憶媒体２に記憶されていたものを制御部１０が入出力部１３により入力して記憶部１１に記憶したものであってもよい。
【００２５】
一時記憶部１２は、ＳＲＡＭ（Static Random Access Memory ）又はＤＲＡＭ（Dynamic RAM ）等のＲＡＭを用いる。一時記憶部１２は、制御部１０の処理によって発生する情報を一時的に記憶する。
【００２６】
入出力部１３は、情報の入出力を実現するインタフェースである。制御部１０は、入出力部１３を介して外部の記憶装置に記憶されているプログラムのソースコード３０及びテーブル３１を入力し（読み出し）、プログラムのソースコード４０及びテーブル４１を外部へ出力する（書き込む）。なお、制御部１０は、ソースコード４０及びテーブル４１に関しては記憶部１１に出力するようにしてもよい。なお入出力部１３は、キーボード、マウス、ディスプレイとのインタフェースであってもよい。制御部１０は、キーボード又はマウスによりソースコード３０及びテーブル３１を入力し、ディスプレイへソースコード４０及びテーブル４１を出力するようにしてもよい。また、入出力部１３は、ＵＳＢ（Universal Serial Bus）又はＬＡＮ等の通信機能であって、制御部１０が通信機能により外部の記憶装置との間でソースコード３０，４０及び各テーブル３１，４１を入出力するようにしてもよい。
【００２７】
このように構成されるプログラム作成装置１は、プログラム作成用プログラム１Ｐに基づき、制御部１０が記憶部１１、一時記憶部１２、及び入出力部１３と協働することにより、ソースコード３０の入力、ソースコード３０からのメモリアクセスに関する対象コードの検出、判定用の特定のコードの挿入、及び挿入後のソースコード４０の出力など、各機能を実現して、以下に説明する処理を実行する。
【００２８】
まず制御部１０は、入力したソースコード３０から、メモリアクセスに関する対象コードの検出処理を行なう。図２は、実施の形態１におけるプログラム作成装置１による検出処理の手順の一例を示すフローチャートである。
【００２９】
制御部１０は、ソースコード３０の入力を入出力部１３により受け付けて記憶部１２に記憶し（ステップＳ１０１）、入力されたソースコード３０内の検出対象コードの位置情報及び順序情報を含むテーブル３１の入力を受け付け、記憶部１１に記憶する（ステップＳ１０２）。テーブル３１に含まれる位置情報及び順序情報については後述にて詳細を説明する。
【００３０】
制御部１０は、テーブル３１に含まれる検出対象コードの位置情報を１つ選択し（ステップＳ１０３）、選択した位置情報に基づき、テキスト検索機能によってソースコード３０から検出対象コードを検出する（ステップＳ１０４）。制御部１０は、検出した検出対象コードのソースコード３０内での位置を特定する（ステップＳ１０５）。具体的には、制御部１０は、ソースコード３０中の何行目などと特定する。制御部１０は、ステップＳ１０３にて選択した位置情報に対応する順序情報をテーブル３１から取得し（ステップＳ１０６）、ステップＳ１０５で特定した位置の情報と、取得した順序情報とを対応付けて一時記憶部１２に一時的に記憶する（ステップＳ１０７）。制御部１０は、全ての検出対象コードについて処理を行なったか否かを判断する（ステップＳ１０８）。
【００３１】
制御部１０は、全ての検出対象コードについて処理を行なったと判断した場合（Ｓ１０８：ＹＥＳ）、各検出対象コードについてステップＳ１０７にて一時的に記憶した位置の情報及び順序情報の対応を出力する（ステップＳ１０９）。ステップＳ１０９にて制御部１０は、一時記憶部１２に一時的に記憶しておいた位置の情報と順序情報とを、記憶部１１にファイルとして記憶してもよい。また、制御部１０は入出力部１３からディスプレイに出力するなどしてもよい。
【００３２】
制御部１０は、ステップＳ１０８にて未処理の検出対象コードが存在すると判断した場合（Ｓ１０８：ＮＯ）、処理をステップＳ１０３へ戻し、次の検出対象コードを選択し、ステップＳ１０４〜１０９の処理を実行する。
【００３３】
次に制御部１０は、図２に示した検出処理によって出力された情報に基づき、特定のコードを挿入したプログラムのソースコード４０を作成し、判定用情報を含むテーブル４１と共に出力する。図３は、実施の形態１におけるプログラム作成処理の手順の一例を示すフローチャートである。
【００３４】
制御部１０は、入力してあるソースコード３０と、テーブル３１とを記憶部１１から取得し（ステップＳ２０１）、更に、当該ソースコード３０について検出処理により出力された位置の情報と順序情報とを取得する（ステップＳ２０２）。
【００３５】
制御部１０は、取得したテーブル３１から順序情報を１つ選択する（ステップ２０３）。制御部１０は、選択した順序情報に含まれる検出対象コードの系列及び識別情報を特定し（ステップＳ２０４）、実行された場合に特定した系列及び識別情報を出力させる特定のコードを生成する（ステップＳ２０５）。制御部１０は、ステップＳ２０３で選択した順序情報に対応する検出対象コードのソースコード３０内での位置の情報を特定し（ステップＳ２０６）、特定した位置の情報が示すソースコード３０内の位置の前又は後にステップＳ２０５で生成した特定のコードを挿入する（ステップＳ２０７）。そして制御部１０は、取得したテーブル３１の全ての順序情報について処理を行なったか否かを判断する（ステップＳ２０８）。
【００３６】
制御部１０は、全ての順序情報について処理を行なったと判断した場合（Ｓ２０８：ＹＥＳ）、取得したテーブル３１に基づき、順序の正誤の判定を行なうための判定用情報のテーブル４１を作成する（ステップＳ２０９）。ステップＳ２０９にて具体的には、制御部１０は、順序情報に含まれる系列及び識別情報に基づき、系列毎に開始及び終了の検出対象コードの識別情報を抽出して判定用情報とし、系列別に判定用情報を記憶したテーブル４１とする。そして制御部１０は、全ての順序情報に基づき特定のコードが挿入されたソースコード４０と、ステップＳ２０９にて作成した判定用情報のテーブル４１とを入出力部１３から出力し（ステップＳ２１０）、処理を終了する。ステップＳ２１０にて具体的には、制御部１０は、ソースコード４０及びテーブル４１を外部の記憶装置に出力する。また、制御部１０はソースコード４０及びテーブル４１を記憶部１２に記憶してもよい。
【００３７】
制御部１０は、未処理の順序情報が存在すると判断した場合（ステップＳ２０８：ＮＯ）、処理をステップＳ２０３へ戻し、次の順序情報を選択し、ステップＳ２０４〜Ｓ２０８の処理を実行する。
【００３８】
上述した処理手順について、具体例を挙げて説明する。
図４は、入力されるソースコード３０の内容例の一部を示す説明図であり、図５は、入力されるテーブル３１の内容例を示す説明図である。図４中において破線により、検出対象コードを示している。図４に示す例では、入力されるソースコード３０には「void moduleA_input( void )」という関数内に、「memJ」に変数「０」を書き込むメモリアクセスに関するコード「Write_memJ( 0 ) 」が含まれている。また、ソースコード３０には「void moduleA_output( void ) 」という関数内に、「memJ」から変数「ａ」にデータを読み出すメモリアクセスに関するコード「Read_memJ( a )」が２つと、「memJ」に変数「ｂ」を書き込むメモリアクセスに関するコード「Write_memJ( b ) 」が含まれている。また、割り込み処理により呼び出される「void moduleC_interrupt( void )」という関数内に、「memL」に変数「ｘ」を書き込むメモリアクセスに関するコード「Write_memL( x ) 」が含まれている。更に「void moduleB_main( void ) 」という関数内に、「memK」に「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」、及び、「memL」から変数「ｙ」にデータを読み出すメモリアクセスに関するコード「Read_memL( y )」が含まれている。
【００３９】
図４に示したソースコード３０に含まれるメモリアクセスに関するコードは、図６に示すような実行順序で実行されることが規定されている。図６は、図４に示す各コードに対して規定された順序を模式的に示す模式図である。
【００４０】
図４に示したソースコード３０に対応するテーブル３１には（図５参照）、検出対象コード（関数）の系列及び識別情報（ＩＤ：Identifier）からなる順序情報と、検出対象コード（関数）名、メモリアクセス対象のメモリ領域を識別する情報、メモリアクセスの内容、メモリアクセスの内容が書き込みである場合の書き込み値、同一のコード名が含まれる場合にそれらを識別するための番号情報からなる位置情報とが含まれている。図４のソースコード３０に対応する図５に示す例では、検出対象コードは系列Ｘ及び系列Ｙについて存在し、系列ＸについてはＩＤ１〜４、系列ＹについてはＩＤ１〜３の検出対象コードが存在する。例えば系列Ｘ、ＩＤ１の検出対象コードは、「moduleA_input 」という関数内に、「memJ」というメモリ領域に対して「０」の「書き込み」を行なうものである。なお、「書き込み」を処理内容とする検出対象コードは「Write_* 」（「* 」はメモリ領域名）という名称であり、「読み出し」を処理内容とする検出対象コードは「Read_*」（「* 」はメモリ領域名）という名称であることが規定されている。
【００４１】
図４及び図５に示すソースコード３０及びテーブル３１に基づき図２に示した処理手順を説明すると、制御部１０は、図５に示したテーブル３１から系列Ｘ、ＩＤ１の検出対象コードの位置情報（関数名「moduleA_input 」、メモリ領域「memJ」、書き込み処理）を選択する（Ｓ１０３）。制御部１０は、ソースコード３０内をテキスト検索して関数名「moduleA_input 」を検出し、当該関数内（スコープ内）から「Write_memJ」をテキスト検索し、たとえばソースコード３０内の「１０行目」に当該検出対象コードを検出する（ステップＳ１０４）。制御部１０は、選択した系列Ｘ、ＩＤ１の検出対象コードの位置「１０行目」と、対応する順序情報「Ｘ、１」とを対応付けて一時的に記憶する（Ｓ１０７）。次に制御部１０は、系列Ｘ、ＩＤ２の検出対象コード「Read_memJ 」を、関数名「moduleA_output」からソースコード３０内の「９０行目」に検出し（Ｓ１０４）、位置「９０行目」と対応する順序情報「Ｘ、２」とを対応付けて一時的に記憶する（Ｓ１０７）。次に制御部１０は、系列Ｘ、ＩＤ３の検出対象コード「Read_memJ 」を、関数名「moduleA_output」からソースコード３０内の「１００行目」に検出し（Ｓ１０４）、位置「１００行目」と対応する順序情報「Ｘ、３」とを対応付けて一時的に記憶する（Ｓ１０７）。同様にして制御部１０は、系列Ｘ、ＩＤ４の検出対象コード「Write_memJ」を、関数名「moduleA_output」からソースコード３０内の「１２０行目」に検出し（Ｓ１０４）、位置「１２０行目」と対応する順序情報「Ｘ、４」とを対応付けて一時的に記憶する（Ｓ１０７）。制御部１０は、系列ＹのＩＤ１〜３の検出対象コードについても夫々、「moduleB_main」関数から「Write_memK」、「moduleC_interrupt 」関数から「Write_memL」、「moduleB_main」関数から「Read_memL 」を検出し、その位置と順序情報とを対応付けて出力する。
【００４２】
図７は、出力されるソースコード４０の内容例の一部を示す説明図である。図７に示す例では、出力されるソースコード４０には、検出された対象コードの前に、「Check(系列 ,ＩＤ )」という関数が挿入されている。「Check(系列 ,ＩＤ )」という関数は、引数の「系列」及び「ＩＤ」を後述する順序正誤判定モジュールに出力する特定のコードである。なお、ログファイル又は当該ソースコード４０を読み出して実行する装置のディスプレイに出力させるようにしてもよい。
【００４３】
図４及び図５に示すソースコード３０及びテーブル３１に基づき図３に示した処理手順により、図７に示したソースコード４０が作成される手順を説明する。制御部１０は、テーブル３１から順序情報「Ｘ，１」を選択し（Ｓ２０３）、系列「Ｘ」及び識別情報（ＩＤ）「１」を特定する（Ｓ２０４）。制御部１０は、特定した「Ｘ」及び「１」を引数とする「Check( X, 1 ) 」を作成し（Ｓ２０５）、順序情報「Ｘ，１」が対応付けられて出力されているＩＤ「１」の検出対象コードの位置「１０行目」を特定する（Ｓ２０６）。制御部１０は、「１０行目」の検出対象コードの前に作成した「Check( X, 1 ) 」を挿入する（Ｓ２０７）。同様にして、制御部１０は、ＩＤ「２」の検出対象コードの位置「９０行目」に「Check( X, 2 ) 」を挿入し（Ｓ２０７）、ＩＤ「３」の検出対象コードの位置「１００行目」に「Check( X, 3 ) 」を挿入し（Ｓ２０７）、ＩＤ「４」の検出対象コードの位置「１２０行目」に「Check( X, 4 ) 」を挿入する（Ｓ２０７）。これにより、図７に示すソースコード４０が出力される（Ｓ２１０）。
【００４４】
図８は、出力されるテーブル４１の内容例を示す説明図である。図８に示す例では、制御部１０は、系列Ｘについては開始のＩＤが「１」、終了のＩＤが「４」であることと、系列Ｙについては開始のＩＤが「１」、終了のＩＤが「３」であることが出力されている。
【００４５】
実施の形態１のプログラム作成装置１により作成されたプログラム（ソースコード４０）及び判定用情報（テーブル４１）に基づき、メモリアクセスの順序の正誤を判定する機能を有する制御装置による制御について説明する。
【００４６】
図９は、順序の正誤判定を行なう制御装置５の構成を示すブロック図である。制御装置５は、例えば車載機器を制御するマイコン５０を用いた組込機器であり、マイコン５０、記憶部５１、入出力部５２を備えている。
【００４７】
マイコン５０は、ＣＰＵを用い、ソースコード４０を実行する。記憶部５１は、フラッシュメモリ等の不揮発性のメモリである。記憶部５１には、ソースコード４０によるメモリアクセスの実行順序の正誤を判定する処理を実行させ、順序正誤判定モジュールとして機能させるための順序正誤判定プログラム５３が予め記憶されてある。ソースコード４０及び判定用情報４１は、予め記憶部５１に記憶されてあってもよい。記憶部５１はマイコン５０に内蔵されていてもよい。入出力部５２は情報の入出力を実現するインタフェースである。入出力部５２はＵＳＢ又はＬＡＮ等の通信機能であって、マイコン５０が通信機能によりソースコード４０及び判定用情報４１を入力するようにしてもよい。なお、記憶部５１に予めソースコード４０及び判定用情報４１が記憶されてある状態とすることができれば、入出力部５２は備えられていなくともよい。
【００４８】
図１０は、制御装置５で実行される順序正誤判定の処理手順の一例を示すフローチャートである。図１０に示すフローチャートは、マイコン５０が、入力されて記憶部５１に記憶されたプログラムのソースコード４０を実行中に、順序正誤判定モジュールによる処理として実行される。
【００４９】
マイコン５０は、プログラムのソースコード４０に基づき実行されている処理について、判定用情報のテーブル４１に基づき、系列毎に、最初に通知される予定のＩＤを特定する（ステップＳ３０１）。具体的にはマイコン５０は、系列「Ｘ」については「開始のＩＤ」は「１」、系列「Ｙ」については「開始のＩＤ」は「１」と特定する。このようにＩＤはそのまま順序情報として扱われるが、ＩＤは数値とは限らず「Ａ、Ｂ、Ｃ、…」のような順序が規定できるような文字情報であってもよい。
【００５０】
マイコン５０は、プログラム４０に基づく処理中に、特定のコード、即ち「Check(系列 ,ＩＤ )」が実行されることにより、系列及びＩＤの通知を受け付けたか否かを判断する（ステップＳ３０２）。マイコン５０は、通知を受け付けていないと判断した場合（Ｓ３０２：ＮＯ）、処理をステップＳ３０２へ戻し、通知を受け付けるまで待機する。
【００５１】
マイコン５０は、通知を受け付けたと判断した場合（Ｓ３０２：ＹＥＳ）、ステップＳ３０１で特定した通知予定のＩＤと、通知されたＩＤとが一致するか否かを判定する（ステップＳ３０３）。
【００５２】
マイコン５０は、ステップＳ３０３で一致すると判定した場合（Ｓ３０３：ＹＥＳ）、通知されたＩＤが、当該系列における終了のＩＤであるか否かを判断する（ステップＳ３０４）。
【００５３】
マイコン５０は、終了のＩＤでないと判断した場合（Ｓ３０４：ＮＯ）、通知されたＩＤに増分値Ｃを加算した値を次の通知予定のＩＤに特定し（ステップＳ３０５）、処理をステップＳ３０２へ戻し、次の通知を受け付けるまで待機する。
【００５４】
マイコン５０は、ステップＳ３０４にて終了のＩＤであると判断した場合（Ｓ３０４：ＹＥＳ）、当該系列の開始のＩＤを次の通知予定のＩＤに特定し（ステップＳ３０６）、処理をステップＳ３０２へ戻し、次の通知を受け付けるまで待機する。
【００５５】
マイコン５０は、ステップＳ３０３にて一致しないと判定した場合（Ｓ３０３：ＮＯ）、通知された系列及びＩＤに応じて、エラー処理を決定する（ステップＳ３０７）。エラー処理の内容は例えば、記憶部５１へのログ情報の記録でもよいし、又は、マイコン５０自身のリセットであってもよい。マイコン５０は、独立したエラー対応機構へ決定したエラー処理の内容を出力し（ステップＳ３０８）、処理をステップＳ３０２へ戻す。なお、ステップＳ３０８でエラー処理の内容を出力した後、正誤判定処理を強制的に終了させてもよい。
【００５６】
マイコン５０は、プログラム４０による処理を実行中、処理が終了（マイコン５０のリセットによる終了も含む）されるまで、図１０のフローチャートに示した処理手順を実行し続け、実行順序の正誤を判定し、誤りがあった場合にエラー処理を行なう。
【００５７】
図１０のフローチャートに示した処理手順を、図８に示した判定用情報のテーブル４１に基づき具体例を挙げて説明する。マイコン５０は最初に、系列「Ｘ」についての通知予定のＩＤを「１」と特定し、系列「Ｙ」についての通知予定のＩＤを「１」と特定する（Ｓ３０１）。次に「Check(系列 ,ＩＤ )」が実行されることにより、系列「Ｘ」について通知「Ｘ，１」を受け付けた場合（Ｓ３０２：ＹＥＳ）、ＩＤ「１」が通知予定のＩＤ「１」と一致するか否かを判定する。マイコン５０は、一致したと判定し（Ｓ３０３：ＹＥＳ）、系列「Ｘ」における終了のＩＤ「４」であるか否かを判断して、「４」でないと判断し（Ｓ３０４：ＮＯ）、通知されたＩＤ「１」に増分値Ｃ「１」を加算した値「２」を次の通知予定のＩＤと特定し（Ｓ３０５）、処理をステップＳ３０２へ戻して通知を受けるまで待機する。次に通知されるＩＤ「２」についてもマイコン５０は同様に処理し、通知されたＩＤ「２」に増分値Ｃ「１」を加算した値「３」を次の通知予定のＩＤと特定し（Ｓ３０５）、更に次のＩＤ「３」についても同様に処理し、「４」を次の通知予定のＩＤと特定し（Ｓ３０５）、通知を受けるまで待機する。マイコン５０は、系列「Ｘ」についてＩＤ「４」の通知を受けた場合（Ｓ３０２：ＹＥＳ）、次の通知予定のＩＤ「４」と一致すると判定し（Ｓ３０３：ＹＥＳ）、通知されたＩＤが系列「Ｘ」の終了のＩＤ「４」であると判断し（Ｓ３０４：ＹＥＳ）、系列「Ｘ」の開始のＩＤ「１」を次の通知予定のＩＤと特定し（Ｓ３０６）、通知を受けるまで待機する。これにより、マイコン５０は、系列「Ｘ」及び系列「Ｙ」夫々について、図６に示したように、ＩＤ１〜４の処理、及びＩＤ１〜３のメモリアクセスに関する処理が繰り返し実行されなければならないという規定に対し、正誤を判定し、誤りがあった場合にエラー処理を実行して対処することができる。
【００５８】
このように、プログラム作成装置１によって自動的に作成されたプログラムのソースコード４０及びテーブル４１に基づき、制御装置にて処理を実行中に、メモリアクセスに関する実行順序の正誤を判定し、誤りがあった場合にエラー対処することが可能となる。
【００５９】
実施の形態１で示した図４及び図５では、検出対象コードは「Write_* 」及び「Read_*」という特定の名称であった。しかしながら、検出対象コードはこれらには限られないのは勿論である。例えば、特定の変数を読み出して代入する「代入文」、変数を用いる「演算」、「加算」、「条件式」、「配列アクセス」なども「読み出し」である。例えば特定の変数「ａ」に対し、以下のようなコードが含まれる場合、処理内容が「読み出し」である検出対象コードとなる。
ｂ＝ａ：
ｂ＝ａ＋１：
ａ＋＋；
ｉｆ（１＝＝ａ）｛｝；
ｂ［ａ］；
また、特定の変数に値を代入する「代入文」、「加算」などの演算を行なうことは「書き込み」である。例えば特定の変数「ａ」に対し、以下のようなコードが含まれる場合、処理内容が「書き込み」である検出対象コードとなる。
ａ＝ｂ；
ａ＋＋；
【００６０】
正誤の判定がされるべき実行順序は、図１０に示したようなものに限られない。図１１は、入力される他のソースコード３０ｂの内容例の一部を示す説明図であり、図１２は、図１１のソースコード３０ｂに対応して入力されるテーブル３１ｂの内容例を示す説明図である。
【００６１】
図１１に示す例では、入力されるソースコード３０ｂには、モジュールＡについて最初のみ実行される「void moduleA_init( void ) 」という関数内に、「memJ」に変数「０」を書き込むメモリアクセスに関するコード「Write_memJ( 0 ) 」が含まれている。そしてソースコード３０ｂには、「void moduleA_init( void ) 」が実行された後は継続的に実行される「void moduleA_main( void ) 」という関数内に、「memJ」から変数「ａ」にデータを読み出すメモリアクセスに関するコード「Read_memJ( a )」が２つと、「memJ」に変数「ｂ」を書き込むメモリアクセスに関するコード「Write_memJ( b ) 」が含まれている。また、ソースコード３０ｂにはモジュールＢについて起動時のみ実行される「void  moduleB_wakeup( void )」という関数内に、「memK」に「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」、及び、「memL」に変数「ｘ」を書き込むメモリアクセスに関するコード「Write_memL( x ) 」が含まれている。更に、可動時に継続的に実行される「void moduleB_main( void ) 」という関数内に、「memL」から変数「ｙ」にデータを読み出すメモリアクセスに関するコード「Read_memL( y )」が含まれている。
【００６２】
図１１に示したソースコード３０ｂ内のメモリアクセスに関するコードは、図１３に示すような順序規定により実行される。図１３は、図１１に示した各コードに対して規定された順序を模式的に示す模式図である。
【００６３】
図１２に示すように、図１１のソースコード３０ｂの内容例に対応するテーブル３１ｂには、図５同様に順序情報及び位置情報とが含まれているが、図１１の内容例では、順序情報に、繰返先頭ＩＤが更に含まれている。系列「Ｘ」は、ＩＤ「１」の検出対象コードが実行された後は、繰返先頭ＩＤの「２」を先頭にＩＤ２〜４の検出対象コードが繰り返し実行されるべきであり、系列「Ｙ」では、ＩＤ「１」及び「２」の検出対象コードが実行された後は、繰返先頭ＩＤであり、終了のＩＤでもあるＩＤ「３」の検出対象コードが繰り返し実行されるべきであることを示している。
【００６４】
繰返先頭ＩＤは、図３のフローチャートに示す判定用情報の作成処理（Ｓ２０９）において、系列毎に開始及び終了の検出対象コードのみならず、繰返先頭の検出コードの識別情報を抽出する際に用いられる。
【００６５】
図１４は、図１１に示したソースコード３０ｂに対応して出力されるソースコード４０ｂの内容例の一部を示す説明図である。図１４に示す例でも、図７同様に、出力されるソースコード４０ｂには、検出された対象コードの前に、「Check(系列 ,ＩＤ )」という関数が挿入されている。
【００６６】
図１５は、図１２に示したテーブル３１ｂに対応して出力されるテーブル４１ｂの一部を示す説明図である。図１５に示す例では、系列Ｘについては開始のＩＤが「１」、繰返先頭のＩＤが「２」、終了のＩＤが「４」であることと、系列Ｙについては開始のＩＤが「１」、繰返先頭のＩＤが「３」、終了のＩＤも「３」であることが出力されている。
【００６７】
また、各関数が分岐して実行されるような場合に、各関数内で実行されるメモリアクセスに関するコードの実行順序の正誤を判定するときにも対応可能である。図１６は、入力される他のソースコード３０ｃの内容例の一部を示す説明図であり、図１７は、図１６のソースコード３０ｃに対応して入力されるテーブル３１ｃの内容例を示す説明図である。
【００６８】
図１６に示すソースコード３０ｃには、モジュールＢについて実行されるメイン関数である「void moduleB_main( void ) 」という関数内に、「memQ」から読み出したデータを変数「ｑ」に書き込むメモリアクセスに関するコード「Read_memQ( q )」と、「memK」に「０」を書き込むメモリアクセスに関するコード「Write_memK( 0 ) 」又は「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」が含まれている。また、「memL」に変数「ｍ」を書き込むメモリアクセスに関するコード「Write_memL( m ) 」又は変数「ｎ」を書き込むメモリアクセスに関するコード「Write_memL( n ) 」が含まれている。図１６に示したソースコード３０ｃ内のメモリアクセスに関するコードは、分岐文で分かれており、図１８に示すような順序規定により実行される。図１８は、図１６に示した各コードに対して規定された順序を模式的に示す模式図である。
【００６９】
図１７に示すように、図１６のソースコード３０ｃの内容例に対応して入力されるテーブル３１ｃには、図５同様に順序情報及び位置情報とが含まれているが、図１７の内容例では、順序情報に、通知予定ＩＤが既に含まれている。ＩＤ「１」の検出対象コードが実行された次の通知予定ＩＤは、ＩＤ「２」又は「３」である。また、ＩＤ「２」の検出コードが実行された場合、次の通知予定ＩＤは「４」であり、ＩＤ「３」の検出コードが実行された場合、次の通知予定ＩＤは「５」である。更に、ＩＤ「４」の検出コードが実行された場合、次の通知予定ＩＤは開始のＩＤ「１」であり、ＩＤ「５」の検出コードが実行された場合、次の通知予定ＩＤは開始のＩＤ「１」であることを示している。
【００７０】
通知予定ＩＤは、図３のフローチャートに示す判定用情報の作成処理（Ｓ２０９）において用いられる。通知予定ＩＤが順序情報に含まれる場合、プログラム作成装置１の制御部１０はステップＳ２０９において、テーブル３１ｃに含まれている順序情報をそのまま判定用情報のテーブル４１ｃとして出力する。そして、当該テーブル４１ｃを元に順序の正誤を判定する制御装置５では、マイコン５０は、ステップＳ３０５にて通知されたＩＤに増分値Ｃ等を加算する代わりに、通知されたＩＤに対応する次の通知予定ＩＤを判定用情報に基づき特定する処理を行なう。この場合、マイコン５０は、終了のＩＤか否かの判断を行なうに際し、判定用情報のテーブル４１ｃには終了のＩＤが含まれないから、ステップＳ３０４では常に終了のＩＤでないと判断する。マイコン５０は、通知されたＩＤが「４」又は「５」である場合には、判定用情報のテーブル４１ｃに基づき、次の通知予定ＩＤは「１」であると特定するから、図１８に示すような分岐処理が繰り返される順序についても正誤を判定することが可能である。
【００７１】
また、実行順序の正誤の判定を簡易に行なう場合には、次のような構成としても構わない。図１９は、入力される他のソースコード３０ｄの内容例の一部を示す説明図であり、図２０は、図１９のソースコード３０ｄに対応して入力されるテーブル３１ｄの内容例を示す説明図である。
【００７２】
図１９に示す例では、入力されるソースコード３０ｄにはモジュールＡ〜Ｃ夫々のメイン関数内に、「memJ」に「０」を書き込むメモリアクセスに関するコード「Write_memJ( 0 ) 」又は「memJ」から変数にデータを読み出すメモリアクセスに関するコード「Read_memJ( j又はk ) 」が含まれている。
【００７３】
図１９に示したソースコード３０ｄに含まれる各メモリアクセスに関するコードは、書き込みが為された後に必ず読み出しが行なわれれば、いずれの関数内で実行されたかは問われない。このような場合、書き込みか、又は読み出しかを識別できればよいから、検出対象コードの識別情報は、図２０に示すように２種類で済む。
【００７４】
図２１は、出力されるソースコード４０ｄの内容例の一部を示す説明図である。図２１に示す例では、出力されるソースコード４０ｄには、「Write_memJ( 0 ) 」のコードの前にはＩＤを「１」とする「Check( X, 1 ) 」、「Read_memJ( j又はk ) 」のコードの前にはＩＤを「２」とする「Check( X, 2 ) 」が挿入されてある。出力されるソースコード４０ｄに基づき順序の正後の判定を行なう制御装置５ではマイコン５０は、ＩＤが「１」、「２」、「１」、「２」、…の順序で通知されるか否かを判定し続ければよい。
【００７５】
上述した実施の形態１では特定のコード「Check(系列 ,ＩＤ )」という関数を、検出された対象コードの前に挿入する構成とした。しかしながらこれに限らず、検出されたコードの後に挿入するようにしてもよい。
【００７６】
（実施の形態２）
実施の形態１では、プログラム作成装置１は、特定のコード「Check(系列 ,ＩＤ )」を挿入する構成とした。実施の形態２では、プログラム作成装置１は、「Check(系列 ,ＩＤ )」に加え、検出対象コードが実行されてから所定の時間内に次の検出対象コードが実行されるか否かを、制御装置５にて判定することが可能なように、時間計測開始のコードを挿入する。更にプログラム作成装置１は、「Check(系列 ,ＩＤ )」のコードが実行されるタイミングと、検出対象コードが実行されるタイミングとの間に割り込みが発生しないように、割り込みを禁止させるコードを挿入する。
【００７７】
実施の形態２におけるプログラム作成装置１の構成は、その詳細処理以外は、実施の形態１における構成と同様である。したがって、以下の説明では共通する構成には同一の符号を付して詳細な説明を省略する。
【００７８】
図２２は、実施の形態２におけるプログラム作成装置１による検出処理の手順の一例を示すフローチャートである。なお、以下に示す処理手順の内、図２に示した実施の形態１における検出処理と共通する処理手順には、同一のステップ番号を付して詳細な説明を省略する。
【００７９】
制御部１０は、選択した位置情報について、ステップＳ１０５で特定した位置の情報と、取得した順序情報とを対応付けて一時記憶部１２に記憶した後（Ｓ１０７）、入力を受け付けたテーブル３１ｅを参照して、選択している位置情報の検出対象コードには、時間計測が必要であるか否かを判断する（ステップＳ４０１）。後述するように、実施の形態２にて入力されるテーブル３１ｅには、時間計測要否の情報が含まれている。
【００８０】
制御部１０は、時間計測が必要であると判断した場合（Ｓ４０１：ＹＥＳ）、テーブル３１ｅから時間計測情報を特定し、ステップＳ１０７で一時的に記憶した情報に更に対応付けて一時的に記憶する（ステップＳ４０２）。
【００８１】
制御部１０は、時間計測が不要であると判断した場合（Ｓ４０１：ＮＯ）、処理を次のステップＳ４０３へ進める。
【００８２】
制御部１０は、選択している位置情報の検出コードには、割り込み禁止が必要であるか否かを判断する（ステップＳ４０３）。後述するように実施の形態２にて入力されるテーブル３１ｅには、割り込み禁止要否の情報が含まれている。
【００８３】
制御部１０は、割り込み禁止が必要であると判断した場合（Ｓ４０３：ＹＥＳ）、ステップＳ１０７で一時的に記憶した情報に、割り込み禁止要という情報を更に対応付けて一時的に記憶し（ステップＳ４０４）、処理をステップＳ１０８へ進める。
【００８４】
制御部１０は、割り込み禁止が不要であると判断した場合（Ｓ４０３：ＮＯ）、そのまま処理をステップＳ１０８へ進める。
【００８５】
次に制御部１０は、一時的に記憶してある情報に基づき、特定のコードを挿入したプログラムを作成する。図２３は、実施の形態２におけるプログラム作成処理の手順の一例を示すフローチャートである。なお、以下に示す処理手順の内、図３に示した実施の形態１におけるプログラム作成処理と共通する処理手順には、同一のステップ番号を付して詳細な説明を省略する。
【００８６】
制御部１０は、ステップＳ２０７にて、選択している順序情報に対応する位置の情報が示すソースコード３０内の位置の前又は後に、特定のコードを挿入した後（Ｓ２０７）、選択している順序情報に対応付けられた時間計測情報があるか否かを判断する（ステップＳ５０１）。なお、制御部１０は、１つ前の順序情報に対し、対応付けられた時間計測情報がある場合にもステップＳ５０１にて、あると判断する。制御部１０は、時間計測情報があると判断した場合（Ｓ５０１：ＹＥＳ）、時間計測情報に基づき、時間計測を開始させるコードを作成し、検出対象コードの後に挿入する（ステップＳ５０２）。また制御部１０は、ステップＳ５０１にて１つ前の順序情報に対し、対応付けられた時間計測情報があるとした場合、ステップＳ５０２にて時間計測を終了させるコードを作成し、検出対象コードの前に挿入する（Ｓ５０２）。制御部１０は、ステップＳ５０１にて、対応付けられた時間計測情報がないと判断した場合（Ｓ５０１：ＮＯ）、処理をステップＳ５０３へ進める。
【００８７】
次に制御部１０は、選択している順序情報に、割り込み禁止要の情報が対応付けられているか否かを判断する（ステップＳ５０３）。制御部１０は、割り込み禁止要の情報が対応付けられていると判断した場合（Ｓ５０３：ＹＥＳ）、ステップＳ２０７で挿入した特定のコード及び検出対象コードの前後に、これらのコード列を挟むように、割り込み禁止コード及び割り込み許可コードを挿入する（ステップＳ５０４）。制御部１０は、ステップＳ５０３にて割り込み禁止要の情報が対応付けられていないと判断した場合（Ｓ５０３：ＮＯ）、処理をそのままステップＳ２０８へ進める。
【００８８】
これにより、プログラム作成装置１により、検出対象コードの実行順序を正確に、より詳細に正誤判定することを可能とするプログラムを作成することができる。
【００８９】
図２４は、実施の形態２におけるソースコード３０に対応して入力されるテーブル３１ｅの内容例を示す説明図である。図２４に示す例では、位置情報に、割り込み禁止の要否を示す情報が含まれている。更に位置情報に、時間計測の要否、及び要の場合の時間制限を示す情報からなる時間計測情報が対応付けられている。図２４に示す例では、系列「Ｙ」における「void moduleB_main( void ) 」の関数内の「memK」に「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」には、割り込み禁止のコードが必要であるという情報が含まれており、系列「Ｘ」の「void moduleA_output( void ) 」の関数内の１つ目の「memJ」から変数「ａ」にデータを読み出すメモリアクセスに関するコード「Read_memJ( a )」と、系列「Ｙ」における「void moduleB_main( void ) 」の関数内の「memK」に「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」とに対しては、時間計測が必要であることを示す時間計測用情報が含まれている。
【００９０】
図２５は、実施の形態２にて出力されるソースコード４０ｅの内容例を示す説明図である。図２５は、図４に示したプログラムのソースコード３０が入力された場合に出力されるソースコード４０ｅの内容例である。図２４に示すテーブル３１ｅに基づき図２２及び図２３の処理が実行された場合に、「void moduleA_output( void ) 」の関数内の１つ目の「memJ」から変数「ａ」にデータを読み出すメモリアクセスに関するコード「Read_memJ( a )」の後に時間計測開始の処理をマイコン５０に実行させるコード（例えば、系列と制限時間を引数とする「Start_Timer( X, 100 ) 」）が挿入され、同関数内の２つ目の「memJ」から変数「ａ」にデータを読み出すメモリアクセスに関するコード「Read_memJ( a )」の前に、時間計測終了を指示する「End_Timer( X )」が挿入されている。これにより、制御装置５のマイコン５０でソースコード４０ｅに基づく処理を行なった場合、「void moduleA_output( void ) 」の関数内の１つ目のRead_memJ( a )」から１００ミリ秒以内に、１つ目の「Read_memJ( a )」が実行されるか否かを判断することが可能である。同様にして「void moduleB_main( void ) 」の関数内の「memK」に「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」の後には、時間計測開始の処理をマイコン５０に実行させるコード（「Start_Timer( Y, 500 ) 」）が挿入され、実行順序が次である同艦す内の「Read_memL( y )」の前に、時間計測終了を指示する「End_Timer( Y )」が挿入されている。これにより、制御装置５のマイコン５０でソースコード４０ｅに基づく処理を行なった場合、「void moduleB_main( void ) 」の関数内の１つ目の「Write_memK( 1 ) 」から５００ミリ秒以内に、「Read_memL( y )」が実行されるか否かを判断することが可能である。
【００９１】
更に、「void moduleB_main( void ) 」の関数内の「memK」に「１」を書き込むメモリアクセスに関するコード「Write_memK( 1 ) 」及びその前に挿入されている特定のコード「Check( Y, 2 ) 」の前後には、割り込みを禁止するコード「Disable_interrupt() 」及び割り込みを許可するコード「Enable_interrupt()」が挿入されてある。これにより、「void moduleB_main( void ) 」の関数内で、「Check( Y, 2 ) 」と「Write_memK( 1 ) 」との間に、「moduleC_interrupt 」関数内の「Write_memL( k ) 」が実行されるなどの誤りが起こらないように制御することが可能である。
【００９２】
このようにして、特定のコードによりＩＤが出力される順序が、正しいか否かにより、実行順序の判定を行なうのみならず、割り込みを防止させて判定自体の誤りを防ぐことを可能とするプログラムを作成できる。更に、実行中に特定のコード間の時間の計測をさせるプログラムを自動的に作成することも可能となる。
【００９３】
なお、上述のように開示された本実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００９４】
１  プログラム作成装置
１０  制御部
１１  記憶部
１３  入出力部
１Ｐ  プログラム作成用プログラム
３０，３０ｂ，３０ｃ，３０ｄ  ソースコード
３１，３１ｂ，３１ｃ，３１ｄ，３１ｅ  テーブル
【図１】
2013210916.tif 000003
【図２】
2013210916.tif 000004
【図３】
2013210916.tif 000005
【図５】
2013210916.tif 000006
【図６】
2013210916.tif 000007
【図７】
2013210916.tif 000008
【図８】
2013210916.tif 000009
【図９】
2013210916.tif 000010
【図１０】
2013210916.tif 000011
【図１１】
2013210916.tif 000012
【図１２】
2013210916.tif 000013
【図１３】
2013210916.tif 000014
【図１４】
2013210916.tif 000015
【図１５】
2013210916.tif 000016
【図１６】
2013210916.tif 000017
【図１７】
2013210916.tif 000018
【図１８】
2013210916.tif 000019
【図１９】
2013210916.tif 000020
【図２０】
2013210916.tif 000021
【図２１】
2013210916.tif 000022
【図２２】
2013210916.tif 000023
【図２３】
2013210916.tif 000024
【図２４】
2013210916.tif 000025
【図２５】
2013210916.tif 000026
【図４】
2013210916.tif 000027