このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simulink モデル内のカスタム コードに対する Polyspace 解析の実行
カスタム C/C++ コードを使用して Simulink® モデルのアルゴリズムを実装する場合、手動で Polyspace® プロジェクトを設定せずに Simulink ツールストリップから直接カスタム コードを解析できます。モデル内のカスタム コードの動作は、入力の数や特性、設計範囲の指定などの、モデルのコンテキストに依存します。MATLAB® または Simulink から Polyspace 解析を実行する場合、解析ではモデルのコンテキストが考慮されます。MATLAB または Simulink の外部でカスタム コードの Polyspace 解析を実行する場合、たとえばオプション ファイルを使用して、手動でモデルのコンテキストを指定します。
カスタム コードの Polyspace 解析は、生成コードの Polyspace 解析と比較して目的および構成に以下の相違点があります。
生成されたコードの解析 | カスタム コードの解析 |
---|---|
C Caller、C Function、または S-Function ブロック内のコードを単独で解析します。 | モデル全体から生成されたコードを解析します。 |
Simulink シミュレーションでバグまたはランタイム エラーの原因となる可能性がある、カスタム コード内の問題を検出します。 | 生成されたコード全体で、組み込みシステムに展開されるとバグまたはランタイム エラーの原因となる可能性がある問題を検出します。 |
Polyspace のターゲット設定には、Simulink シミュレーションとの互換性があります。 | Polyspace の [ターゲット プロセッサ タイプ] 設定は、Simulink の [コンフィギュレーション パラメーター] ダイアログ ボックスで指定される [ハードウェア実行] 設定と同じです。 |
前提条件
Simulink で Polyspace を実行する前に、Polyspace インストールと MATLAB インストールをリンクします。MATLAB や Simulink との Polyspace の統合またはPolyspace Server 製品と MATLAB との統合を参照してください。
カスタム コードの解析
カスタム アルゴリズムの実装には、次のような異なる Simulink カスタム コード ブロックを使用できます。
C Function:C Function ブロックを使用した外部 C/C++ コードの Simulink への統合 (Simulink)を参照してください。
C Caller:C Caller ブロックを使用した C コードの統合 (Simulink)を参照してください。
S-Function:C MEX S-Function を使用したブロックの作成 (Simulink)を参照してください。
これらのブロックは機能が異なります。カスタム ブロックの機能の比較 (Simulink)を参照してください。
構成の指定
Simulink モデルで Polyspace を実行する前に、Polyspace と互換性を持つように Simulink モデルを構成します。
Polyspace でカスタム コードを解析するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [シミュレーション ターゲット] ペインで [カスタム コードのインポート] を選択します。
インクルードされたカスタム コードがコンパイルされない場合、Polyspace 解析は失敗する可能性があります。Polyspace 解析を開始する前に、カスタム コードにコンパイルの問題がないか確認します。C function ブロックでは、ヘッダー ファイルのインクルードはサポートされていません。このブロックの場合、[シミュレーション ターゲット] ペインでインクルード ステートメントを指定します。C Caller および S Function ブロックにインクルードされるコードの場合、ソース ファイルにインクルード ステートメントを指定します。Polyspace は Simulink よりもコードとコンパイルの要件が厳格なので、モデル シミュレーションでは期待どおりの結果が生成される場合でも、カスタム コードの Polyspace コンパイルが失敗する場合があります。
Polyspace 解析の開始
Simulink エディターまたは MATLAB コマンド ウィンドウから、モデル内のカスタム コードに対する Polyspace 解析を開始します。
S function ブロック内のカスタム コードに対する Polyspace 解析の実行についての詳細は、S-Function コードに対する Polyspace 解析の実行を参照してください。
C Caller ブロック内のカスタム コードに対する Polyspace 解析の実行についての詳細は、C Caller ブロックおよび Stateflow チャート内のカスタム コードに対する Polyspace 解析の実行を参照してください。
C function ブロック内のカスタム コードに対する Polyspace 解析の実行についての詳細は、C Function ブロック内のカスタム コードに対する Polyspace 解析の実行を参照してください。
解析が始まると、Polyspace はモデルからカスタム コードを抽出します。設計範囲指定と入力の特性を維持するため、Polyspace はトップ モデル内のカスタム コード ブロックの各インスタンスが一意のモデル コンテキストを持つと見なし、ブロックを一意のものとして扱います。カスタム コード ブロックを含むモデルが別のトップ モデルで複数回参照されるとき、カスタム コード ブロックのモデル コンテキストは同じままです。Polyspace は、参照モデルの異なるインスタンスのカスタム コード ブロックを単一のカスタム コード インスタンスとして扱います。
コードおよびモデル コンテキストを抽出した後、Polyspace はそれらを手書きのコードとして解析します。Code Prover 解析の前提条件を参照してください。
解析結果のレビュー
Simulink エディターで [解析結果] をクリックします。Polyspace ユーザー インターフェイスで解析結果が開きます。フラグが設定された問題は [結果のリスト] ペインに表示されます。参考:
フラグが設定された問題を修正するには、コードを変更します。詳細は、特定された問題の修正を参照してください。または、Simulink モデルを変更して Polyspace の結果を解決します。問題の修正を参照してください。
フラグが設定された問題が既知であるか正当化済みである場合、カスタム コード ブロックでその情報に注釈を付けます。Polyspace ユーザー インターフェイスから直接カスタム コード ブロックに注釈を付けることができます。Simulink ブロックに注釈を付けて Polyspace の結果に対処を参照してください。