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