S-Function および C/C++ コードのサポートの制限事項と考慮事項
Simulink Design Verifier での S-Function の有効化
Simulink® Design Verifier™ は、Embedded Coder® で生成されたコードのテスト ケース生成をサポートします。Simulink Design Verifier は、次の S-Function のエラー検出、テスト ケース生成、およびプロパティ証明もサポートします。
def.Options.supportCoverageAndDesignVerifier
を true に設定してレガシ コード ツールによって生成される。[S-Function Builder] ダイアログ ボックスの [ビルド情報] タブで [Design Verifier のサポートを有効にする] を選択することで、S-Function Builder によって生成される。
S-Function のコンパイル中に、オプション
-sldv
が関数slcovmex
に渡される。
これらの 3 つの方法の詳細については、About C MEX S-Functionsを参照してください。
S-Function および C/C++ コードのサポートの制限事項
Simulink Design Verifier は、以下を含む S-Function または C/C++ コードをサポートしません。
連続状態。Simulink Design Verifier はそのようなコードを解析しません。
ゼロクロッシング関数。Simulink Design Verifier はそのようなコードを解析時に無視します。
INF オブジェクトまたは NaN オブジェクトを記述する定数。Simulink Design Verifier は、そのようなコードに浮動小数点オーバーフロー エラーが含まれているとみなします。Simulink Design Verifier の解析では、そのようなケースのオーバーフロー エラーのタイプを特定できませんが、コードのどの行によって非互換性が発生しているかを判定できます。Polyspace® では、コードに浮動小数点オーバーフロー エラーが含まれている原因に関する詳細が得られます。
slcovmex
を使用してコンパイルされた S-Function の端子に入る信号要素を、連続として指定しなければなりません。SimStruct
関数ssSetInputPortRequiredContiguousを使用します。
Simulink Design Verifier は、S-Function および C/C++ コードについて、次の設計エラーをサポートします。
アクティブ ロジックを含むデッド ロジック。
範囲外の配列。これには、C/C++ の場合の範囲外のポインターが含まれます。
ゼロ除算。
volatile 変数を通常の変数として扱う
Simulink Design Verifier では、volatile 変数のオプションをスタブすることや、通常の変数として扱うことができます。[volatile 修飾子を無視] パラメーターを選択すると、volatile 要素は volatile 以外の要素と同様に扱われます。[volatile 修飾子を無視] の選択を解除すると、volatile 要素へのアクセスをスタブするという、以前の動作に戻ります。
Simulink Design Verifier で S-Function および C/C++ コードを有効にする場合の考慮事項
モデルに有効な S-Function、または Embedded Coder で生成された C/C++ コードが含まれる場合、そのモデルのプロパティ証明解析またはテスト生成解析を実行するときに、Simulink Design Verifier はコードにランタイム エラーが含まれていないと仮定します。コードにランタイム エラーが含まれる場合 (ゼロ除算、初期化されていない変数へのアクセス、範囲外の配列など)、プロパティ証明解析またはテスト生成解析で正しい結果が得られない可能性があります。Polyspace によってチェックされ、ランタイム エラーが含まれないコードにより、Simulink Design Verifier 解析の正しい結果が得られます。
実行時エラーが原因となる適切な結果の発生を避けるには、まず設計エラー検出解析を実行し、次にプロパティ証明またはテスト生成解析を実行します。
Simulink Design Verifier がコード内の配列のサイズを判定できない場合 (サイズが不定で動的に割り当てられる配列など)、Simulink Design Verifier は配列の上限を仮定します。仮定された上限が適切であることを確認してください。
Simulink Design Verifier で S-Function のサポートを有効にしない場合、Simulink Design Verifier は S-Function をスタブします。S-Function のサポートを有効にした場合、Simulink Design Verifier はより詳細な情報を得るために S-Function の内容を解析します。場合によっては、Simulink Design Verifier は内部で S-Function をスタブします。たとえば、次のような C/C++ 構造の場合に内部でスタブします。
ライブラリ関数の呼び出し (ライブラリ関数はスタブに置換される)。
複雑なポインター操作。
キャスト先またはキャスト元となるポインター型に互換性がないか不明である。
このような構造を含むモデルには [部分的に互換] というラベルが付けられます。
ソース コードの保護
S-Function の内容を解析するために、ソース コードから得た情報を含む、S-Function の実装に関する情報が共有オブジェクト内に保存されています。ユーザーはこの情報に直接アクセスできませんが、S-Function に機密のソース コードが含まれる場合、外部にリリースされるモデルでは、Simulink Design Verifier による S-Function のサポートを無効にすることを検討してください。
参考
テスト ケース生成のための S-Function の構成 | Embedded Coder で生成されたコードのテスト ケースの生成