到達不能な 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 ケースを含むコードを生成
MATLAB コマンド ウィンドウで、
sldemo_fuelsys
を開くために次のように入力します。openExample('sldemo_fuelsys');
[モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[コード生成] 、 [コード スタイル] タブで、[到達不可能な場合、Stateflow switch ステートメントの default ケースを生成しない] パラメーターをオフにします。
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 ケースを抑制
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[コード生成] 、 [コード スタイル] タブで、[到達不可能な場合、Stateflow switch ステートメントの default ケースを生成しない] パラメーターをオンにします。
モデルを作成します。
fuel_rate_control.c
ファイル全体を確認します。到達不能な switch ステートメントの default ケースは生成コードに含まれていません。