Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Embedded Coderによって生成されたコードに対するPolyspace解析の実行

Embedded Coder®または TargetLink®を使用して Simulink®モデルからコードを生成する場合、生成されたコードのバグやランタイム エラーの解析を、Simulink 環境から Polyspace®を使用して実行できます。Polyspace プロジェクトを手動で設定する必要はありません。

このトピックでは、コード生成に Embedded Coder を使用します。TargetLink で生成したコードの解析については、TargetLink によって生成されたコードに対する Polyspace 解析の実行を参照してください。

特定のモデルを含むチュートリアルは、Simulink モデルから生成されたコードに対する Polyspace 解析の実行を参照してください。

前提条件

Simulink から Polyspace を実行する前に、Polyspace インストールと MATLAB®インストールをリンクしなければなりません。MATLAB や Simulink との Polyspace の統合を参照してください。

コードの生成と解析

コード生成の設定とコードの生成

コード生成を設定してモデルからコードを生成するには、"次のいずれか"を行います。

  • [アプリ]タブで[Embedded Coder]を選択します。次に、[C コード]タブで[クイック スタート]を選択します。画面の指示に従います。

  • [C コード]タブで[設定]をクリックし、Simulink コンフィギュレーション パラメーターでコード生成を設定します。設定する主なパラメーターは、以下のとおりです。

    • タイプ(Simulink):[固定ステップ]を選択します。

    • ソルバー(Simulink):[自動 (ソルバーの自動選択)]または[離散 (連続状態なし)]を選択します。

    • システム ターゲット ファイル(Simulink Coder):ert.tlcまたはautosar.tlcと入力します。ターゲット ファイルをert.tlcから派生させる場合、それを指定することもできます。

    • コードからモデルに(Embedded Coder):コードからモデルへのリンクを有効にするには、このオプションを選択します。

    設定するすべてのパラメーターのリストは、Polyspace 解析で推奨されるモデル コンフィギュレーション パラメーターを参照してください。

    あるいは、[Polyspace]オブジェクティブを使用してコード生成アドバイザーを実行し、必要なパラメーターが既に設定されているかどうかを確認します。Configure Model for Code Generation Objectives by Using Code Generation Advisor(Embedded Coder)を参照してください。

    モデルからコードを生成するには、[C コード]タブで[コード生成]を選択します。診断ビューアーでコード生成の進行状況を確認できます。

コード解析の設定

[アプリ]タブで[Polyspace コード検証]を選択します。[Polyspace]タブで、次を行います。

  1. 実行する製品を次から選択します。Bug FinderまたはCode Prover

  2. [設定]を選択します。必要に応じて、これらのオプションの既定値を変更します。

    • 検証設定: プロジェクト コンフィギュレーションで指定されている既定のチェックに加え、MISRA®コーディング ルールのチェックを有効にします。既定の Bug Finder チェックではバグを調査します。既定の Code Prover チェックではランタイム エラーを調査します。

    • 入力調整可能なパラメーター、および出力: Code Prover 解析の精度を上げるために、入力、調整可能なパラメーター、または出力を制約します。

    • 出力フォルダー:結果用に専用のフォルダーを指定します。既定の解析では、検証結果は現在の作業フォルダー内のresults_modelNameフォルダーに保存されます。

    • 検証後に結果を自動的に開く

    設定するすべてのオプションのリストは、Simulink での Polyspace 解析を参照してください。

コードの解析

モデルから生成されたコードを解析するには、キャンバスの任意の場所をクリックします。[次のコードの解析]フィールドにモデル名が表示されます。(解析の実行)を選択します。

Embedded Coder を使用している場合、Polyspace は(解析の実行)がクリックされたときに生成コードをチェックします。生成コードが存在しない場合、Polyspace はコード生成プロセスを起動してから、解析を開始します。

現在のモデルが別のモデル内で参照されており、生成されたコードをモデルが参照されているコンテキストにおいて検証する場合は、[最上位モデルとして生成されたコード]の代わりに[モデル参照として生成されたコード]を使用します。後者の場合、生成コードがなくても Polyspace はコード生成を自動的に起動しません。[モデル参照として生成されたコード]を解析する場合、Polyspace 解析を実行する前にコードを生成してください。

MATLAB コマンド ウィンドウで解析の進行状況を確認できます。

