Main Content

到達不能な Stateflow switch ステートメントの default ケースの生成を抑制

この例では、Stateflow® チャートのコードで switch-case ステートメントの default ケースを生成するかどうかを指定する方法を示します。default ケースを含めずにコードを生成すると、ROM の消費が抑えられ、生成コードのすべての分岐が反証可能になるためコード カバレッジが向上します。

コーディング規約によっては、MISRA など、switch-case ステートメントの default ケースが必須のものもあります。MISRA C 準拠コードが生成される可能性を高めるには、到達不能な Stateflow switch ステートメントの default ケースを生成します。

図 1、2、3 は、プラントとコントローラーを含む閉ループ システムである sldemo_fuelsys モデルの関連部分を示しています。空燃比コントローラーのロジックは、さまざまな動作モードを指定する Stateflow チャートです。

図 1: プラントとコントローラーの最上位モデル

図 2: 燃料比コントローラー サブシステム

図 3: 燃料比コントローラーのロジック

到達不能な Stateflow switch ステートメントの default ケースを含むコードを生成

  1. MATLAB コマンド ウィンドウで、sldemo_fuelsys を開くために次のように入力します。

    openExample('sldemo_fuelsys');
  2. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[コード生成][コード スタイル] タブで、[到達不可能な場合、Stateflow switch ステートメントの default ケースを生成しない] パラメーターをオフにします。

  3. MATLAB コマンド ウィンドウで、モデルをビルドするために次のように入力します。

    slbuild('sldemo_fuelsys/fuel_rate_control');

さまざまな操作モードの fuel_rate_control.c ファイルに、到達不能な switch ステートメントの default ケースが含まれています。たとえば、Shutdown 操作モードについては、生成コードに次の default ステートメントが含まれています。

default:
 /* Unreachable state, for coverage only */
 rtDWork.bitsForTID0.is_Fuel_Disabled = IN_NO_ACTIVE_CHILD;
 break;

Warmup 操作モードについては、生成コードに次の default ステートメントが含まれています。

default:
 /* Unreachable state, for coverage only */
 rtDWork.bitsForTID0.is_Low_Emissions = IN_NO_ACTIVE_CHILD;
 break;

到達不能な Stateflow switch ステートメントの default ケースを抑制

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[コード生成][コード スタイル] タブで、[到達不可能な場合、Stateflow switch ステートメントの default ケースを生成しない] パラメーターをオンにします。

  2. モデルを作成します。

fuel_rate_control.c ファイル全体を確認します。到達不能な switch ステートメントの default ケースは生成コードに含まれていません。

関連するトピック