В этом примере показано, как задать, сгенерировать ли случаи по умолчанию для операторов case оператора switch в коде для графиков Stateflow®. Сгенерированный код, который не содержит случаи по умолчанию, сохраняет потребление ROM и включает лучшее покрытие кода, потому что каждая ветвь в сгенерированном коде является фальсифицируемой.
Некоторые стандарты кодирования, такие как MISRA, требуют случая по умолчанию для операторов case оператора switch. Если вы хотите увеличить свои возможности создания MISRA C совместимый код, сгенерируйте случаи по умолчанию для недостижимых операторов switch Stateflow.
Рисунки 1, 2, и 3 показывают соответствующие фрагменты sldemo_fuelsys
модель, система с обратной связью, содержащая объект и контроллер. Логикой контроллера скорости Воздушного топлива является диаграмма Stateflow, которая задает различные режимы работы.
Рисунок 1: модель верхнего уровня объекта и контроллера
Рисунок 2: Топливная подсистема контроллера скорости
Рисунок 3: Топливная логика контроллера скорости
В командном окне MATLAB, чтобы открыть sldemo_fuelsys
через rtwdemo_fuelsys
войдите:
rtwdemo_fuelsys
Откройте диалоговое окно Параметров конфигурации Модели. На вкладке Code Generation> Code Style очистите параметр Suppress generation of default cases for Stateflow statements if unreachable.
В командном окне MATLAB, чтобы создать модель, введите:
rtwbuild('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;
Откройте диалоговое окно Configuration Parameters. На вкладке Code Generation> Code Style выберите параметр Suppress generation of default cases for Stateflow statements if unreachable.
Создайте модель.
Прочитайте fuel_rate_control.c
файл. Случаи по умолчанию для недостижимых операторов switch не находятся в сгенерированном коде.