明示的に無効にしない限り、検証結果が自動的に開きます。既定では、検証結果は現在のフォルダー内のresults_ModelNameフォルダーに保存されます。新しく実行するたびに前の検証結果は上書きされます。既定のフォルダーを変更したり、検証結果を Simulink プロジェクトに保存したりすることができます。これらの変更を行うには、[Polyspace]タブで[設定]を選択します。

検証結果を閉じていて、後で開く場合は、[Polyspace]タブで[解析結果]を選択します。最後の実行以前の検証結果を開くには、[以前の結果を開く]を選択して、以前の検証結果を含むフォルダーに移動します。

解析結果のレビュー

コードでの検証結果のレビュー

検証結果は Polyspace ユーザー インターフェイスの[検証結果のリスト]ペインに表示されます。各検証結果をクリックすると、[ソース]ペインにソース コードが表示され、[検証結果の詳細]ペインに詳細が表示されます。参考:

コードからモデルへの移動

コード コメントのリンクには、後続のコード行を生成するブロックが表示されます。モデル内のブロックを確認するには、リンクのブロック名をクリックします。問題が発生した場合は、コードからモデルへの移動のトラブルシューティングを参照してください。

あるいは、変数名を右クリックして[モデルに移動]を選択することもできます。このオプションはすべての変数に対して使用できるわけではありません。Simulink ブロックに直接トレースできるのはソース コード変数のサブセットのみです。このような変数では[モデルに移動]オプションを使用できます。生成されたコードで直接 Simulink ブロックにトレースできる変数の詳細については、Trace Simulink Model Elements in Generated Code(Embedded Coder)を参照してください。

問題の修正

コードの問題がモデルの設計上の欠陥に関連しているかどうかを調べます。

モデルの設計上の欠陥は、生成されたコードで問題を引き起こす可能性があります。次に例を示します。

  • 生成されたコードでは、特定の範囲のブロック パラメーターにのみ特定のランタイム エラーがない場合があります。この問題を修正するには、そのブロック パラメーターのストレージ クラスを変更するか、コンフィギュレーション パラメーター調整可能なパラメーターを使用して、解析にキャリブレーション データを使用します。

  • 生成されたコードでは、特定の範囲の入力にのみ特定のランタイム エラーがない場合があります。このエラーがない範囲を特定するには、Inport ブロックの信号の最小値と最大値を指定します。Polyspace 解析では、この制約範囲を使用します。ブロックの信号範囲の操作(Simulink)を参照してください。

  • Stateflow®チャートの特定の遷移が到達不能である場合があります。

S-Function ブロックに手書きの C/C++ コードを含める場合、Polyspace 解析によって、手書きのコードと生成されたコード間の統合の問題を明らかにすることができます。また、手書きのコードを単独で解析することもできます。S-Function コードに対する Polyspace 解析の実行を参照してください。

ブロックに注釈を付けることによる問題の正当化

Polyspace 検証結果に応じてモデルに変更を行わない場合は、関連するブロックに注釈を付けます。ブロックに注釈を付けたら、そのブロックから生成されるコード操作によって、コメントが入力された検証結果が表示されます。サブシステム ブロックまたは関数呼び出しを行うブロックに注釈を付ける場合、そのブロックから生成されたコード操作は、解析結果内のコメントを表示しません。そのブロックがルックアップ テーブルであれば、注釈を使用する代わりにStub lookup tablesを有効にします。[ルックアップ テーブルのスタブ化]を参照してください。

嵌入式编码器を使用して生成されたコードにはMISRAC®:2012 からの既知の逸脱があります。Deviations Rationale for MISRA C:2012 Compliance(Embedded Coder)を参照してください。このような既知の問題は、ブロックに注釈を付けることにより正当化します。

Simulink ブロックの注釈または生成されたコードの注釈は、解析履歴では考慮されません。モデルをアップデートすると、注釈が変化しなくても Polyspace の結果は変化する可能性があります。モデルをアップデートすると、既存の注釈は期限切れになります。モデルまたは生成されたコードをアップデートしたら注釈をチェックしてください。

Polyspaceユーザー インターフェイスでのブロックへの注釈付け

