Подавите генерацию случаев по умолчанию для недостижимых операторов switch Stateflow

В этом примере показано, как задать, сгенерировать ли случаи по умолчанию для операторов case оператора switch в коде для графиков Stateflow®. Сгенерированный код, который не содержит случаи по умолчанию, сохраняет потребление ROM и включает лучшее покрытие кода, потому что каждая ветвь в сгенерированном коде является фальсифицируемой.

Некоторые стандарты кодирования, такие как MISRA, требуют случая по умолчанию для операторов case оператора switch. Если вы хотите увеличить свои возможности создания MISRA C совместимый код, сгенерируйте случаи по умолчанию для недостижимых операторов switch Stateflow.

Пример

Рисунки 1, 2, и 3 показывают соответствующие фрагменты sldemo_fuelsys модель, система с обратной связью, содержащая объект и контроллер. Логикой контроллера скорости Воздушного топлива является диаграмма Stateflow, которая задает различные режимы работы.

Рисунок 1: модель верхнего уровня объекта и контроллера

Рисунок 2: Топливная подсистема контроллера скорости

Рисунок 3: Топливная логика контроллера скорости

Сгенерируйте код со случаями по умолчанию для недостижимых операторов switch Stateflow

  1. В командном окне MATLAB, чтобы открыть sldemo_fuelsys через rtwdemo_fuelsys войдите:

    rtwdemo_fuelsys
  2. Откройте диалоговое окно Параметров конфигурации Модели. На вкладке Code Generation> Code Style очистите параметр Suppress generation of default cases for Stateflow statements if unreachable.

  3. В командном окне MATLAB, чтобы создать модель, введите:

    slbuild('sldemo_fuelsys/fuel_rate_control');

Для различных режимов работы, fuel_rate_control.c файл содержит случаи по умолчанию для недостижимых операторов switch. Например, для режима работы Завершения работы, сгенерированный код содержит этот оператор по умолчанию:

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

Для режима работы Прогрева сгенерированный код содержит этот оператор по умолчанию:

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

Подавите случаи по умолчанию для недостижимых операторов switch Stateflow

  1. Откройте диалоговое окно Configuration Parameters. На вкладке Code Generation> Code Style выберите параметр Suppress generation of default cases for Stateflow statements if unreachable.

  2. Создайте модель.

Прочитайте fuel_rate_control.c файл. Случаи по умолчанию для недостижимых операторов switch не находятся в сгенерированном коде.

Похожие темы