(57)【要約】【課題】複数のＣＰＵコアを備えた電子制御装置の演算処理負荷を低減する【解決手段】自動コード生成装置１は、制御の処理内容を記述する制御モデルに基づいてソースコードを生成する。自動コード生成装置１は、制御モデルに含まれる変数が、複数のＣＰＵコアで参照され且つ浮動小数点型の変数（以下、処理対象変数という）であるか否かを判断する。自動コード生成装置１は、処理対象変数であると判断された変数が無限大または非数となる可能性があるか否かを判断する判断処理を行うための判断コードを生成して、判断コードをソースコードに追加する。自動コード生成装置１は、判断コードの処理により処理対象変数が無限大または非数となる可能性があると判断された場合に、その旨を示すように非数チェックフラグを設定するためのフラグ設定コードを生成して、フラグ設定コードをソースコードに追加する。【選択図】図１
2016115189.tif 000002
【特許請求の範囲】
【請求項１】
処理内容を表すモデルに基づいてソースコードを生成するコード生成装置（１）であって、
前記モデルに含まれる変数が、複数のＣＰＵコアで参照され且つ浮動小数点型の変数である処理対象変数であるか否かを判断する変数判断手段（Ｓ３０，Ｓ４０）と、
前記変数判断手段で前記処理対象変数であると判断された前記変数が無限大または非数となる可能性があるか否かを判断する処理を行うためのコードである判断コードを生成して、前記判断コードを前記ソースコードに追加する第１コード追加手段（Ｓ８０，Ｓ１００）と、
前記判断コードの処理により前記処理対象変数が無限大または非数となる可能性があると判断された場合に、その旨を示すように可能性情報を設定するためのコードである情報設定コードを生成して、前記情報設定コードを前記ソースコードに追加する第２コード追加手段（Ｓ８０，Ｓ１００）とを備える
ことを特徴とするコード生成装置。
【請求項２】
前記判断コードは、ガード処理を行うためのコードである
ことを特徴とする請求項１に記載のコード生成装置。
【請求項３】
前記処理対象変数に対して前記ガード処理が行われるか否かを判断し、前記処理対象変数に対して前記ガード処理が行われると判断した場合に、前記第１コード追加手段による前記判断コードの追加を禁止する第１追加禁止手段（Ｓ５０）と、
前記処理対象変数に対して行われる前記ガード処理に基づいて前記情報設定コードを生成して、前記情報設定コードを前記ソースコードに追加する第３コード追加手段（Ｓ６０）とを備える
ことを特徴とする請求項２に記載のコード生成装置。
【請求項４】
前記処理対象変数に対して、無限大または非数となる可能性がある演算処理が行われるか否かを判断し、前記演算処理が行われない場合に、前記第１コード追加手段による前記判断コードの追加と、前記第２コード追加手段による前記情報設定コードの追加とを禁止する第２追加禁止手段（Ｓ７０）を備える
ことを特徴とする請求項１〜請求項３の何れか１項に記載のコード生成装置。
【請求項５】
前記判断コードには、比較演算が含まれる
ことを特徴とする請求項１〜請求項４の何れか１項に記載のコード生成装置。
【請求項６】
コンピュータを、請求項１〜請求項５の何れか１項に記載のコード生成装置の各手段として機能させるコード生成プログラム（１００）。
【請求項７】
処理内容を表すモデルに基づいてソースコードを生成するコード生成方法であって、
前記モデルに含まれる変数が、複数のＣＰＵコアで参照され且つ浮動小数点型の変数である処理対象変数であるか否かを判断する変数判断手順（Ｓ３０，Ｓ４０）と、
前記変数判断手順で前記処理対象変数であると判断された前記変数が無限大または非数となる可能性があるか否かを判断する処理を行うためのコードである判断コードを生成して、前記判断コードを前記ソースコードに追加する第１コード追加手順（Ｓ８０，Ｓ１００）と、
前記判断コードの処理により前記処理対象変数が無限大または非数となる可能性があると判断された場合に、その旨を示すように可能性情報を設定するためのコードである情報設定コードを生成して、前記情報設定コードを前記ソースコードに追加する第２コード追加手順（Ｓ８０，Ｓ１００）とを備える
ことを特徴とするコード生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデルに基づいてソースコードを生成するコード生成装置、コード生成プログラムおよびコード生成方法に関する。
【背景技術】
【０００２】
従来、制御モデルで記述されたブロックセットに従ってソースコードを自動生成する技術が知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−２９６１１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のＣＰＵコアを備えた電子制御装置がソースコードに基づいて処理を実行する場合に、第１ＣＰＵコアが第２ＣＰＵコアの変数（以下、第２コア公開変数という）を参照することがある。そして、参照する第２コア公開変数が浮動小数点型である場合に、第１ＣＰＵコアは、第２ＣＰＵコアのレジスタを参照することにより、この第２コア公開変数が無限大または非数ではないことをチェックする必要がある。
【０００５】
しかし、異なるＣＰＵコアの浮動小数点型変数を参照する毎に異なるＣＰＵコアのレジスタを参照する処理を行うと、電子制御装置の演算処理負荷が増加してしまうという問題があった。
【０００６】
本発明は、こうした問題に鑑みてなされたものであり、複数のＣＰＵコアを備えた電子制御装置の演算処理負荷を低減することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するためになされた第１発明は、処理内容を表すモデルに基づいてソースコードを生成するコード生成装置であって、変数判断手段と、第１コード追加手段と、第２コード追加手段とを備える。
【０００８】
変数判断手段は、モデルに含まれる変数が、複数のＣＰＵコアで参照され且つ浮動小数点型の変数である処理対象変数であるか否かを判断する。
第１コード追加手段は、変数判断手段で処理対象変数であると判断された変数が無限大または非数となる可能性があるか否かを判断する処理を行うためのコードである判断コードを生成して、判断コードをソースコードに追加する。
【０００９】
第２コード追加手段は、判断コードの処理により処理対象変数が無限大または非数となる可能性があると判断された場合に、その旨を示すように可能性情報を設定するためのコードである情報設定コードを生成して、情報設定コードをソースコードに追加する。
【００１０】
このように構成された第１発明のコード生成装置は、判断コードと情報設定コードが追加されたソースコードを生成する。このソースコードが実行されると、判断コードに基づいて、複数のＣＰＵコアで参照される公開変数が浮動小数点型である場合に無限大または非数となる可能性があるか否かが判断される。さらに、無限大または非数となる可能性があると判断された場合に、その旨を示すように可能性情報が設定される。
【００１１】
このため、第１発明のコード生成装置により生成されたソースコードを実行する第１ＣＰＵコアが第２ＣＰＵコアの公開変数を参照する場合に、第１ＣＰＵコアは、可能性情報を参照することにより、無限大または非数となる可能性があるか否かを確認するようにすることができる。
【００１２】
そして第１ＣＰＵコアは、無限大または非数となる可能性がある旨を可能性情報が示している場合には、公開変数に対応する第２ＣＰＵコアのレジスタを参照する一方、上記の旨を可能性情報が示していない場合には、第２ＣＰＵコアのレジスタの参照を省略するようにすることができる。
【００１３】
これにより、第１発明のコード生成装置は、公開変数を参照する毎にＣＰＵコアのレジスタの参照を行う必要がなくなるソースコードを生成することができ、複数のＣＰＵコアを備えた電子制御装置の演算処理負荷を低減することができる。
【００１４】
上記目的を達成するためになされた第２発明のコード生成プログラムは、コンピュータを第１発明のコード生成装置の各手段として機能させる。
第２発明のコード生成プログラムによって制御されるコンピュータは、第１発明のコード生成装置の一部を構成することができ、第１発明のコード生成装置と同様の効果を得ることができる。
【００１５】
上記目的を達成するためになされた第３発明のコード生成方法は、処理内容を表すモデルに基づいてソースコードを生成するコード生成方法であって、変数判断手順と、第１コード追加手順と、第２コード追加手順とを備える。
【００１６】
変数判断手順は、モデルに含まれる変数が、複数のＣＰＵコアで参照され且つ浮動小数点型の変数である処理対象変数であるか否かを判断する。
第１コード追加手順は、変数判断手順で処理対象変数であると判断された変数が無限大または非数となる可能性があるか否かを判断する処理を行うためのコードである判断コードを生成して、判断コードをソースコードに追加する。
【００１７】
第２コード追加手順は、判断コードの処理により処理対象変数が無限大または非数となる可能性があると判断された場合に、その旨を示すように可能性情報を設定するためのコードである情報設定コードを生成して、情報設定コードをソースコードに追加する。
【００１８】
第３発明のコード生成方法は、第１発明のコード生成装置にて実行される方法であり、当該方法を実行することで、第１発明のコード生成装置と同様の効果を得ることができる。
【図面の簡単な説明】
【００１９】
【図１】自動コード生成装置１の構成を示すブロック図である。
【図２】コード生成処理を示すフローチャートである。
【図３】ソースコード２００を示す図である。
【図４】電子制御装置３００の構成を示すブロック図である。
【図５】ソースコード４１０を示す図である。
【図６】ソースコード４２０を示す図である。
【図７】ソースコード５００を示す図である。
【図８】公開変数参照で要する時間を示すタイミングチャートである。
【図９】アセンブラコード６００を示す図である。
【発明を実施するための形態】
【００２０】
以下に本発明の実施形態を図面とともに説明する。
自動コード生成装置１は、パーソナルコンピュータ（以下、パソコンという）で構成されており、図１に示すように、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、データ記憶装置１４、入力装置１５および表示装置１６を備える。
【００２１】
ＲＯＭ１２は、データの書き換えが不能な不揮発性メモリである。ＲＯＭ１２は、ブートプログラム等を記憶する。
ＲＡＭ１３は、揮発性メモリであり、ＣＰＵ１１の演算結果等を一時的に記憶する。
【００２２】
データ記憶装置１４は、記憶内容を書き換え可能な不揮発性メモリであり、本実施形態では例えばハードディスクドライブである。データ記憶装置１４は、オペレーティングシステムおよび各種アプリケーションプログラム等を記憶する。
【００２３】
またデータ記憶装置１４は、少なくとも１つの制御モデルを記憶する。制御モデルは、時系列の中でのデータ演算、データ入力およびデータ出力のうち少なくともいずれか１つの機能を表すブロックと、ブロック間の入出力関係を示す結線との組合せとして、制御の処理内容を記述する。
【００２４】
入力装置１５は、例えばキーボードとポインティングデバイスを備える。そして入力装置１５は、使用者がキーボードとポインティングデバイスを介して行った入力操作を特定するための入力操作情報をＣＰＵ１１へ出力する。
【００２５】
表示装置１６は、ＣＰＵ１１からの指示に基づいて、表示画面に各種画像を表示する。
ＣＰＵ１１は、ＲＯＭ１２とデータ記憶装置１４に記憶されたプログラムに基づいて各種処理を実行する。
【００２６】
そして自動コード生成装置１は、自動コード生成装置１に電源が投入されて起動すると、自動コード生成装置１にインストールされたオペレーティングシステムに従って動作し、入力装置１５から入力される実行指令に従って、各種アプリケーションプログラムを実行する。
【００２７】
自動コード生成装置１には、制御モデルからソースコードを生成するためのコード生成ツール１００がアプリケーションプログラムとしてインストールされている。なおコード生成ツール１００は、自動コード生成装置１を構成するパソコンに予めインストールされていてもよいし、記録媒体またはネットワークを介してインストールされるようにしてもよい。記録媒体としては、例えば光ディスク、磁気ディスクおよび半導体メモリなどが挙げられる。
【００２８】
そしてＣＰＵ１１は、予め設定されたコード生成開始条件が成立すると、自動コード生成装置１にインストールされたコード生成ツール１００に従って、コード生成処理を実行する。
【００２９】
コード生成開始条件は、自動コード生成装置１が読み込む制御モデルを指定する選択指令が入力装置１５から入力され、さらに、コード生成処理の開始を要求する開始指令が入力装置１５から入力されることである。
【００３０】
次に、自動コード生成装置１のＣＰＵ１１が実行するコード生成処理の手順を説明する。
コード生成処理が実行されると、ＣＰＵ１１は、図２に示すように、まずＳ１０にて、選択指令により特定される制御モデルをデータ記憶装置１４から読み込む。
【００３１】
そしてＳ２０にて、読み込んだ制御モデルの中から、コード生成処理が開始されてから選択されていない変数を１つ選択する。
次にＳ３０にて、Ｓ２０で選択された変数が公開変数であるか否かを判断する。公開変数は、複数のＣＰＵコアを有する電子制御装置で実行されるプログラムにおいて、複数のＣＰＵコアでアクセス可能な変数である。なお、公開変数の名前には、公開変数であることを示す予め設定された文字列（以下、公開文字列という）が付与される。このため、Ｓ３０では、例えば、Ｓ２０で選択された変数の名前に公開文字列が含まれている場合に、選択された変数が公開変数であると判断する。
【００３２】
ここで、選択された変数が公開変数でない場合には（Ｓ３０：ＮＯ）、Ｓ９０に移行する。一方、選択された変数が公開変数である場合には（Ｓ３０：ＹＥＳ）、Ｓ４０にて、Ｓ２０で選択された変数が浮動小数点型であるか否かを判断する。なお、浮動小数点型である変数の名前には、浮動小数点型であることを示す予め設定された文字列（以下、浮動小数点文字列という）が付与される。このため、Ｓ４０では、例えば、Ｓ２０で選択された変数の名前に浮動小数点文字列が含まれている場合に、選択された変数が浮動小数点型であると判断する。
【００３３】
ここで、選択された変数が浮動小数点型でない場合には（Ｓ４０：ＮＯ）、Ｓ９０に移行する。一方、選択された変数が浮動小数点型である場合には（Ｓ４０：ＹＥＳ）、Ｓ５０にて、Ｓ２０で選択された変数の処理にガード処理が存在するか否かを判断する。ここで、ガード処理が存在する場合には（Ｓ５０：ＹＥＳ）、Ｓ６０にて、Ｓ２０で選択された変数のガード処理に、非数チェックフラグ（後述）を操作する処理（以下、フラグ操作処理という）を追加し、Ｓ９０に移行する。
【００３４】
ここで、ガード処理にフラグ操作処理が追加されたソースコードの具体例を図３に示す。
図３は、変数ｔを最小値Ｍｉｎと最大値Ｍａｘとの間に設定するガード処理に、非数チェックフラグＦｌａｇを操作する処理が追加されたソースコード２００である。
【００３５】
具体的には、ソースコード２００は、変数tが最大値Max以上である場合には、変数tを最大値Maxに設定する（処理Ｐ１を参照）とともに、非数チェックフラグFlagを、無限大の可能性があることを示す値「Not_OK_Max」に設定する（処理Ｐ２を参照）。さらにソースコード２００は、変数tが最小値Min以下である場合には、変数tを最小値Minに設定する（処理Ｐ３を参照）とともに、非数チェックフラグFlagを、−無限大または非数の可能性があることを示す値「Not_OK_NaN」に設定する（処理Ｐ４を参照）。なお非数チェックフラグFlagは、定期的なレジスタ参照で、無限大または非数の可能性がないことを示す値「OK」に更新される。
【００３６】
また図２に示すように、Ｓ５０にて、ガード処理が存在しない場合には（Ｓ５０：ＮＯ）、Ｓ７０にて、Ｓ２０で選択された変数の処理に、無限大または非数になり得る演算処理が存在するか否かを判断する。無限大になり得る演算処理としては、例えば、０以外の値を０で除算する処理（例えば、１／０）が挙げられる。非数になり得る演算処理としては、例えば、０を０で除算する処理（例えば、０／０）と、０の０乗を算出する処理と、負の値の平方根を算出する処理が挙げられる。
【００３７】
ここで、無限大または非数になり得る演算処理が存在しない場合には（Ｓ７０：ＮＯ）、Ｓ９０に移行する。一方、無限大または非数になり得る演算処理が存在する場合には（Ｓ７０：ＹＥＳ）、Ｓ８０にて、Ｓ２０で選択された変数に、ガード処理とフラグ操作処理を追加し、Ｓ９０に移行する。
【００３８】
そしてＳ９０に移行すると、読み込んだ制御モデルに含まれる全ての変数がＳ２０の処理で選択されたか否かを判断する。ここで、Ｓ２０の処理で選択されていない変数がある場合には（Ｓ９０：ＮＯ）、Ｓ２０に移行して、上述の処理を繰り返す。
【００３９】
一方、全ての変数が選択された場合には（Ｓ９０：ＹＥＳ）、Ｓ１００にて、Ｓ２０〜Ｓ９０の処理によってガード処理とフラグ操作処理が追加された制御モデルからソースコードを生成し、コード生成処理を終了する。
【００４０】
次に、コード生成処理で生成されるソースコードの一例として、図４に示すように、ＣＰＵコア３０１，３０２，３０３を備える電子制御装置３００が、可変バルブ機構におけるバルブタイミングの目標値を算出する処理を示す。
【００４１】
電子制御装置３００は、ＣＰＵコア３０１，３０２，３０３と、ＲＯＭ３０４と、ＲＡＭ３０５，３０６，３０７とを備える。
ＣＰＵコア３０１，３０２，３０３はそれぞれ、プログラムを実行するための演算ユニット３１１，３１２，３１３とレジスタ３２１，３２２，３２３などを備える。
【００４２】
ＲＯＭ３０４は、不揮発性メモリであり、ＣＰＵコア３０１，３０２，３０３が実行する制御プログラムを記憶する。
ＲＡＭ３０５，３０６，３０７はそれぞれ、ＣＰＵコア３０１，３０２，３０３の演算結果等を一時的に記憶する。
【００４３】
ＣＰＵコア３０１，３０２，３０３は、ＲＡＭ３０５，３０６，３０７に記憶されているデータの内容を参照することができる。
また可変バルブ機構は、バルブタイミングとバルブリフト量を、エンジンの負荷に応じて最適な値に変化させる機構である。
【００４４】
バルブタイミングの目標値は、バルブタイミングの目標値をTiming［°］、燃料噴射量をInjectionQuantity［cc/min］、エンジン回転数をEngineRevolution［rpm］と表記して、下式（１）で表される。
【００４５】
Timing = Fun_Timing(InjectionQuantity, EngineRevolution)  ・・・（１）
なお、Fun_Timing(A,B)は、変数Aと変数Bを用いてバルブタイミング目標値Timingを算出する関数である。
【００４６】
また、燃料噴射量InjectionQuantityは、基本噴射量をBasic_InjectionQuantity ［cc/min］、補正係数をCompensating_Rateと表記して、下式（２）で表される。
InjectionQuantity = Basic_InjectionQuantity/ Compensating_Rate  ・・・（２）
そして、ＣＰＵコア３０１でバルブタイミングの目標値を算出する際に、ＣＰＵコア３０２で算出する燃料噴射量と、ＣＰＵコア３０３で算出するエンジン回転数を参照するとする。すなわち、燃料噴射量InjectionQuantityは、ＲＡＭ３０６に記憶される公開変数であり、エンジン回転数EngineRevolutionは、ＲＡＭ３０７に記憶される公開変数である。
【００４７】
式（２）に示すように、燃料噴射量InjectionQuantityの処理に除算処理が存在し、無限大または非数になる可能性がある。このため、コード生成処理が実行されることにより、燃料噴射量InjectionQuantityを算出する箇所にガード処理とフラグ操作処理が追加される。
【００４８】
ここで、ＣＰＵコア３０２で燃料噴射量InjectionQuantityを算出するソースコード４１０を図５に示す。
図５に示すように、ソースコード４１０は、燃料噴射量InjectionQuantityを算出する処理に、ガード処理とフラグ操作処理が追加されたものである。
【００４９】
具体的には、ソースコード４１０は、まず、式（２）で燃料噴射量InjectionQuantity を算出する（処理Ｐ５を参照）。そしてソースコード４１０は、燃料噴射量InjectionQuantityが最大値Max以上である場合には、燃料噴射量InjectionQuantityを最大値Maxに設定する（処理Ｐ６を参照）とともに、ＣＰＵコア３０２の非数チェックフラグFlag_Core2を、無限大の可能性があることを示す値「Not_OK_Max」に設定する（処理Ｐ７を参照）。さらにソースコード４１０は、燃料噴射量InjectionQuantityが最小値Min以下である場合には、燃料噴射量InjectionQuantityを最小値Minに設定する（処理Ｐ８を参照）とともに、非数チェックフラグFlag_Core2を、−無限大または非数の可能性があることを示す値「Not_OK_NaN」に設定する（処理Ｐ９を参照）。
【００５０】
また、ＣＰＵコア３０１でバルブタイミング目標値Timingを算出するソースコード４２０を図６に示す。
図６に示すように、ソースコード４２０は、まず、ＣＰＵコア３０２の非数チェックフラグFlag_Core2が、無限大または非数の可能性がないことを示す値「OK」に設定されていない場合に、ＣＰＵコア３０２のレジスタ３２２を参照する（処理Ｐ１０を参照）。一方、ソースコード４２０は、非数チェックフラグFlag_Core2が「OK」に設定されている場合には、ＣＰＵコア３０２のレジスタ３２２を参照することなく、次の処理に移行する。
【００５１】
さらにソースコード４２０は、ＣＰＵコア３０３の非数チェックフラグFlag_Core3が、無限大または非数の可能性がないことを示す値「OK」に設定されていない場合に、ＣＰＵコア３０３のレジスタ３２３を参照する（処理Ｐ１１を参照）。一方、ソースコード４２０は、非数チェックフラグFlag_Core3が「OK」に設定されている場合には、ＣＰＵコア３０３のレジスタ３２３を参照することなく、次の処理に移行する。
【００５２】
そしてソースコード４２０は、式（１）でバルブタイミング目標値Timingを算出する（処理Ｐ１２を参照）。
次に、バルブタイミング目標値Timingを算出する従来のソースコード５００を図７に示す。図７に示すように、ソースコード５００は、まず、ＣＰＵコア３０２のレジスタ３２２を参照する（処理Ｐ１３を参照）とともに、ＣＰＵコア３０３のレジスタ３２３を参照する（処理Ｐ１４を参照）。その後にソースコード５００は、式（１）でバルブタイミング目標値Timingを算出する（処理Ｐ１５を参照）。
【００５３】
図８は、従来の公開変数参照で要する時間と本実施形態の公開変数参照で要する時間を示すタイミングチャートである。なお図８は、定期的なレジスタ参照で非数チェックフラグが「OK」に更新される時間が１ｍｓである場合を示している。
【００５４】
図８に示すように、従来の公開変数参照では、公開変数を参照する毎に、ＣＰＵコアのレジスタを参照し（参照処理Ｒ１を参照）、その後に公開変数を参照する（参照処理Ｒ２を参照）。ＣＰＵコアのレジスタを参照するために要する時間は最大１４クロックである。また、公開変数を参照するために要する時間は最大３クロックである。したがって、従来の公開変数参照では、１回の公開変数参照で最大１７クロックの時間を必要とする。
【００５５】
図９は、ＣＰＵコアのレジスタを参照する処理をアセンブラ言語で記述したアセンブラコード６００を示す図である。図９に示すように、アセンブラコード６００は、ｊａｒｌ命令、ｓｔｆｆ命令、ａｎｄｉ命令、ｓｅｔｆｎｚ命令およびｊｍｐ命令で構成されており、それぞれの最大時間は４，３，１，１，５クロックである。すなわち、ＣＰＵコアのレジスタを参照する処理の最大時間は１４（＝４＋３＋１＋１＋５）クロックである。
【００５６】
一方、本実施形態の公開変数参照では、図８に示すように、公開変数を参照する毎に、非数チェックフラグを参照し（参照処理Ｒ３を参照）、その後に公開変数を参照する（参照処理Ｒ４を参照）。非数チェックフラグを参照するために要する時間は最大３クロックである。また、公開変数を参照するために要する時間は最大３クロックである。したがって、本実施形態の公開変数参照では、１回の公開変数参照で最大６クロックの時間を必要とする。
【００５７】
バルブタイミングの目標値を算出するためには、２回の公開変数参照が必要である。このため、従来の公開変数参照では、バルブタイミング目標値を算出するために２回のレジスタ参照と２回の公開変数参照が必要となる。これにより、バルブタイミング目標値の算出の際に、従来の公開変数参照では最大３４（＝１７×２）クロックの時間を必要とする一方、本実施形態の公開変数参照では最大１２（＝６×２）クロックの時間を必要とする。
【００５８】
このように構成された自動コード生成装置１は、制御の処理内容を記述する制御モデルに基づいてソースコードを生成する。
自動コード生成装置１は、制御モデルに含まれる変数が、複数のＣＰＵコアで参照され且つ浮動小数点型の変数（以下、処理対象変数という）であるか否かを判断する（Ｓ３０，Ｓ４０）。
【００５９】
そして自動コード生成装置１は、処理対象変数であると判断された変数が無限大または非数となる可能性があるか否かを判断するガード処理を行うためのコード（以下、ガード処理コードという）を生成して、ガード処理コードをソースコードに追加する（Ｓ８０，Ｓ１００）。
【００６０】
さらに自動コード生成装置１は、ガード処理コードの処理により処理対象変数が無限大または非数となる可能性があると判断された場合に、非数チェックフラグFlagを「Not_OK_Max」または「Not_OK_NaN」に設定するためのコード（以下、フラグ設定コードという）を生成して、フラグ設定コードをソースコードに追加する（Ｓ８０，Ｓ１００）。
【００６１】
このように自動コード生成装置１は、ガード処理コードとフラグ設定コードが追加されたソースコードを生成する。このソースコードが実行されると、ガード処理コードに基づいて、複数のＣＰＵコアで参照される公開変数が浮動小数点型である場合に無限大または非数となる可能性があるか否かが判断される。さらに、無限大または非数となる可能性があると判断された場合に、その旨を示すように非数チェックフラグFlagが設定される。
【００６２】
このため、自動コード生成装置１により生成されたソースコードを実行する第１ＣＰＵコアが第２ＣＰＵコアの公開変数を参照する場合に、第１ＣＰＵコアは、非数チェックフラグFlagを参照することにより、無限大または非数となる可能性があるか否かを確認するようにすることができる。
【００６３】
そして第１ＣＰＵコアは、無限大または非数となる可能性がある旨を非数チェックフラグFlagが示している場合には、公開変数に対応する第２ＣＰＵコアのレジスタを参照する一方、上記の旨を非数チェックフラグFlagが示していない場合には、第２ＣＰＵコアのレジスタの参照を省略するようにすることができる。
【００６４】
これにより、自動コード生成装置１は、公開変数を参照する毎にＣＰＵコアのレジスタの参照を行う必要がなくなるソースコードを生成することができ、複数のＣＰＵコアを備えた電子制御装置の演算処理負荷を低減することができる。
【００６５】
また、処理対象変数であると判断された変数が無限大または非数となる可能性があるか否かを判断する判断コードは、ガード処理を行うためのコードである。ガード処理は、変数が最大値Max以上である場合には変数を最大値Maxに設定し、変数が最小値Min以下である場合には変数を最小値Minに設定する処理である。このため、ガード処理において変数が最大値Max以上である場合に、無限大の可能性があると判断することができるとともに、変数が最小値Min以下である場合に、−無限大または非数の可能性があると判断することができる。
【００６６】
また自動コード生成装置１は、処理対象変数に対してガード処理が行われるか否かを判断し、処理対象変数に対してガード処理が行われると判断した場合に、ガード処理コードの追加を禁止する（Ｓ５０）。そして自動コード生成装置１は、処理対象変数に対して行われるガード処理に基づいてフラグ設定コードを生成して、フラグ設定コードをソースコードに追加する（Ｓ６０）。
【００６７】
これにより、自動コード生成装置１は、処理対象変数が無限大または非数となる可能性があるか否かを判断する処理を新たに追加する必要がなくなり、電子制御装置の演算処理負荷を更に低減することができる。
【００６８】
また自動コード生成装置１は、無限大または非数となる可能性がある演算処理が行われるか否かを判断し、この演算処理が行われない場合に、ガード処理コードとフラグ設定コードの追加を禁止する（Ｓ７０）。
【００６９】
これにより、自動コード生成装置１は、無限大または非数となる可能性がある演算処理が行われない処理対象変数に対してガード処理コードとフラグ設定コードを追加する必要がなくなり、電子制御装置の演算処理負荷を更に低減することができる。
【００７０】
また、ガード処理コードには、比較演算が含まれる。非数との比較演算の演算結果は常に偽となる。このため、ガード処理コードに含まれる比較演算での演算結果が真であれば、処理対象変数が非数となる可能性はないと判断することができる。
【００７１】
以上説明した実施形態において、Ｓ３０，Ｓ４０の処理は本発明における変数判断手段および変数判断手順、Ｓ８０，Ｓ１００の処理は本発明における第１コード追加手段および第１コード追加手順、Ｓ８０，Ｓ１００の処理は本発明における第２コード追加手段および第２コード追加手順である。
【００７２】
また、Ｓ５０の処理は本発明における第１追加禁止手段、Ｓ６０の処理は本発明における第３コード追加手段、Ｓ７０の処理は本発明における第２追加禁止手段、コード生成ツール１００は本発明におけるコード生成プログラムである。
【００７３】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
また、上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合させたりしてもよい。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加または置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【符号の説明】
【００７４】
１…自動コード生成装置、１１…ＣＰＵ、１２…ＲＯＭ、１３…ＲＡＭ、１４…データ記憶装置、１００…コード生成ツール
【図１】
2016115189.tif 000003
【図２】
2016115189.tif 000004
【図３】
2016115189.tif 000005
【図４】
2016115189.tif 000006
【図５】
2016115189.tif 000007
【図６】
2016115189.tif 000008
【図７】
2016115189.tif 000009
【図８】
2016115189.tif 000010
【図９】
2016115189.tif 000011