Embedded Coder を使用してコードを生成すると、Simulink ブロックに Polyspace ユーザー インターフェイスで直接注釈を付けることができます。注釈を付ける問題を見つけて、[検証結果の詳細]ペインで[重大度][ステータス]、およびオプションのメモを追加することにより、レビュー情報を入力します。たとえば、Polyspace ユーザー インターフェイスで以下を行います。

  • 問題の[ステータス]To Investigateに設定する

  • 問題の[コメント]Might Impact "Module"に設定する

ソース コードで問題を表示している変数を右クリックして、コンテキスト メニューから[ブロックへの注釈]を選択します。

レビュー情報は Simulink エディターにブロック注釈として引き継がれ、そこでは注釈が付けられたブロックが強調表示されます。

Simulink ブロックに複数回注釈を付けることができます。ブロックに後で付けられる注釈は、以前の注釈に付加されます。これらの注釈を Simulink エディターで表示することはできません。Polyspace を使用して生成コードを解析する場合、これらの注釈は Polyspace ユーザー インターフェイスの[検証結果の詳細]ペインでレビュー情報として表示されます。

Polyspace ではユーザー指定の情報を使用して Simulink に注釈を事前入力します。Polyspace ユーザー インターフェイスに設定されたコメントは、Simulink の[コメント]フィールドに二重引用符で囲んで表示されます。Polyspace ユーザー インターフェイスのコメント内で二重引用符を使用すると、Simulink では単一引用符に置き換えられます。

Simulink ブロックにトレースできるコード要素にはオプション[ブロックへの注釈]を使用できます。詳細は,Trace Simulink Model Elements in Generated Code(Embedded Coder)を参照してください。

金宝appエディターでのブロックへの注釈付け

Simulink エディターでブロックに注釈を付けるには、そのブロックを選択して、[Polyspace]タブで[注釈の追加]を選択します。[Polyspace の注釈]ウィンドウで以下を行います。

  • ドロップダウン メニュー[注釈タイプ]から、注釈を付ける Polyspace 検証結果のタイプを選択します。

  • 同じタイプの複数の検証結果に注釈を付ける場合、テキスト ボックスに検証結果の頭字語のコンマ区切りリストを入力します。詳細は、以下を参照してください。

  • 1 つの検証結果のみに注釈を付ける場合、[1 つのチェックのみ]を選択します。テキスト ボックスがドロップダウン メニューに変換されます。ドロップダウン メニューから、注釈を付ける検証結果を選択します。

  • 対応するテキスト ボックスで、検証結果に割り当てるステータス、重大度、およびコメントを入力します。

[Polyspace の注釈]ウィンドウでは、一度に 1 つのタイプの Polyspace 検証結果に注釈を付けることができます。複数のタイプの検証結果に注釈を付けるには、[Polyspace の注釈]ウィンドウを複数回開きます。そのたびに、1 つのタイプの Polyspace 検証結果に対応する注釈を追加します。それぞれの検証結果に、異なる注釈が付けられます。これらの注釈を Simulink エディターで表示することはできません。Polyspace を使用して生成コードを解析する場合、これらの注釈は Polyspace ユーザー インターフェイスの[検証結果の詳細]ペインでレビュー情報として表示されます。

生成されたコードでの操作が、Code Prover のオレンジ チェックの原因となる場合があります。ある操作がオーバーフローする可能性があるとします。生成されたコードでは、操作の後に飽和させることでオーバーフローを防止します。Polyspace では、依然として潜在的なオーバーフローにオレンジ チェックのフラグが付けられます。このようなチェックをコード コメントによって正当化するには、コンフィギュレーション パラメーターOperator annotations(Embedded Coder)を指定します。

注釈付きブロックをコピーして別のモデルや同じモデルの別の位置で使用すると、コンテキストが変わるため、誤った注釈が表示される可能性があります。

  • ライブラリや非アトミック サブシステムの内部にあるブロックは多くの異なるコンテキストで再利用されるため、Polyspace ではこれらのブロックに注釈を付けることはできません。たとえば、ライブラリ ブロック内部のブロックに注釈を付けて、そのライブラリ ブロックのすべてのインスタンスに対する検証結果を正当化することはできません。

  • Simulink では、別のモデルや同じモデルの別の位置にコピーされたブロックに含まれている Polyspace の注釈は保持されません。

関連するトピック