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

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

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

Пример

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

Фигура 1: Модель верхнего уровня объекта управления и контроллера

Фигура 2: Подсистема контроллера расхода топлива

Фигура 3: Логика контроллера расхода топлива

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

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

    rtwdemo_fuelsys
  2. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration parameters). На вкладке 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;

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

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

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

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

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

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

Похожие темы